全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
业务实时监控服务 ARMS

创建 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

相关文档

本文导读目录