当企业购买阿里云服务后,应用程序通过访问控制(RAM)可以获取RAM角色的临时安全令牌,从而访问阿里云。

背景信息

企业A购买了ECS实例,并计划在ECS实例中部署企业的应用程序。这些应用程序需要使用访问密钥(AccessKey)访问其它云服务API。

有两种做法:

  • 将访问密钥直接嵌入在代码里。
  • 将访问密钥保存在应用程序的配置文件中。

这样会带来两个问题:

  • 保密性问题:如果访问密钥以明文形式存在于ECS实例中,可能会随着快照、镜像及镜像创建出来的实例泄露。
  • 难运维问题:由于访问密钥存在于实例中,如果要更换访问密钥(例如:周期性轮转或切换用户身份),那么需要对每个实例和镜像进行更新并重新部署,这会增加对实例和镜像管理的复杂性。

解决方案

ECS结合RAM提供的访问控制能力,允许给每一个ECS实例配置一个拥有合适权限的RAM角色身份。应用程序通过获取该RAM角色的临时安全令牌来访问云API。

操作流程

  1. 使用阿里云账号创建一个RAM角色(MyApplicationRole)。
    说明 创建RAM角色时受信实体选择阿里云服务,受信服务选择云服务器,即允许ECS扮演该RAM角色来访问阿里云资源。

    具体操作,请参见创建可信实体为阿里云服务的RAM角色

  2. 为RAM角色授权。

    具体操作,请参见为RAM角色授权

    说明 如果临时安全令牌权限不足时,您可以根据需要为RAM角色添加相应的权限。权限更新后立即生效,无需重新启动ECS实例。
  3. 使用阿里云账号创建一个RAM用户。

    具体操作,请参见创建RAM用户

  4. 为RAM用户授权。
    • 若管理员和操作员是同一人,需要授权RAM用户管理员权限:AdministratorAccess
    • 若管理员与操作员职责分离,需要创建以下自定义策略,将其授权给RAM用户。
      {
         "Statement": [
          {
            "Effect": "Allow",
            "Action": "ram:PassRole",
            "Resource": "acs:ram:*:*:role/MyApplicationRole" //替换MyApplicationRole为自己的RAM角色名称
          }
        ],
        "Version": "1"
      }                
      说明
      • 只有被授权的RAM用户才能为ECS实例配置RAM角色,避免RAM角色权限被滥用。
      • 如果RAM用户没有管理员权限,仅有管理ECS的权限。在创建ECS实例并配置RAM角色时,ECS会强制检查当前RAM用户是否拥有指定RAM角色的ram:PassRole 权限,否则将无法成功创建ECS实例。

    具体操作,请参见为RAM用户授权

  5. 使用步骤3创建的RAM用户,为目标ECS实例配置步骤1创建的RAM角色。
    具体操作,请参见步骤三:为实例授予RAM角色
  6. ECS将通过实例元数据将临时安全令牌传递给ECS实例中的应用程序。
    • 若在Linux系统中,通过实例元数据可以获取临时安全令牌及过期时间等信息。请参见使用实例RAM角色访问其他云产品

      请求示例

      curl http://100.100.100.200/latest/meta-data/ram/security-credentials/MyApplicationRole

      返回示例

      {
          "AccessKeyId": "STS.J8XXXXXXXXXX4",
          "AccessKeySecret": "9PjfXXXXXXXXXBf2XAW",
          "Expiration": "2017-06-09T09:17:19Z",
          "SecurityToken": "CAIXXXXXXXXXXXwmBkleCTkyI+",
          "LastUpdated": "2017-06-09T08:17:19Z",
          "Code": "Success"
      }
    • 若应用程序使用了阿里云SDK,无需在SDK中配置任何访问密钥相关的信息,阿里云SDK将会自动从ECS实例元数据中获取临时安全令牌。
      说明 临时安全令牌过期时间通常为1小时,有效期内应用程序都能正常访问阿里云API,过期之前ECS会自动刷新临时安全令牌。
  7. 应用程序使用临时安全令牌访问阿里云API。
说明 除ECS外,阿里云其它计算类服务(例如:函数计算、MaxCompute)也提供了类似的RAM角色访问能力,以帮助用户解决云上应用的动态身份管理与授权的问题。