阿里云账号可以通过创建并授权用户角色的方式赋予其他云账号一定的资源权限,其他云账号扮演该角色,并为其名下的RAM用户授予AssumeRole权限之后,其他云账号或其子账号可以通过访问STS接口获取临时AK/Token,调用日志服务API接口。

背景信息

出于业务隔离或项目外包等需要,云账号A希望将部分日志服务业务授权给云账号B,由云账号B操作维护这部分业务。基本需求如下:
  • 云账号B拥有向企业A的日志服务中写入数据和使用消费组的权限。
  • 云账号B的指定RAM用户也拥有日志服务的写入和消费组权限。
  • 云账号B可获取STS临时凭证,访问日志服务API接口。

操作步骤

  1. 云账号A创建RAM角色,并指定云账号B扮演该角色。
  2. 云账号A为该RAM角色赋予日志服务的指定权限。
  3. 云账号B创建RAM用户B1,并为其赋予AliyunSTSAssumeRoleAccess(调用 STS AssumeRole 接口)的系统策略。
  4. RAM账号B1调用STS AssumeRole接口访问日志服务API接口,操作日志服务资源。

步骤1 云账号A为云账号B创建RAM角色

云账号A创建RAM角色,并指定云账号B扮演该角色。

可以通过RAM控制台或RAM的API CreateRole创建RAM角色,此处以控制台创建为例。

  1. 云账号A登录RAM控制台
  2. 在左侧导航栏,单击RAM角色管理
  3. 单击新建RAM角色,选择可信实体类型为阿里云账号,单击下一步
  4. 输入角色名称备注
  5. 选择云账号其他云账号
  6. 填写云账号B的账号ID,单击完成
    说明 将鼠标悬停在控制台右上角头像的位置,单击安全设置,即可查询云账号的ID。
以上步骤中创建的RAM角色详情如下。
{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "RAM": [
          "acs:ram::<云账号 B 的账号 ID>:root"
        ]
      }
    }
  ],
  "Version": "1"
}

步骤2 云账号A为RAM角色授权

云账号A为步骤1创建的RAM角色赋予日志服务的指定权限。

  1. 在左侧导航栏的权限管理菜单下,单击权限策略管理
  2. 单击新建权限策略
  3. 填写策略名称备注
  4. 配置模式选择脚本配置
  5. 输入权限策略,并单击确定
    此处配置的权限策略为云账号A授予云账号B的权限内容。
    如果仅需要写数据,具体权限如下:
    {
      "Version": "1",
      "Statement": [
        {
          "Action": "log:PostLogStoreLogs",
          "Resource": "*",
          "Effect": "Allow"
        }
      ]
    }
    如果需要通过协同消费库拉取数据,具体权限如下:
    {
      "Version": "1",
      "Statement": [
        {
          "Action": [
             "log:GetCursorOrData",
             "log:CreateConsumerGroup",
             "log:ListConsumerGroup",
             "log:ConsumerGroupUpdateCheckPoint",
             "log:ConsumerGroupHeartBeat",
             "log:GetConsumerGroupCheckPoint",
             "log:UpdateConsumerGroup"
          ],
          "Resource": "*",
          "Effect": "Allow"
        }
      ]
    }
    以上两类资源都是授权指定用户的所有Project和Logstore,如果您需要授权指定Project和Logstore,请参考如下内容:
    • 授权指定Project:acs:log::{projectOwnerAliUid}:project/
    • 授权指定Logstore:acs:log::{projectOwnerAliUid}:project/{projectName}/logstore/{logstoreName}/

    完整的资源说明请参见日志服务 RAM 资源

  6. 在左侧导航栏,单击RAM角色管理
  7. RAM角色名称列表下,找到目标RAM角色。
  8. 单击添加权限,被授权主体会自动填入。
  9. 在左侧权限策略名称列表下,选择上面创建的需要授予RAM角色的权限策略,单击确定
  10. 单击完成

步骤3 云账号B创建RAM用户B1并授权

云账号B创建RAM用户B1,并为其授予AliyunSTSAssumeRoleAccess(调用STS AssumeRole接口)的系统策略。

  1. 云账号B登录RAM控制台
  2. 在左侧导航栏的人员管理菜单下,单击用户
  3. 单击新建用户
    说明 单击添加用户,可一次性创建多个RAM用户。
  4. 设置RAM用户基本信息,勾选控制台密码登录编程访问,并单击确定
    说明 通过手机验证码验证权限。
  5. 在左侧导航栏的人员管理菜单下,单击用户
  6. 用户登录名称/显示名称列表下,找到目标RAM用户。
  7. 单击添加权限,被授权主体会自动填入。
  8. 在左侧权限策略名称列表下,选择需要授予RAM用户的权限策略AliyunSTSAssumeRoleAccess并单击确定
  9. 单击完成

步骤4 RAM账号B1获取STS临时凭证访问日志服务

  1. 调用STSAssumeRole接口获取临时AK/Token。
    您可以选择以下方式调用该接口:
  2. 调用日志服务接口。
    关于日志服务SDK请参见概述

示例代码

单击下载示例代码,该示例代码基于Java SDK,以云账号B通过STS向用户A的Project写入数据为例。