MaxCompute投递任务(新版)运行时,需要将读取到的Logstore中数据投递到MaxCompute的表中,您可以使用自定义角色完成该操作。本文介绍如何对自定义角色进行授权。

前提条件

  • 已创建RAM角色(例如MaxComputeShipRole)。具体操作,请参见创建RAM角色
  • 如果您使用的是RAM用户,请确保该用户具备操作RAM角色授权的权限。

同账号投递

授予RAM角色写MaxCompute的权限后,MaxCompute投递任务可以使用该角色将Logstore中的数据写入到目标MaxCompute的表中。此处通过添加RAM角色为工作空间成员的方式完成授权。

您可以通过可视化界面或命令行进行RAM角色授权。

通过可视化界面完成授权

  1. 修改RAM角色信任策略。
    1. 登录RAM控制台
    2. 在左侧导航栏中,选择身份管理 > 角色
    3. 在RAM角色列表中,单击目标RAM角色。
    4. 信任策略管理页签下,单击修改信任策略
    5. 修改信任策略面板中,将原有的信任策略替换为如下内容,然后单击确定
      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "log.aliyuncs.com",
                "dataworks.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }
  2. 添加RAM角色为工作空间成员。
    1. 登录MaxCompute控制台
    2. 在页面左上角,选择地域。
    3. 项目管理页签中,单击目标项目对应的成员管理
    4. 成员管理页面,单击添加成员
      成员管理
    5. 添加成员对话框中,选中当前登录账号和目标RAM角色,根据页面提示完成添加。
      此处需在批量设置角色中选中开发。更多信息,请参见添加工作空间成员并设置角色
  3. 授予RAM角色操作MaxCompute表的权限。
    1. 在左侧导航栏中,单击MaxCompute高级配置
    2. 设置MaxCompute项目选择为生产环境下的目标项目,然后单击自定义用户角色
    3. 在角色列表中,单击role_project_admin角色对应的成员管理
      成员管理
    4. 成员管理对话框中,选中当前登录账号和目标RAM角色账号,根据页面提示完成添加。
    5. 单击role_project_admin角色对应的权限管理
    6. 角色授权对话框的页签下,单击添加表,然后选择目标MaxCompute表,选中DescribeAlterUpdate
      重要 上述授权只针对指定的MaxCompute表。如果您希望目标角色可以操作当前MaxCompute空间项目下所有的表,则您可以为当前登录账号和目标RAM角色账号添加admin角色权限。即在角色列表中,单击admin角色对应的成员管理,然后在成员管理对话框中,选中当前登录账号和目标RAM角色账号,根据页面提示完成添加。

通过命令行完成授权

  1. 登录MaxCompute控制台
  2. 在页面左上角,选择地域。
  3. 项目管理页签中,单击目标项目对应的数据开发
  4. 新建业务流程。
    1. 数据开发页面,选择新建 > 新建业务流程
    2. 新建业务流程对话框中,设置业务名称,然后单击新建
  5. 新建节点。
    1. 数据开发页面,选择新建 > 新建节点 > MaxCompute > ODPS SQL
    2. 新建节点对话框中,设置节点名称路径,然后单击提交
      其中,路径需配置为您在步骤4中所创建的业务流程。
  6. 在已创建的节点编辑框中,执行如下命令,完成授权。
    MaxCompute授权
    命令说明
    USE project-name;指定MaxCompute项目,需与您在创建MaxCompute投递任务(新版)时设置的MaxCompute项目保持一致。更多信息,请参见创建MaxCompute投递任务(新版)
    ADD USER RAM$****.aliyunid.com:`role/maxcomputeshiprole`;在MaxCompute项目空间中添加用户。
    • ****.aliyunid.com为MaxCompute项目所属的阿里云账号。您可以通过list users;命令查看对应的阿里云账号。
    • maxcomputeshiprole为自定义RAM角色的名称,必须为小写格式。
    GRANT DESCRIBE, ALTER, UPDATE ON TABLE table-name to user RAM$****.aliyunid.com:`role/maxcomputeshiprole`;授予用户查看、修改、更新目标MaxCompute表的权限。
    说明 该授权只针对指定的MaxCompute表,如果您希望目标用户可以操作当前MaxCompute项目下的所有表,请执行GRANT admin to user RAM$****.aliyunid.com:`role/maxcomputeshiprole`;命令完成授权。
    SHOW GRANTS FOR `RAM$****.aliyunid.com:role/maxcomputeshiprole`;确认授权是否成功。
    如果返回如下类似信息表示授权成功。
    Authorization Type: ACL
    [user/RAM$****.aliyunid.com:role/maxcomputeshiprole]
    A       projects/default_project_****/tables/****: Describe | Alter | Update
    在授权过程中,可能发生如下报错。
    • 在操作过程中出现FAILED: mismatched input错误,表示当前的RAM用户没有执行ADD USER等语句的权限。更多信息,请参见出现FAILED: mismatched input错误时,如何解决
    • 在操作过程中出现FAILED: ODPS-0130013:Authorization exception - Authorization Failed [4003], You have NO privilege to do the PROJECT SECURITY OPERATION for {acs:odps:*:projects/xxxxxx/authorization/users}. Context ID:1111-11111-1111-1111-11111.错误,表示当前的操作用户无MaxCompute账户操作或者授权权限。更多信息,请参见出现操作用户无权限错误时,如何解决
完成上述操作后,您可以授权MaxCompute投递任务(新版)使用自定义RAM角色将数据投递到MaxCompute表中。即您在创建MaxCompute投递任务(新版)时,选择写MaxCompute授权自定义角色,然后输入自定义RAM角色的ARN(例如acs:ram::10**12:role/maxcomputeshiprole)。如何获取ARN,请参见查看RAM角色MaxCompute授权

跨账号投递

如果您的日志服务和MaxCompute不属于同一个阿里云账号,例如日志服务属于账号A,MaxCompute属于账号B,则需授予账号B下的RAM角色b写MaxCompute的权限。授权完成后,MaxCompute投递任务可以使用该RAM角色将Logstore中的数据写入到目标MaxCompute表中。

  1. 修改账号B下RAM角色b的信任策略。
    1. 使用账号B登录RAM控制台
    2. 在左侧导航栏中,选择身份管理 > 角色
    3. 在RAM角色列表中,单击RAM角色b。
    4. 信任策略管理页签中,单击修改信任策略
    5. 修改信任策略,然后单击确定

      Service配置项中添加阿里云账号A的ID@log.aliyuncs.comdataworks.aliyuncs.com。其中阿里云账号A的ID,需根据实际情况替换,您可以在账号中心查看阿里云账号ID。

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

      {
          "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": [
                          "log.aliyuncs.com",
                          "dataworks.aliyuncs.com",
                          "阿里云账号A的ID@log.aliyuncs.com"
                      ]
                  }
              }
          ],
          "Version": "1"
      }
  2. 添加账号B下的RAM角色b为工作空间成员。
    您可以通过可视化界面或命令行进行RAM角色授权,即使用账号B登录MaxCompute控制台,完成授权操作。具体操作,请参见通过可视化界面完成授权通过命令行完成授权
完成上述操作后,您可以授权MaxCompute投递任务(新版)使用账号B下的自定义RAM角色将数据投递到MaxCompute表中。即您在创建MaxCompute投递任务(新版)时,选择写MaxCompute授权自定义角色,然后输入账号B下的自定义RAM角色的ARN(例如acs:ram::11**13:role/maxcomputeshiprole)。如何获取ARN,请参见查看RAM角色MaxCompute授权