全部产品
阿里云办公

创建 RAM 用户角色并授权

更新时间:2018-06-19 14:42:24

本文介绍了如何借助 RAM 用户角色实现跨账号调用 OpenAPI。

背景信息

RAM 用户角色是一种虚拟用户,它没有实际的身份认证密钥,需要被一个受信的实体用户(例如云账号、RAM-User 账号)扮演才能正常使用。扮演成功后,实体用户将获得 RAM 用户角色的临时安全令牌,凭借这个临时安全令牌就能以 RAM 用户角色身份访问被授权的资源。

如果您需要将 ARMS OpenAPI 的调用权限授予各个受信实体用户,允许该实体用户下的 RAM 角色操作 ARMS OpenAPI,那么您需要执行以下步骤。

流程导航

点击以下流程图可跳转至相关步骤的文档。

为角色指定受信云账号
为用户角色授权
为 RAM 用户授权
获取临时安全令牌

操作步骤

A. 创建用户角色并指定受信云账号

  1. RAM 控制台左侧菜单栏中选择角色管理角色管理页面打开。
  2. 在页面右上角单击新建角色创建角色对话框打开。
  3. 在对话框的选择角色类型子页面上,单击用户角色
  4. 填写类型信息子页面上,在受信云账号 ID 文本框中输入受信云账号的 ID,并单击下一步
  5. 配置角色基本信息子页面上,输入角色名称和备注,并单击创建。创建的角色显示在角色管理页面上。

B. 为 RAM 用户角色授权

新建的用户角色没有任何权限,您需要为其授予 ARMS 的访问权限。上个步骤指定的受信云账号将有权限扮演该 RAM 用户角色在 ARMS 中进行操作。

  1. RAM 控制台左侧菜单栏中选择角色管理角色管理页面打开。
  2. 在页面上找到需要授权的角色,单击操作栏中的授权编辑角色授权策略对话框打开。

    Edit Role Authorization Policy

  3. 在对话框中,通过关键词搜索授权策略 AliyunARMSFullAccess,并单击 > 按钮将该授权策略移至右侧的已选授权策略名称列表,然后单击确定

C. 为受信云账号的 RAM 用户授权

RAM 用户角色需要被一个受信的实体用户扮演才能正常使用,但是受信实体用户不能以自己的身份扮演 RAM 用户角色,而必须以 RAM 用户的身份和形式扮演。换言之,RAM 用户角色只能通过 RAM 用户身份来扮演和使用。

另外,受信云账号必须为其名下的 RAM 用户授予 AliyunSTSAssumeRoleAccess 权限,使 RAM 用户能够调用 STS 服务 AssumeRole 接口,RAM 用户才能代表受信云账号扮演步骤 A 中创建的 RAM 用户角色。

  1. RAM 控制台左侧菜单栏中选择用户管理用户管理页面打开。
  2. 在页面上找到需要授权的用户,单击操作栏中的授权编辑个人授权策略对话框打开。

    提示:如果没有 RAM 用户,请参考创建 RAM 子账号并授权的说明创建一个。

    Edit User Authorization Policy

  3. 在对话框中,通过关键词搜索授权策略 AliyunSTSAssumeRoleAccess,并单击 > 按钮将该授权策略移至右侧的已选授权策略名称列表,然后单击确定

D. 获取 RAM 用户角色的临时安全令牌

关于获取 STS 安全令牌的详细信息,请参考 RAM STS 文档

  • 在 pom.xml 中添加 Maven 依赖

    1. <dependency>
    2. <groupId>com.aliyun</groupId>
    3. <artifactId>aliyun-java-sdk-sts</artifactId>
    4. <version>3.0.0</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.aliyun</groupId>
    8. <artifactId>aliyun-java-sdk-core</artifactId>
    9. <version>3.5.0</version>
    10. </dependency>
  • 获取 STS Token 的代码(示例)

    1. String endpoint = "sts.aliyuncs.com";
    2. String regionId = "cn-hangzhou";
    3. String accessKeyId = "RAM账号的AK";
    4. String accessKeySecret = "RAM账号的SK";
    5. String roleArn = "acs:ram::创建RAM角色的主账号ID:role/角色名称";
    6. String roleSessionName = "session-name";
    7. try {
    8. DefaultProfile.addEndpoint(regionId,regionId, "Sts", endpoint);
    9. IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
    10. DefaultAcsClient client = new DefaultAcsClient(profile);
    11. final AssumeRoleRequest request = new AssumeRoleRequest();
    12. request.setMethod(MethodType.POST);
    13. request.setRoleArn(roleArn);
    14. request.setRoleSessionName(roleSessionName);
    15. request.setPolicy(null); //可选,此处可以填写为NULL
    16. final AssumeRoleResponse response = client.getAcsResponse(request);
    17. System.out.println("Expiration: " + response.getCredentials().getExpiration());
    18. System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
    19. System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
    20. System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
    21. } catch (Exception e) {
    22. }

    提示:

    • 关于 STS 各地域的 Endpoint,请参考服务地址
    • 获取 roleArn 的方法:以创建 RAM 角色的主账号登录 RAM 控制台,并在左侧菜单栏中选择角色管理。然后在角色管理页面上单击角色名称或操作栏中的管理,即可在角色详情页面的基本信息区域查看该角色 ARN。ARN

相关文档