访问外部数据源授权方案

更新时间:
复制 MD 格式

MaxCompute结合了阿里云的访问控制服务(RAM)和令牌服务(STS)实现对外部数据源的安全访问。本文介绍基于访问控制服务(RAM)和令牌服务(STS)的不同功能场景下的授权方式。

OSS/OTSRAM普通角色授权

MaxCompute外部表直接访问OSSOTS(Tablestore)数据,需要表所有者将OSSOTS数据访问权限(RAMRole)集成到OSSOTS外部表中,再根据需要为访问此外部表的用户授予相应权限。

根据业务需求使用如下授权方式,建议使用自定义授权,可以更细粒度的控制权限。

同账号授权

MaxComputeOSS/OTSOwner是同一个账号时,MaxCompute支持一键授权自定义授权

  • 一键授权:登录阿里云账号后,单击此处完成一键授权。一键授权会默认创建AliyunODPSDefaultRole角色,涉及权限较多,适合测试使用。

  • 自定义授权:通过RAM控制台创建一个新的角色,并为其配置合理的权限策略和信任策略,达到细粒度权限控制的效果。具体操作如下。

    1. 创建RAM角色。

      登录RAM控制台,通过RAM控制台中的RAM角色创建角色。例如角色test-admin。更多创建角色操作信息,请参见创建可信实体为阿里云账号的RAM角色

    2. 修改RAM角色策略内容。

      1. 登录RAM控制台

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

      3. 角色页面,单击目标角色名称,进入该角色详情页。

      4. 信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。

        配置如下策略:

        {
         "Statement": [
         {
         "Action": "sts:AssumeRole",
         "Effect": "Allow",
         "Principal": {
         "Service": [
         "odps.aliyuncs.com"
         ]
         }
         }
         ],
         "Version": "1"
        }
      5. 修改完成后,单击确定

    3. 新建权限策略。

      RAM控制台中的权限策略管理页面,新建权限策略,例如AliyunODPSRolePolicy。

      策略内容如下,也可以自定义其他权限。更多授权操作信息,请参见创建自定义权限策略

      OSS相关权限策略

      {
      "Version": "1",
      "Statement": [
      {
       "Action": [
              "oss:ListBuckets",
              "oss:GetObject",
              "oss:ListObjects",
              "oss:PutObject",
              "oss:DeleteObject",
              "oss:AbortMultipartUpload",
              "oss:ListParts",
              "oss:GetBucketInfo",
              "oss:PostDataLakeStorageFileOperation",
              "oss:PostDataLakeStorageAdminOperation"
       ],
       "Resource": "*",
       "Effect": "Allow"
      }
      ]
      }

      OTS相关权限策略

      {
      "Version": "1",
      "Statement": [
      {
       "Action": [
       "ots:ListTable",
       "ots:DescribeTable",
       "ots:GetRow",
       "ots:PutRow",
       "ots:UpdateRow",
       "ots:DeleteRow",
       "ots:GetRange",
       "ots:BatchGetRow",
       "ots:BatchWriteRow",
       "ots:ComputeSplitPointsBySize"
       ],
       "Resource": "*",
       "Effect": "Allow"
      }
      ]
      }
    4. 将新建的权限策略授权给新建的RAM角色。

      1. 登录RAM控制台

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

      3. 角色页面,单击目标角色名称,进入该角色详情页。

      4. 权限管理页签,单击新增授权。在弹出的新增授权面板中,选择要授予该角色的权限策略,单击确认新增授权

        更多操作信息,请参见管理RAM角色的权限

跨账号授权

MaxComputeOSS/OTSOwner不是同一个账号时,MaxCompute支持自定义授权

OSS/OTSOwner通过RAM控制台创建一个新的角色,并为其配置合理的权限策略和信任策略。具体操作如下。

  1. 创建RAM角色。

    登录RAM控制台,通过RAM控制台中的RAM角色创建角色。例如角色test-admin。更多创建角色操作信息,请参见创建可信实体为阿里云账号的RAM角色

  2. 修改RAM角色策略内容。

    1. 登录RAM控制台

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

    3. 角色页面,单击目标角色名称,进入该角色详情页。

    4. 信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。

      配置如下策略:

      {
      "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "Service": [
       "MaxComputeOwner云账号的UI*@odps.aliyuncs.com"
       ]
       }
      }
      ],
      "Version": "1"
      }
    5. 修改完成后,单击确定

  3. RAM控制台中的权限策略管理页面,新建权限策略,例如AliyunODPSRolePolicy。

    策略内容如下,也可以自定义其他权限。更多授权操作信息,请参见创建自定义权限策略

    OSS相关权限策略

    {
    "Version": "1",
    "Statement": [
    {
     "Action": [
            "oss:ListBuckets",
            "oss:GetObject",
            "oss:ListObjects",
            "oss:PutObject",
            "oss:DeleteObject",
            "oss:AbortMultipartUpload",
            "oss:ListParts",
            "oss:GetBucketInfo",
            "oss:PostDataLakeStorageFileOperation",
            "oss:PostDataLakeStorageAdminOperation"
     ],
     "Resource": "*",
     "Effect": "Allow"
    }
    ]
    }

    OTS相关权限策略

    {
    "Version": "1",
    "Statement": [
    {
     "Action": [
     "ots:ListTable",
     "ots:DescribeTable",
     "ots:GetRow",
     "ots:PutRow",
     "ots:UpdateRow",
     "ots:DeleteRow",
     "ots:GetRange",
     "ots:BatchGetRow",
     "ots:BatchWriteRow",
     "ots:ComputeSplitPointsBySize"
     ],
     "Resource": "*",
     "Effect": "Allow"
    }
    ]
    }
  4. 将新建的权限策略授权给新建的RAM角色。

    1. 登录RAM控制台

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

    3. 角色页面,单击目标角色名称,进入该角色详情页。

    4. 权限管理页签,单击新增授权。在弹出的新增授权面板中,选择要授予该角色的权限策略,单击确认新增授权

      更多操作信息,请参见管理RAM角色的权限

HologresRAM普通角色授权

MaxCompute外部表直接访问Hologres数据,需要表所有者将Hologres数据访问权限(RAMRole)集成到Hologres外部表中,再根据需要为需要访问此外部表的用户授予相应权限。可以根据业务情况自行选择授权方式。

同账号授权

MaxComputeHologres 的Owner是同一个账号时,需按如下方式授权。

  1. 创建RAM角色

    创建RAM角色获取ARN信息,用于创建外部表时填写STS认证信息。创建RAM角色的信任主体类型根据实际需求选择,本示例中信任主体类型为云账号。

    操作步骤如下:

    1. 登录RAM控制台

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

    3. 角色页面,单击创建角色

  2. 修改信任策略配置

    1. 角色页面,单击目标角色名称,进入该角色详情页。

    2. 信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。

    3. 参照如下内容修改信任策略配置

      修改信任策略配置内容与选择的可信实体类型相关。其中<UID>即阿里云账号ID,可在用户信息页面获取。

      可信实体类型为阿里云账号

      {
       "Statement": [
       {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "RAM": [
       "acs:ram::<UID>:root"
       ]
       }
       },
       {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "Service": [
       "<UID>@odps.aliyuncs.com"
       ]
       }
       }
       ],
       "Version": "1"
      }

      可信实体类型为身份提供商

      {
       "Statement": [
       {
       "Action": "sts:AssumeRole",
       "Condition": {
       "StringEquals": {
       "saml:recipient": "https://signin.aliyun.com/saml-role/sso"
       }
       },
       "Effect": "Allow",
       "Principal": {
       "Federated": [
       "acs:ram::<UID>:saml-provider/IDP"
       ]
       }
       },
       {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "Service": [
       "<UID>@odps.aliyuncs.com"
       ]
       }
       }
       ],
       "Version": "1"
      }
  3. 添加RAM角色至Hologres实例并授权

    RAM角色需要有Hologres实例的开发权限,才能在权限范围内使用Hologres。

    由于RAM角色默认没有Hologres管理控制台的查看和操作实例的权限,因此需要阿里云账号完成RAM相关权限授予才能进行后续操作。

    添加RAM角色至Hologres实例步骤如下:

    通过Hologres管理控制台授权

    1. 登录Hologres管理控制台,在左上角选择地域。

    2. 在左侧导航栏选择实例列表

    3. 实例列表页面,单击目标实例名称。

    4. 在实例详情页面,在左侧导航栏选择账号管理

    5. 用户管理页面,单击新增用户

    6. 在弹出的新增用户页面,配置相关信息,单击确认

      • 角色选择步骤一创建的RAM角色。

      • 成员角色选择普通用户

    7. 用户管理页面,在左侧导航栏选择DB授权

    8. DB授权页面,单击新增数据库

    9. 在弹出的新增数据库页面,配置相关信息,单击确认

      权限策略选择SPM。

    10. DB授权页面,单击目标数据库对应的操作列的用户授权

    11. 单击右上角新增授权。在弹出的新增授权对话框中,配置用户用户组

      • 用户选择要配置的RAM用户。

      • 用户组选择Developer。

    通过RAM访问控制台授权

    将新建的权限策略AliyunODPSRolePolicy授权给新建的RAM角色。

    1. 登录RAM控制台

    2. 在左侧导航栏选择身份管理 > 用户

    3. 用户页面,单击目标用户登录名称/显示名称,进入用户详情页面。

    4. 在用户详情页面,单击权限管理页签。

    5. 权限管理页签下,选择个人权限,单击新增授权

    6. 在弹出的新增授权面板中,选择要授予该用户的权限策略,单击确认新增授权

      权限策略选择AliyunRAMReadOnlyAccess

      更多授权操作信息,请参见授予RAM用户权限

    通过SQL方式授权

    授权SQL请参见权限模型介绍

    说明

    Hologres还支持服务关联角色授权方式,详情请参见Hologres的服务关联角色(身份透传)授权

跨账号授权

MaxComputeHologres 的Owner不是同一个账号时,可参考如下方式授权。

  1. 创建RAM角色

    创建RAM角色获取ARN信息,用于创建外部表时填写STS认证信息。创建RAM角色的信任主体类型根据实际需求选择,本示例中信任主体类型为云账号。

    操作步骤如下:

    1. 登录RAM控制台

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

    3. 角色页面,单击创建角色

  2. 修改信任策略配置。

    1. 角色页面,单击目标角色名称,进入该角色详情页。

    2. 信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。

    3. 参照如下内容修改信任策略配置

      修改信任策略配置内容与选择的可信实体类型相关。其中<UID>即阿里云账号ID,可在用户信息页面获取。

      可信实体类型为阿里云账号

      {
       "Statement": [
       {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "RAM": [
       "acs:ram::<MaxComputeOwner云账号>:root"
       ]
       }
       },
       {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "Service": [
       "<MaxComputeOwner云账号>@odps.aliyuncs.com"
       ]
       }
       }
       ],
       "Version": "1"
      }

      可信实体类型为身份提供商

      {
       "Statement": [
       {
       "Action": "sts:AssumeRole",
       "Condition": {
       "StringEquals": {
       "saml:recipient": "https://signin.aliyun.com/saml-role/sso"
       }
       },
       "Effect": "Allow",
       "Principal": {
       "Federated": [
       "acs:ram::<MaxComputeOwner云账号>:saml-provider/IDP"
       ]
       }
       },
       {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "Service": [
       "<MaxComputeOwner云账号>@odps.aliyuncs.com"
       ]
       }
       }
       ],
       "Version": "1"
      }
  3. 添加RAM角色至Hologres实例并授权

    RAM角色需要有Hologres实例的开发权限,才能在权限范围内使用Hologres。

    由于RAM角色默认没有Hologres管理控制台的查看和操作实例的权限,因此需要阿里云账号完成RAM相关权限授予才能进行后续操作。

    添加RAM角色至Hologres实例步骤如下:

    通过Hologres管理控制台授权

    1. 登录Hologres管理控制台,在左上角选择地域。

    2. 在左侧导航栏选择实例列表

    3. 实例列表页面,单击目标实例名称。

    4. 在实例详情页面,在左侧导航栏选择账号管理

    5. 用户管理页面,单击新增用户

    6. 在弹出的新增用户页面,配置相关信息,单击确认

      • 角色选择步骤一创建的RAM角色。

      • 成员角色选择普通用户

    7. 用户管理页面,在左侧导航栏选择DB授权

    8. DB授权页面,单击新增数据库

    9. 在弹出的新增数据库页面,配置相关信息,单击确认

      权限策略选择SPM。

    10. DB授权页面,单击目标数据库对应的操作列的用户授权

    11. 单击右上角新增授权。在弹出的新增授权对话框中,配置用户用户组

      • 用户选择要配置的RAM用户。

      • 用户组选择Developer。

    通过RAM访问控制台授权

    将新建的权限策略AliyunODPSRolePolicy授权给新建的RAM角色。

    1. 登录RAM控制台

    2. 在左侧导航栏选择身份管理 > 用户

    3. 用户页面,单击目标用户登录名称/显示名称,进入用户详情页面。

    4. 在用户详情页面,单击权限管理页签。

    5. 权限管理页签下,选择个人权限,单击新增授权

    6. 在弹出的新增授权面板中,选择要授予该用户的权限策略,单击确认新增授权

      权限策略选择AliyunRAMReadOnlyAccess

      更多授权操作信息,请参见授予RAM用户权限

    通过SQL方式授权

    授权SQL请参见权限模型介绍

    说明

    Hologres还支持双签名的认证方式,详情请参见Hologres外部表

DLF+OSSRAM普通角色授权

通过MaxComputeDLFOSS构建湖仓一体时,需要将DLFOSS的数据访问权限(RAMRole)集成到外部数据源中,然后创建外部Schema(External Schema)并使用该权限访问DLFOSS。如需为其他用户授予外部Schema中表的访问权限,请参见外部模式内对联邦外表授权。授权方式如下:

  • 一键授权(推荐):当创建MaxCompute项目的账号和部署DLF、OSS的账号相同时。推荐直接单击授权DLFOSS一键授权。

  • 自定义授权:无论创建MaxCompute项目的账号和部署DLF、OSS的账号是否相同,都可以使用该方式。具体操作如下。

    • MaxCompute项目RAM用户和部署DLF的账号相同时,添加信任策略时需要将service配置成odps.aliyuncs.com

    • MaxCompute项目RAM用户和部署DLF的账号不同时,添加信任策略时需要将service配置成<MaxCompute项目的Owner云账号id>@odps.aliyuncs.com。可以在账号概览中获取MaxComputeOwner云账号id

    1. 登录RAM访问控制台创建可信实体为阿里云账号的RAM角色

    2. 通过RAM控制台修改RAM角色的信任策略。信任策略内容如下:

      创建MaxCompute项目的账号和部署DLF的账号是同一个账号

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

      创建MaxCompute项目的账号和部署DLF的账号不是同一个账号

      {
      "Statement": [
      {
       "Action": "sts:AssumeRole",
       "Effect": "Allow",
       "Principal": {
       "Service": [
       "<MaxCompute项目的Owner云账号id>@odps.aliyuncs.com" 
       ]
       }
      }
      ],
      "Version": "1"
      }
    3. 通过RAM控制台,为新建的RAM角色自定义权限策略。操作详情,请参见创建自定义权限策略。自定义权限内容如下:

      {
      "Version": "1",
      "Statement": [
      {
       "Action": [
       "oss:ListBuckets",
       "oss:GetObject",
       "oss:ListObjects",
       "oss:PutObject",
       "oss:DeleteObject",
       "oss:AbortMultipartUpload",
       "oss:ListParts"
       ],
       "Resource": "*",
       "Effect": "Allow"
      },
      {
       "Action": [
       "dlf:CreateFunction",
      "dlf:BatchGetPartitions",
      "dlf:ListDatabases",
      "dlf:CreateLock",
      "dlf:UpdateFunction",
      "dlf:BatchUpdateTables",
      "dlf:DeleteTableVersion",
      "dlf:UpdatePartitionColumnStatistics",
      "dlf:ListPartitions",
      "dlf:DeletePartitionColumnStatistics",
      "dlf:BatchUpdatePartitions",
      "dlf:GetPartition",
      "dlf:BatchDeleteTableVersions",
      "dlf:ListFunctions",
      "dlf:DeleteTable",
      "dlf:GetTableVersion",
      "dlf:AbortLock",
      "dlf:GetTable",
      "dlf:BatchDeleteTables",
      "dlf:RenameTable",
      "dlf:RefreshLock",
      "dlf:DeletePartition",
      "dlf:UnLock",
      "dlf:GetLock",
      "dlf:GetDatabase",
      "dlf:GetFunction",
      "dlf:BatchCreatePartitions",
      "dlf:ListPartitionNames",
      "dlf:RenamePartition",
      "dlf:CreateTable",
      "dlf:BatchCreateTables",
      "dlf:UpdateTableColumnStatistics",
      "dlf:ListTableNames",
      "dlf:UpdateDatabase",
      "dlf:GetTableColumnStatistics",
      "dlf:ListFunctionNames",
      "dlf:ListPartitionsByFilter",
      "dlf:GetPartitionColumnStatistics",
      "dlf:CreatePartition",
      "dlf:CreateDatabase",
      "dlf:DeleteTableColumnStatistics",
      "dlf:ListTableVersions",
      "dlf:BatchDeletePartitions",
      "dlf:ListCatalogs",
      "dlf:UpdateTable",
      "dlf:ListTables",
      "dlf:DeleteDatabase",
      "dlf:BatchGetTables",
      "dlf:DeleteFunction"
       ],
       "Resource": "*",
       "Effect": "Allow"
      }
      ]
      }
    4. 将自定义的权限策略,授权给新建的RAM角色。操作详情,请参见管理RAM角色的权限

Hologres的服务关联角色(身份透传)授权

MaxCompute通过外部数据源和外部项目访问Hologres数据时,需要通过服务关联角色打通Hologres的数据访问权限。创建服务关联角色的方法如下。创建成功后,为防止越权访问,此模式会在访问时透传用户身份到Hologres鉴权,用户需要加入MaxCompute外部项目并具备外部项目所映射的Hologres数据源的权限。

  1. 登录RAM控制台

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

  3. 角色页面,单击创建角色

  4. 创建角色页面的右上角,单击创建服务关联角色

  5. 创建服务关联角色页面,选择信任的云服务aliyunserviceroleformaxcomputeidentitymgmt,单击创建服务关联角色

    若提示角色已经存在,说明已经授权过,忽略即可。

Paimon_DLF的服务关联角色(身份透传)授权

MaxCompute通过外部数据源和外部项目访问DLF的数据,MaxCompute需要通过服务关联角色打通DLF的数据相关权限,创建服务关联角色需要用户设置,方法如下。创建成功后,使用时为了不越权访问,此模式会在访问时透传用户身份到DLF鉴权,需要用户加入MaxCompute外部项目并具备外部项目映射的DLF数据源的权限。

MaxCompute通过外部数据源和外部项目访问DLF数据时,需要通过服务关联角色打通DLF的数据访问权限。创建服务关联角色的方法如下。创建成功后,为防止越权访问,此模式会在访问时透传用户身份到DLF鉴权,用户需要加入MaxCompute外部项目并具备外部项目所映射的DLF数据源的权限。

  1. 登录RAM控制台

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

  3. 角色页面,单击创建角色

  4. 创建角色页面的右上角,单击创建服务关联角色

  5. 创建服务关联角色页面,选择信任的云服务AliyunServiceRoleForMaxComputeLakehouse,单击创建服务关联角色

    若提示角色已经存在,说明已经授权过,忽略即可。