通过自定义角色访问数据

您可以在数据加工任务中配置自定义角色来读取源Logstore中的数据以及将数据加工结果写入目标Logstore。本文介绍如何为自定义角色授予Logstore数据访问权限。

前提条件

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

重要
  • 创建RAM角色时,必须选择可信实体类型阿里云服务

  • 请检查角色的信任策略如下,Service内容至少包含"log.aliyuncs.com"

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "log.aliyuncs.com"
            ]
          }
        }
      ],
      "Version": "1"
    }

    image

授予RAM角色源Logstore读权限

使用阿里云账号为RAM角色授权后,该RAM角色将具备读取源Logstore数据的权限。您可以在创建数据加工任务时,使用该RAM角色。具体操作,请参见创建数据加工任务

  1. 使用阿里云账号登录RAM控制台

  2. 创建权限策略。

    该权限策略用于读取源Logstore中的数据。

    1. 在左侧导航栏,选择权限管理 > 权限策略

    2. 权限策略页面,单击创建权限策略

    3. 创建权限策略页面中,配置如下信息,然后单击确定

      配置项

      说明

      配置模式

      选择脚本编辑

      策略内容

      将配置框中的原有脚本替换为如下内容。

      • 精确授权。

        例如:源Project名称为log-project-prod,源Logstore名称为access_log。在实际场景中,请根据实际情况替换。

        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:ListShards",
                "log:GetCursorOrData",
                "log:GetConsumerGroupCheckPoint",
                "log:UpdateConsumerGroup",
                "log:ConsumerGroupHeartBeat",
                "log:ConsumerGroupUpdateCheckPoint",
                "log:ListConsumerGroup",
                "log:CreateConsumerGroup"
              ],
              "Resource": [
                "acs:log:*:*:project/log-project-prod/logstore/access_log",
                "acs:log:*:*:project/log-project-prod/logstore/access_log/*"
              ],
              "Effect": "Allow"
            }
          ]
        }
      • 模糊匹配授权。

        例如:源Project名称为log-project-dev-a、log-project-dev-b、log-project-dev-c等,源Logstore名称为app_a_log、app_b_log、app_c_log等,则使用模糊匹配授权。在实际场景中,请根据实际情况替换。

        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:ListShards",
                "log:GetCursorOrData",
                "log:GetConsumerGroupCheckPoint",
                "log:UpdateConsumerGroup",
                "log:ConsumerGroupHeartBeat",
                "log:ConsumerGroupUpdateCheckPoint",
                "log:ListConsumerGroup",
                "log:CreateConsumerGroup"
              ],
              "Resource": [
                "acs:log:*:*:project/log-project-dev-*/logstore/app_*_log",
            "acs:log:*:*:project/log-project-dev-*/logstore/app_*_log/*"
              ],
              "Effect": "Allow"
            }
          ]
        }

        更多授权场景,请参见RAM自定义授权场景

      策略名称

      配置策略名称,本文以log-etl-source-reader-1-policy为例。

  3. 授予RAM角色读取源Logstore的权限。

    1. 在左侧导航栏中,选择身份管理 > 角色

    2. 角色管理页面,找到目标RAM角色,单击添加权限

    3. 选择自定义策略,然后选中步骤2中创建的权限策略(本文以log-etl-source-reader-1-policy为例。),单击确定

      设置权限

    4. 确认授权结果,单击完成

  4. 获取RAM角色标识(ARN)。

    在该RAM角色的基本信息中查看,例如acs:ram::13234:role/logsource。

授予RAM角色目标Logstore写权限(同账号)

源Logstore和目标Logstore属于同一个阿里云账号时,您使用阿里云账号为RAM角色授权后,该RAM角色将具备写入加工结果到目标Logstore的权限。您可以在创建数据加工任务时,使用该RAM角色。具体操作,请参见创建数据加工任务

  1. 使用阿里云账号登录RAM控制台

  2. 创建权限策略。

    1. 在左侧导航栏,选择权限管理 > 权限策略

    2. 权限策略页面,单击创建权限策略

    3. 创建权限策略页面中,配置如下信息,然后单击确定

      配置项

      说明

      配置模式

      选择脚本配置

      策略内容

      将配置框中的原有脚本替换为如下内容。

      • 精确授权。

        例如:目标Project名称为log-project-prod,目标Logstore名称为access_log_output。在实际场景中,请根据实际情况替换。

        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:Post*",
                "log:BatchPost*"
              ],
               "Resource": "acs:log:*:*:project/log-project-prod/logstore/access_log_output",
              "Effect": "Allow"
            }
          ]
        }
      • 模糊匹配授权。

        例如:目标Project名称为log-project-dev-a、log-project-dev-b、log-project-dev-c等,目标Logstore名称为app_a_log_output、app_b_log_output、app_c_log_output等,则使用模糊匹配授权。在实际场景中,请根据实际情况替换。

        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:Post*",
                "log:BatchPost*"
              ],
               "Resource": "acs:log:*:*:project/log-project-dev-*/logstore/app_*_log_output",
              "Effect": "Allow"
            }
          ]
        }

        更多授权场景,请参见RAM自定义授权场景

      策略名称

      配置策略名称,本文以log-etl-target-writer-1-policy为例。

  3. 授予RAM角色写入数据到目标Logstore的权限。

    1. 在左侧导航栏中,选择身份管理 > 角色

    2. RAM角色管理页面,找到目标RAM角色,单击添加权限

    3. 选择自定义权限策略,并选中步骤2中创建的权限策略(本文以log-etl-target-writer-1-policy为例。),单击确定

      写入权限

    4. 确认授权结果,单击完成

  4. 获取RAM角色标识(ARN)。

    在该RAM角色的基本信息中查看,例如acs:ram::13234:role/logtarget。

授予RAM角色目标Logstore写权限(跨账号)

如果源Logstore和目标Logstore不属于同一个阿里云账号时,请参见本步骤完成RAM授权。例如将账号A下的源Logstore中的数据加工后保存至账号B下的目标Logstore中,您可以按照以下步骤进行授权。

重要

在执行如下步骤前,账号B已完成授予RAM角色目标Logstore访问权限(同账号)章节中的操作。具体操作,请参见授予RAM角色目标Logstore写权限(同账号)

  1. 使用账号B登录RAM 控制台

  2. 在左侧导航栏中,选择身份管理 > 角色

  3. 在RAM角色列表中,单击目标RAM角色。

  4. 信任策略管理页签中,单击修改信任策略

  5. 修改信任策略。

    Service配置项中添加源Logstore所属的阿里云账号A的ID。其中,请根据实际情况替换源Logstore所属的阿里云账号A的ID。您可以在账号中心查看阿里云账号ID。该策略表示账号A有权限通过日志服务获取临时Token来操作账号B的资源。

    {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "源Logstore所属的阿里云账号A的ID@log.aliyuncs.com"
                    ]
                }
            }
        ],
        "Version": "1"
    }
  6. 获取RAM角色标识(ARN)。

    在该角色的基本信息中查看,例如acs:ram::13234:role/logtarget。

后续步骤

在数据加工任务中配置RAM角色标识。更多信息,请参见创建数据加工任务

RAM角色标识