全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件
访问控制

使用 RSA 密钥对访问 API

更新时间:2018-01-13 02:24:21

背景

AccessKey (AK) 是针对阿里云账号和 RAM 用户发布的一种身份认证,用于后者在向阿里云请求 API 时进行身份验证。基于 AK 的 API 认证机制适应一般安全合规性需求。为满足企业上云时更严苛的安全目标,比如要求云服务商提供不可抵赖 (Non-Repudiation) 的安全能力等,阿里云提供了基于 RSA 密钥对的 API 访问方法。

本文具体介绍了使用 RSA 密钥对访问阿里云服务 API 的基本原理及操作方法,帮助您理解和应用。

基本原理

RSA 密钥对包含一个公有密钥(PublicKey)和一个私有密钥(PrivateKey),它们分别由阿里云和 RAM 用户(可以指一个真实用户或一个应用程序)保管。

应用程序在使用 RSA 密钥访问阿里云服务 API 时,其操作逻辑如下图所示:

使用RSA密钥对访问阿里云API原理图

操作逻辑说明:

  1. 应用程序使用 PrivateKey 计算签名,并请求 STS 服务获取一个临时访问密钥SessionAK(通常有效期为 1 小时)。

  2. 应用程序使用 SessionAK 访问 API。

  3. SessionAK 过期后,应用程序重复请求 STS 服务以获取新的 SessionAK。

注意:SessionAK 代表 RAM 用户的临时身份认证密钥,它与长期 AK 的区别只是有效期不同;它们都需要在 RAM 用户获得正确的授权之后,才能被用来访问云服务 API。

快速使用方法

RSA 密钥对 只支持 RAM 用户使用。作为准备工作,应先开通 RAM,并创建相应的 RAM 用户。

操作步骤

创建和使用 RSA 密钥的基本步骤如下:

  1. 管理员 开通 RAM

  2. 管理员 创建 RAM 用户,并给该 RAM 用户 授予权限(授权时请遵循最小权限原则)。

  3. 管理员为 RAM 用户创建 RSA 密钥对。

    管理员登录进入 RAM 控制台,在 用户管理 页面,选择用户并单击其用户名进入 用户详情 页面,可以看到 用户公有密钥 菜单。使用以下任意一种方法给 RAM 用户创建公有密钥:

    • 方法 1:单击 创建新的密钥对,创建成功后会产生一个 PublicKey ID 和一个密钥对(包含一个公有密钥和一个私有密钥),您需要下载并保存密钥对的私有密钥,阿里云会自动保存公有密钥。

      注意:阿里云不会保存私有密钥,一旦用户私有密钥丢失,只能重新创建新的密钥对。

    • 方法 2:单击 上传您自己的公有密钥,可将用户自己创建好的公有密钥文件上传到阿里云,阿里云将生成一个对应的 PublicKey ID。RAM当前支持的RSA密钥长度为2048,支持的PublicKey格式必须为X509 PEM。

      注意:如果用户不清楚如何在本地创建自己的RSA密钥对,推荐使用OpenSSL工具来完成,具体方法可参考下文描述。

  4. 在阿里云SDK中使用 RSA 密钥。给您的应用程序配置 RSA 密钥(即从上一步骤中获得的 PublicKeyID 和 PrivateKey),然后参考下述方法在阿里云SDK中使用RSA密钥。

    阿里云 SDK 具体用法请参考:

RAM用户自主管理公有密钥

RAM用户默认时没有权限管理自己的公有密钥,但管理员可以授权RAM用户能自主管理自己的公钥。

如果您是RAM管理员,你可以通过如下操作步骤进行授权:登录进入RAM控制台->设置->子用户安全设置,勾选上 “允许自主管理PublicKey” 即可完成授权。

RAM用户在获得授权后便可以登录控制台进行自主的公钥管理。

操作步骤如下:

  • 登录进入子用户用户中心 -> 安全管理。
  • 选择“用户公有密钥”,可以创建密钥对或上传用户自己的公有密钥,也可以冻结或删除已创建的公有密钥。

本地创建RSA密钥对

为了确保RSA密钥对的安全,用户可能要求在本地创建密钥对,然后仅需将公有密钥上传到阿里云。那么,我们推荐用户使用如下方法来完成本地创建RSA密钥对。

  • 使用OpenSSL工具
  1. $ openssl genrsa -out privatekey.pem 2048
  2. //创建一个2018位的RSA私钥并保存到privatekey.pem文件
  3. $ openssl rsa -in private.pem -outform PEM -pubout -out publickey.pem
  4. //基于RSA私钥来创建相应的RSA公钥并保存到publickey.pem文件
本文导读目录