借助 STS 实现跨账号访问日志资源资源

您创建的 project、logstore、config、machinegroup,都是您自己拥有的资源。默认情况下,您对自己的资源拥有完整的操作权限,可以使用本文档中列举的所有 API 对资源进行操作。

如果需要授权其它云账号访问各类资源,需要通过 STS 获取临时 ak/token 调用具体操作。在阅读以下说明之前,请先阅读 简介

假设用户 A 在日志服务创建了 project 和 logstore 等各类资源,用户 B 希望调用 API 接口进行访问,需要按照如下步骤进行操作。

用户 A 操作

创建角色

用户 A 通过 访问控制服务控制台 或者 API 创建角色信任用户 B 云账号,创建的角色详情如下:

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "RAM": [
          "acs:ram::<云账号 B 的账号 ID>:root"
        ]
      }
    }
  ],
  "Version": "1"
}
角色授权

角色创建完成后,用户 A 需要授权角色特定操作权限。

如果仅需要写数据,具体权限描述如下:

```
{
  "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"
    }
  ]
}
```

资源(Resource)设置说明:

  • 以上两类资源都是授权指定用户的所有 project 和 logstore
  • 如果授权指定 project:acs:log::{projectOwnerAliUid}:project/
  • 如果授权指定 logstore:acs:log::{projectOwnerAliUid}:project/{projectName}/logstore/{logstoreName}/

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

用户 B 操作

创建子账号并授权

登录访问控制服务控制台或者使用 API/SDK 创建子账号并且授予 AssumeRole 权限。

调用 STS 接口获取临时 ak/token

STS SDK 使用说明

调用日志服务接口

日志服务 SDK 使用说明

示例代码

样例代码以用户 B 通过 STS 向用户 A 的 project 写入数据为例(基于 JavaSDK)。

代码链接