MaxCompute结合了阿里云的访问控制服务(RAM)和令牌服务(STS)实现对外部数据源的安全访问。本文介绍基于访问控制服务(RAM)和令牌服务(STS)的不同功能场景下的授权方式。
OSS/OTS的RAM普通角色授权
MaxCompute外部表直接访问OSS或OTS(Tablestore)数据,需要表所有者将OSS或OTS数据访问权限(RAMRole)集成到OSS或OTS外部表中,再根据需要为访问此外部表的用户授予相应权限。
根据业务需求使用如下授权方式,建议使用自定义授权,可以更细粒度的控制权限。
同账号授权
当MaxCompute和OSS/OTS的Owner是同一个账号时,MaxCompute支持一键授权和自定义授权。
一键授权:登录阿里云账号后,单击此处完成一键授权。一键授权会默认创建AliyunODPSDefaultRole角色,涉及权限较多,适合测试使用。
自定义授权:通过RAM控制台创建一个新的角色,并为其配置合理的权限策略和信任策略,达到细粒度权限控制的效果。具体操作如下。
创建RAM角色。
登录RAM控制台,通过RAM控制台中的RAM角色创建角色。例如角色
test-admin。更多创建角色操作信息,请参见创建可信实体为阿里云账号的RAM角色。修改RAM角色策略内容。
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击目标角色名称,进入该角色详情页。
在信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。
配置如下策略:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "odps.aliyuncs.com" ] } } ], "Version": "1" }修改完成后,单击确定。
新建权限策略。
在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" } ] }将新建的权限策略授权给新建的RAM角色。
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击目标角色名称,进入该角色详情页。
在权限管理页签,单击新增授权。在弹出的新增授权面板中,选择要授予该角色的权限策略,单击确认新增授权。
更多操作信息,请参见管理RAM角色的权限。
跨账号授权
当MaxCompute和OSS/OTS的Owner不是同一个账号时,MaxCompute支持自定义授权。
OSS/OTS的Owner通过RAM控制台创建一个新的角色,并为其配置合理的权限策略和信任策略。具体操作如下。
创建RAM角色。
登录RAM控制台,通过RAM控制台中的RAM角色创建角色。例如角色
test-admin。更多创建角色操作信息,请参见创建可信实体为阿里云账号的RAM角色。修改RAM角色策略内容。
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击目标角色名称,进入该角色详情页。
在信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。
配置如下策略:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "MaxCompute的Owner云账号的UI*@odps.aliyuncs.com" ] } } ], "Version": "1" }修改完成后,单击确定。
在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" } ] }将新建的权限策略授权给新建的RAM角色。
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击目标角色名称,进入该角色详情页。
在权限管理页签,单击新增授权。在弹出的新增授权面板中,选择要授予该角色的权限策略,单击确认新增授权。
更多操作信息,请参见管理RAM角色的权限。
Hologres的RAM普通角色授权
MaxCompute外部表直接访问Hologres数据,需要表所有者将Hologres数据访问权限(RAMRole)集成到Hologres外部表中,再根据需要为需要访问此外部表的用户授予相应权限。可以根据业务情况自行选择授权方式。
同账号授权
当MaxCompute和Hologres 的Owner是同一个账号时,需按如下方式授权。
创建RAM角色
创建RAM角色获取ARN信息,用于创建外部表时填写STS认证信息。创建RAM角色的信任主体类型根据实际需求选择,本示例中信任主体类型为云账号。
云账号
阿里云账号下的RAM用户可以通过扮演RAM角色来访问云资源,详情请参见创建可信实体为阿里云账号的RAM角色。
身份提供商
通过设置SSO实现从企业本地账号系统登录至阿里云控制台,解决企业的统一用户登录认证要求,详情请参见创建可信实体为身份提供商的RAM角色。
操作步骤如下:
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击创建角色。
修改信任策略配置
在角色页面,单击目标角色名称,进入该角色详情页。
在信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。
参照如下内容修改信任策略配置
修改信任策略配置内容与选择的可信实体类型相关。其中
<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" }
添加RAM角色至Hologres实例并授权
RAM角色需要有Hologres实例的开发权限,才能在权限范围内使用Hologres。
由于RAM角色默认没有Hologres管理控制台的查看和操作实例的权限,因此需要阿里云账号完成RAM相关权限授予才能进行后续操作。
添加RAM角色至Hologres实例步骤如下:
通过Hologres管理控制台授权
登录Hologres管理控制台,在左上角选择地域。
在左侧导航栏选择实例列表。
在实例列表页面,单击目标实例名称。
在实例详情页面,在左侧导航栏选择账号管理。
在用户管理页面,单击新增用户。
在弹出的新增用户页面,配置相关信息,单击确认。
角色选择步骤一创建的RAM角色。
成员角色选择普通用户。
在用户管理页面,在左侧导航栏选择DB授权。
在DB授权页面,单击新增数据库。
在弹出的新增数据库页面,配置相关信息,单击确认。
权限策略选择SPM。
在DB授权页面,单击目标数据库对应的操作列的用户授权。
单击右上角新增授权。在弹出的新增授权对话框中,配置用户和用户组。
用户选择要配置的RAM用户。
用户组选择Developer。
通过RAM访问控制台授权
将新建的权限策略AliyunODPSRolePolicy授权给新建的RAM角色。
通过SQL方式授权
授权SQL请参见权限模型介绍。
说明Hologres还支持服务关联角色授权方式,详情请参见Hologres的服务关联角色(身份透传)授权。
跨账号授权
当MaxCompute和Hologres 的Owner不是同一个账号时,可参考如下方式授权。
创建RAM角色
创建RAM角色获取ARN信息,用于创建外部表时填写STS认证信息。创建RAM角色的信任主体类型根据实际需求选择,本示例中信任主体类型为云账号。
云账号
阿里云账号下的RAM用户可以通过扮演RAM角色来访问云资源,详情请参见创建可信实体为阿里云账号的RAM角色。
身份提供商
通过设置SSO实现从企业本地账号系统登录至阿里云控制台,解决企业的统一用户登录认证要求,详情请参见创建可信实体为身份提供商的RAM角色。
操作步骤如下:
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击创建角色。
修改信任策略配置。
在角色页面,单击目标角色名称,进入该角色详情页。
在信任策略页签,单击编辑信任策略,在编辑信任策略页面选择脚本编辑页签。
参照如下内容修改信任策略配置
修改信任策略配置内容与选择的可信实体类型相关。其中
<UID>即阿里云账号ID,可在用户信息页面获取。可信实体类型为阿里云账号
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<MaxCompute的Owner云账号>:root" ] } }, { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "<MaxCompute的Owner云账号>@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::<MaxCompute的Owner云账号>:saml-provider/IDP" ] } }, { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "<MaxCompute的Owner云账号>@odps.aliyuncs.com" ] } } ], "Version": "1" }
添加RAM角色至Hologres实例并授权
RAM角色需要有Hologres实例的开发权限,才能在权限范围内使用Hologres。
由于RAM角色默认没有Hologres管理控制台的查看和操作实例的权限,因此需要阿里云账号完成RAM相关权限授予才能进行后续操作。
添加RAM角色至Hologres实例步骤如下:
通过Hologres管理控制台授权
登录Hologres管理控制台,在左上角选择地域。
在左侧导航栏选择实例列表。
在实例列表页面,单击目标实例名称。
在实例详情页面,在左侧导航栏选择账号管理。
在用户管理页面,单击新增用户。
在弹出的新增用户页面,配置相关信息,单击确认。
角色选择步骤一创建的RAM角色。
成员角色选择普通用户。
在用户管理页面,在左侧导航栏选择DB授权。
在DB授权页面,单击新增数据库。
在弹出的新增数据库页面,配置相关信息,单击确认。
权限策略选择SPM。
在DB授权页面,单击目标数据库对应的操作列的用户授权。
单击右上角新增授权。在弹出的新增授权对话框中,配置用户和用户组。
用户选择要配置的RAM用户。
用户组选择Developer。
通过RAM访问控制台授权
将新建的权限策略AliyunODPSRolePolicy授权给新建的RAM角色。
通过SQL方式授权
授权SQL请参见权限模型介绍。
说明Hologres还支持双签名的认证方式,详情请参见Hologres外部表。
DLF+OSS的RAM普通角色授权
通过MaxCompute与DLF和OSS构建湖仓一体时,需要将DLF和OSS的数据访问权限(RAMRole)集成到外部数据源中,然后创建外部Schema(External Schema)并使用该权限访问DLF和OSS。如需为其他用户授予外部Schema中表的访问权限,请参见外部模式内对联邦外表授权。授权方式如下:
一键授权(推荐):当创建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的服务关联角色(身份透传)授权
MaxCompute通过外部数据源和外部项目访问Hologres数据时,需要通过服务关联角色打通Hologres的数据访问权限。创建服务关联角色的方法如下。创建成功后,为防止越权访问,此模式会在访问时透传用户身份到Hologres鉴权,用户需要加入MaxCompute外部项目并具备外部项目所映射的Hologres数据源的权限。
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击创建角色。
在创建角色页面的右上角,单击创建服务关联角色。
在创建服务关联角色页面,选择信任的云服务
aliyunserviceroleformaxcomputeidentitymgmt,单击创建服务关联角色。若提示角色已经存在,说明已经授权过,忽略即可。
Paimon_DLF的服务关联角色(身份透传)授权
MaxCompute通过外部数据源和外部项目访问DLF的数据,MaxCompute需要通过服务关联角色打通DLF的数据相关权限,创建服务关联角色需要用户设置,方法如下。创建成功后,使用时为了不越权访问,此模式会在访问时透传用户身份到DLF鉴权,需要用户加入MaxCompute外部项目并具备外部项目映射的DLF数据源的权限。
MaxCompute通过外部数据源和外部项目访问DLF数据时,需要通过服务关联角色打通DLF的数据访问权限。创建服务关联角色的方法如下。创建成功后,为防止越权访问,此模式会在访问时透传用户身份到DLF鉴权,用户需要加入MaxCompute外部项目并具备外部项目所映射的DLF数据源的权限。
登录RAM控制台。
在左侧导航栏选择。
在角色页面,单击创建角色。
在创建角色页面的右上角,单击创建服务关联角色。
在创建服务关联角色页面,选择信任的云服务
AliyunServiceRoleForMaxComputeLakehouse,单击创建服务关联角色。若提示角色已经存在,说明已经授权过,忽略即可。