日志服务Scheduled SQL作业运行时,将在源Logstore中执行SQL分析操作,并将分析结果保存到目标存储中。您可以授予日志服务使用自定义角色来完成以上操作。Scheduled SQL作业支持Logstore和MetricStore。本文以Logstore为例,进行说明。

前提条件

已创建RAM角色。具体操作,请参见创建RAM角色

步骤一:授予RAM角色分析源Logstore日志的权限

  1. 使用阿里云账号登录RAM控制台
  2. 创建具备分析源Logstore日志权限的策略。
    1. 在左侧导航栏,选择权限管理 > 权限策略管理
    2. 单击创建权限策略
    3. 新建自定义权限策略页面中,配置如下参数,并单击确定
      参数 说明
      策略名称 配置策略名称。例如log-scheduled-sql-policy
      配置模式 选择脚本配置
      策略内容 将配置框中的原有脚本替换为如下内容。
      • 精确授权。
        例如源Project名称为log-project-prod,源Logstore名称为website_log。在实际场景中,请根据实际情况替换Project名称和Logstore名称。
        注意 权限策略中的Logstore包括了Logstore和MetricStore。当您的操作对象为MetricStore时,如下策略同样适用。
        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:GetProjectQuery",
                "log:PostProjectQuery",
                "log:PutProjectQuery",
                "log:DeleteProjectQuery",
              ],
              "Resource": [
                "acs:log:*:*:project/log-project-prod/logstore/website_log",
                "acs:log:*:*:project/log-project-prod/logstore/website_log/*"
              ],
              "Effect": "Allow"
            }
          ]
        }
      • 模糊匹配授权。
        例如源Project名称为log-project-dev-a、log-project-dev-b、log-project-dev-c等,源Logstore名称为website_a_log、website_b_log、website_c_log等,则您可以使用模糊匹配授权。在实际场景中,请根据实际情况替换Project名称和Logstore名称。
        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:GetProjectQuery",
                "log:PostProjectQuery",
                "log:PutProjectQuery",
                "log:DeleteProjectQuery",
              ],
              "Resource": [
                "acs:log:*:*:project/log-project-dev-*/logstore/website_*_log",
                "acs:log:*:*:project/log-project-dev-*/logstore/website_*_log/*"
              ],
              "Effect": "Allow"
            }
          ]
        }
  3. 为RAM角色授权。
    1. 在左侧导航栏中,选择身份管理 > 角色
    2. 单击目标RAM角色对应的添加权限
    3. 选择自定义策略,并选中步骤2中创建的权限策略(例如log-scheduled-sql-policy),单击确定
    4. 确认授权结果,单击完成
  4. 获取RAM角色标识(ARN)。
    在该角色的基本信息中查看,例如acs:ram::1234:role/logrole。

步骤二:授予RAM角色访问目标Logstore的权限

  1. 使用阿里云账号登录RAM控制台
  2. 创建具备访问目标Logstore权限的策略。
    1. 在左侧导航栏,选择权限管理 > 权限策略管理
    2. 单击创建权限策略
    3. 新建自定义权限策略页面中,配置如下参数,并单击确定
      参数 说明
      策略名称 配置策略名称。例如log-sink-write-policy
      配置模式 选择脚本配置
      策略内容 将配置框中的原有脚本替换为如下内容。
      • 精确授权。
        例如目标Project名称为log-project-prod,目标Logstore名称为website_log_output。在实际场景中,请根据实际情况替换Project名称和Logstore名称。
        注意 权限策略中的Logstore包括了Logstore和MetricStore。当您的操作对象为MetricStore时,如下策略同样适用。
        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:Post*",
                "log:BatchPost*"
              ],
               "Resource": "acs:log:*:*:project/log-project-prod/logstore/website_log_output",
              "Effect": "Allow"
            }
          ]
        }
      • 模糊匹配授权。
        例如目标Project名称为log-project-dev-a、log-project-dev-b、log-project-dev-c等,目标Logstore名称为website_a_log_output、website_b_log_output、website_c_log_output等,则您可以使用模糊匹配授权。在实际场景中,请根据实际情况替换Project名称和Logstore名称。
        {
          "Version": "1",
          "Statement": [
            {
              "Action": [
                "log:Post*",
                "log:BatchPost*"
              ],
               "Resource": "acs:log:*:*:project/log-project-dev-*/logstore/website_*_log_output",
              "Effect": "Allow"
            }
          ]
        }
  3. 为RAM角色授权。
    1. 在左侧导航栏中,选择身份管理 > 角色
    2. 单击目标RAM角色对应的添加权限
    3. 选择自定义策略,并选中步骤2中创建的权限策略(例如log-sink-write-policy),单击确定
    4. 确认授权结果,单击完成
  4. 获取RAM角色标识(ARN)。
    在该角色的基本信息中查看,例如acs:ram::1234:role/logrole。

授予RAM角色跨账号访问Logstore的权限

如果源Logstore和目标Logstore不属于同一个阿里云账号,则RAM角色需完成跨账号授权。例如您创建了一个SQL作业,SQL作业运行时将在账号A的源Logstore中执行SQL分析操作,并将分析结果保存到账号B的目标Logstore中。您可以按照以下步骤进行授权。

在进行跨账号授权前,账号A和账号B需已完成如下配置:
  1. 使用账号B登录RAM控制台
  2. 在左侧导航栏中,选择身份管理 > 角色
  3. 在RAM角色列表中,单击目标Logstore所属的RAM角色。
  4. 信任策略管理页签中,单击修改信任策略
  5. 修改信任策略。

    Service配置项中添加源Logstore所属账号A的账号ID,并根据实际情况替换该值。您可以在账号中心查看阿里云账号ID。

    该策略表示账号A有权限通过日志服务获取临时Token来操作账号B的资源。

    {
        "Statement": [
            {
                "Action": "sts:AssumeRole",
                "Effect": "Allow",
                "Principal": {
                    "Service": [
                        "log.aliyuncs.com",
                        "源Logstore所属账号A的账号ID@log.aliyuncs.com"
                    ]
                }
            }
        ],
        "Version": "1"
    }
  6. 获取RAM角色标识(ARN)。
    在该角色的基本信息中查看,例如acs:ram::13234:role/logrole。