MaxCompute结合了阿里云的访问控制服务(RAM)和令牌服务(STS)实现对数据的安全访问。本文为介绍控制服务(RAM)和令牌服务(STS)的授权方式。
OSS的STS模式普通角色授权
MaxCompute外部表直接访问OSS的数据,需要事先将OSS的数据相关权限赋予MaxCompute的访问账号,可以通过以下方式授权:
- 一键授权(推荐):当MaxCompute和OSS的Owner是同一个账号时,登录阿里云账号后,单击此处完成一键授权。 说明- 默认创建的AliyunODPSDefaultRole权限较多,仅供参考,需要根据MaxCompute外表或外部数据源可访问的外部数据权限,在RAM控制台中配置合理的权限策略和信任策略。 
- 自定义授权:无论MaxCompute和OSS的Owner是不是同一个账号,都可以使用该方式授权。具体操作如下。 - 当MaxCompute和OSS的Owner是同一个账号时,添加信任策略时需要将service配置成 - odps.aliyuncs.com。
- 当MaxCompute和OSS的Owner不是同一个账号时,添加信任策略时需要将service配置成 - MaxCompute的Owner云账号I*@odps.aliyuncs.com,MaxCompute的Owner云账号id可以在账号概览中获取。
 - 创建RAM角色。 - 登录RAM控制台,通过RAM控制台中的RAM角色创建角色。例如角色oss-admin。更多创建角色操作信息,请参见创建可信实体为阿里云账号的RAM角色。  
- 修改RAM角色策略内容。 - 在RAM控制台中的RAM角色管理页面,单击新建的RAM角色名称后,在信任策略页签修改信任策略。更多修改角色策略内容的操作,请参见修改RAM角色的信任策略。 - 当MaxCompute和OSS的Owner为同一个账号时- { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "odps.aliyuncs.com" ] } } ], "Version": "1" }- 当MaxCompute和OSS的Owner不是同一个账号时- { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "MaxCompute的Owner云账号I*@odps.aliyuncs.com" ] } } ], "Version": "1" }
- 新建权限策略。 - 在RAM控制台中的权限策略管理页面,新建权限策略,例如AliyunODPSRolePolicy。 - 策略内容如下,也可以自定义其他权限。更多授权操作信息,请参见创建自定义权限策略。 - { "Version": "1", "Statement": [ { "Action": [ "oss:ListBuckets", "oss:GetObject", "oss:ListObjects", "oss:PutObject", "oss:DeleteObject", "oss:AbortMultipartUpload", "oss:ListParts" ], "Resource": "*", "Effect": "Allow" } ] }
- 将新建的权限策略授权给新建的RAM角色。 - 进入RAM控制台的页面,单击新创建的角色名称,在角色详情的权限管理页签单击新增授权,选择上一步中新建的权限策略并确认新增授权。更多操作信息,请参见为RAM角色授权。 
 
OTS的STS模式普通角色授权
MaxCompute外部表直接访问OTS的数据,需要事先将OTS的数据相关权限赋予MaxCompute的访问账号,可以通过以下方式授权:
- 一键授权(推荐):当MaxCompute和OTS的Owner是同一个账号时,登录阿里云账号后,单击此处完成一键授权。 
- 自定义授权:当MaxCompute和OTS的Owner不是同一个账号时,自定义角色并授权。 - 创建RAM角色。 - 使用OTS账号登录RAM控制台,通过RAM控制台中的RAM角色创建角色。例如角色oss-adminots。 - 更多创建角色操作信息,请参见创建可信实体为阿里云账号的RAM角色。 
- 修改RAM角色策略内容。 - 在RAM控制台中的RAM角色管理页面,单击新建的RAM角色名称后,在信任策略页签修改信任策略。当MaxCompute和OTS的Owner不是同一个账号时,设置如下所示,支持跨账号实现MaxCompute访问OTS。 - { "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "MaxCompute的Owner云账号的UI*@odps.aliyuncs.com" ] } } ], "Version": "1" }- MaxCompute的Owner云账号ID为访问OTS服务的账号。
- 新建权限策略。 - 在RAM控制台中的权限策略管理页面,新建权限策略,例如AliyunODPSRolePolicy。策略内容如下,您也可以自定义其他权限。 - { "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" } ] }
- 将新建的权限策略AliyunODPSRolePolicy授权给新建的RAM角色。 - 更多授权操作信息,请参见为RAM角色授权。 
 
Hologres的STS模式普通角色授权
MaxCompute外部表直接访问Hologres的数据,需要先将Hologres的数据相关权限赋予MaxCompute的访问账号,以下介绍Hologres的STS模式授权操作。
- 使用Hologres账号登录RAM控制台,通过RAM控制台中的RAM角色创建角色。 - 云账号: - 阿里云账号下的RAM用户可以通过扮演RAM角色来访问云资源,详情请参见创建可信实体为阿里云账号的RAM角色。 
- 身份提供商: - 通过设置SSO实现从企业本地账号系统登录至阿里云控制台,帮您解决企业的统一用户登录认证要求。详情请参见创建可信实体为身份提供商的RAM角色。 
 
- 修改信任策略配置内容。 - 在角色页面,单击已创建完成的RAM角色名称。 
- 单击信任策略页签。 
- 在信任策略页签,单击编辑信任策略。 
- 参照如下内容修改信任策略配置。 - 修改信任策略配置内容与选择的可信实体类型相关。 - 可信实体类型为阿里云账号: - { "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" }说明- <UID>即阿里云账号ID,可在用户信息页面获取。 
 
- 单击确定。 
 
- 添加RAM角色至Hologres实例并授权。 - RAM角色需要有Hologres实例的开发权限,才能在权限范围内使用Hologres。由于RAM角色默认没有Hologres管理控制台的查看和操作实例的权限,因此需要阿里云账号完成RAM相关权限授予才能进行后续操作。添加RAM角色至Hologres实例,您可以通过如下方式进行授权。 - 通过Hologres管理控制台授权。 - 在左侧导航栏单击实例列表,单击需要授权的Hologres实例名称。 
- 在实例详情页面,单击账号管理。 
- 您可按下图操作步骤,在用户管理页面单击新增用户添加RAM角色至Hologres实例。  
- 您可按下图操作步骤,在DB授权页签,为该RAM角色授予实例的开发权限。 说明- 若数据库的权限策略设置为专家模式,则需在用户管理页面将角色类型修改为SuperUser,后续将不再需要进行数据库授权操作。  
 
- 通过SQL方式授权。 - 您可以通过SQL方式进行授权,授权SQL请参见Hologres权限模型。 
- 若是通过RAM用户扮演RAM角色,RAM用户默认没有Hologres管理控制台的权限,需要阿里云账号给RAM用户在访问控制页面授予AliyunRAMReadOnlyAccess权限,否则RAM用户无法在Hologres管理控制台进行任何操作。详情请参见文档授予RAM用户权限。   
 
Hologres还支持双签名的认证方式,详情请参见创建Hologres外部表(双签名模式)。
DLF+OSS的STS模式普通角色授权
通过MaxCompute与DLF和OSS构建湖仓一体时,由于MaxCompute项目的账号未经授权无法访问DLF或OSS,需要执行授权操作。授权方式包含以下两种:
- 一键授权(推荐):当创建MaxCompute项目的账号和部署DLF、OSS的账号相同时。推荐直接单击授权DLF和OSS一键授权。 
- 自定义授权:无论创建MaxCompute项目的账号和部署DLF、OSS的账号是否相同,都可以使用该方式。具体操作如下。 - MaxCompute项目RAM账号和部署DLF的账号相同时,添加信任策略时需要将service配置成 - odps.aliyuncs.com。
- MaxCompute项目RAM账号和部署DLF的账号不同时,添加信任策略时需要将service配置成 - <MaxCompute项目的Owner云账号id>@odps.aliyuncs.com。您可以在账号概览中获取MaxCompute的Owner云账号id。
 - 登录RAM访问控制台创建可信实体为阿里云账号的RAM角色。 
- 通过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" }
- 通过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" } ] }
- 将自定义的权限策略,授权给新建的RAM角色。操作详情,请参见为RAM角色授权。 
 
Hologres的STS模式服务关联角色授权
MaxCompute通过外部数据源和外部项目访问Hologres的数据,需要事先将Hologres的数据相关权限赋予MaxCompute的访问账号。
使用任务执行者身份本质是为MaxCompute服务关联角色授予访问Hologres的权限,并将任务执行者身份传递至Hologres。双方同时将当前任务执行者限制在其拥有的两个产品各自的权限范围内,因此需预先为MaxCompute创建服务关联角色并完成授权。可以通过以下方式授权:
- 登录RAM访问控制台,在左侧导航栏选择 ,单击创建角色。 
- 在创建角色页面,单击右上角创建服务管理角色。 
- 在信任的云服务中选择 - aliyunserviceroleformaxcomputeidentitymgmt,点击创建服务关联角色,若提示角色已经存在,说明已经授权过,忽略即可。
Paimon_DLF的STS模式服务关联角色授权
MaxCompute通过外部数据源和外部项目访问Paimon_DLF的数据,需要事先将DLF的数据相关权限赋予MaxCompute的访问账号。
使用任务执行者身份本质是为MaxCompute服务关联角色授予访问DLF的权限,并将任务执行者身份传递至 DLF。双方同时将当前任务执行者限制在其拥有的两个产品各自的权限范围内,因此需预先为MaxCompute创建服务关联角色并完成授权。可以通过以下方式授权:
- 登录RAM访问控制台,在左侧导航栏选择 ,单击创建角色。 
- 在创建角色页面,单击右上角创建服务管理角色。 
- 在信任的云服务中选择 - AliyunServiceRoleForMaxComputeLakehouse,点击创建服务关联角色,若提示角色已经存在,说明已经授权过,忽略即可。