EMR Serverless Spark工作空间中的任务在调用其他阿里云服务(如OSS、DLF)时,将通过执行角色进行权限验证。在创建工作空间时,您既可以使用默认执行角色,也可以使用自定义的角色。
使用场景
在任务执行过程中,执行角色会根据具体场景调用不同的资源或服务,并以指定的身份进行鉴权和操作审计。以下是主要使用场景:
调用OSS文件
在任务执行时,执行角色负责访问和操作存储在阿里云对象存储服务(OSS)中的文件。
读写DLF元数据
如果开启了数据湖元数据服务(DLF)权限控制,执行角色将根据不同的任务类型扮演不同的身份:
数据开发:扮演提交任务的阿里云账号或RAM用户(子账号)身份。
Livy Gateway:扮演Token创建者的身份。
读写MaxCompute数据
在读写MaxCompute数据时,执行角色将扮演提交任务的阿里云账号或RAM用户(子账号)身份进行鉴权及操作审计。
注意事项
工作空间创建后,执行角色不可更改。
使用默认执行角色
在创建工作空间时,如果您未对执行角色配置项进行修改,系统将自动使用默认执行角色AliyunEMRSparkJobRunDefaultRole。
默认执行角色说明如下:
角色名称:AliyunEMRSparkJobRunDefaultRole。
关联策略:该角色包含系统权限策略AliyunEMRSparkJobRunDefaultRolePolicy,授予了OSS(对象存储服务)、DLF(数据湖元数据服务)和MaxCompute服务的访问权限。
维护方式:该策略由阿里云创建和维护,会根据服务需求变化自动更新。
请谨慎编辑和删除默认执行角色AliyunEMRSparkJobRunDefaultRole,否则会造成工作空间资源创建失败或者任务执行失败。
使用自定义执行角色
如果您希望自主控制执行角色的权限点,可以在创建工作空间时修改执行角色。通过以下步骤配置自定义执行角色,以实现免密访问同一账号下的其他资源(例如,OSS和DLF)。
以下权限策略仅用于为您展示如何为自定义角色配置权限。当选择使用自定义执行角色,请注意其权限策略是静态的,不会随阿里云服务的需求变化而自动更新。为了确保任务能够正常运行,建议定期检查并更新权限策略。具体可以参考默认执行角色AliyunEMRSparkJobRunDefaultRole
的权限策略(AliyunEMRSparkJobRunDefaultRolePolicy
),以了解当前所需的最新的权限列表。
操作流程
新建权限策略。
进入新建自定义权限策略页面。
使用RAM管理员登录RAM控制台。
在左侧导航栏,选择 。
在权限策略页面,单击创建权限策略。
在创建权限策略页面,单击脚本编辑页签。
输入权限策略内容,然后单击确定。
{ "Version": "1", "Statement": [ { "Action": [ "oss:ListBuckets", "oss:PutObject", "oss:ListObjectsV2", "oss:ListObjects", "oss:GetObject", "oss:CopyObject", "oss:DeleteObject", "oss:DeleteObjects", "oss:RestoreObject", "oss:CompleteMultipartUpload", "oss:ListMultipartUploads", "oss:AbortMultipartUpload", "oss:UploadPartCopy", "oss:UploadPart", "oss:GetBucketInfo", "oss:PostDataLakeStorageFileOperation", "oss:PostDataLakeStorageAdminOperation", "oss:GetBucketVersions", "oss:ListObjectVersions", "oss:DeleteObjectVersion" ], "Resource": [ "acs:oss:*:*:serverless-spark-test-resources/*", "acs:oss:*:*:serverless-spark-test-resources" ], "Effect": "Allow" }, { "Action": [ "dlf:AlterDatabase", "dlf:AlterTable", "dlf:ListCatalogs", "dlf:ListDatabases", "dlf:ListFunctions", "dlf:ListFunctionNames", "dlf:ListTables", "dlf:ListTableNames", "dlf:ListIcebergNamespaceDetails", "dlf:ListIcebergTableDetails", "dlf:ListIcebergSnapshots", "dlf:CreateDatabase", "dlf:Get*", "dlf:DeleteDatabase", "dlf:DropDatabase", "dlf:DropTable", "dlf:CreateTable", "dlf:CommitTable", "dlf:UpdateTable", "dlf:DeleteTable", "dlf:ListPartitions", "dlf:ListPartitionNames", "dlf:CreatePartition", "dlf:BatchCreatePartitions", "dlf:UpdateTableColumnStatistics", "dlf:DeleteTableColumnStatistics", "dlf:UpdatePartitionColumnStatistics", "dlf:DeletePartitionColumnStatistics", "dlf:UpdateDatabase", "dlf:BatchCreateTables", "dlf:BatchDeleteTables", "dlf:BatchUpdateTables", "dlf:BatchGetTables", "dlf:BatchUpdatePartitions", "dlf:BatchDeletePartitions", "dlf:BatchGetPartitions", "dlf:DeletePartition", "dlf:CreateFunction", "dlf:DeleteFunction", "dlf:UpdateFunction", "dlf:ListPartitionsByFilter", "dlf:DeltaGetPermissions", "dlf:UpdateCatalogSettings", "dlf:CreateLock", "dlf:UnLock", "dlf:AbortLock", "dlf:RefreshLock", "dlf:ListTableVersions", "dlf:CheckPermissions", "dlf:RenameTable", "dlf:RollbackTable" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "dlf-dss:CreateDatabase", "dlf-dss:CreateFunction", "dlf-dss:CreateTable", "dlf-dss:DropDatabase", "dlf-dss:DropFunction", "dlf-dss:DropTable", "dlf-dss:DescribeCatalog", "dlf-dss:DescribeDatabase", "dlf-dss:DescribeFunction", "dlf-dss:DescribeTable", "dlf-dss:AlterDatabase", "dlf-dss:AlterFunction", "dlf-dss:AlterTable", "dlf-dss:ListCatalogs", "dlf-dss:ListDatabases", "dlf-dss:ListTables", "dlf-dss:ListFunctions", "dlf-dss:CheckPermissions" ], "Resource": "*", "Effect": "Allow" }, { "Effect": "Allow", "Action": "dlf-auth:ActOnBehalfOfAnotherUser", "Resource": "*" } ] }
输入权限策略名称(例如,test-serverless-spark)和备注,然后单击确定。
策略中涉及的元素如下所示:
Action
:是指对具体资源的操作。本示例是OSS和DLF的读取及查询目录的权限。Resource
:是指被授权的具体对象。本示例是访问DLF所有对象及其中的内容,以及访问OSS Bucket(serverless-spark-test-resources)下的所有内容,其中serverless-spark-test-resources
需要根据实际情况替换为指定OSS Bucket的名称。
更多权限策略的基本元素,请参见权限策略基本元素。
创建RAM角色。
在左侧导航栏,选择
。在角色页面,单击创建角色。
创建RAM角色。
在创建角色面板,配置以下信息,单击确定。
参数
描述
信任主体类型
选择云服务。
信任主体名称
spark.emr-serverless.aliyuncs.com
输入角色名称(例如,test-serverless-spark-jobrun),单击确定。
为RAM角色授权。
在角色页面,单击刚创建的角色操作列的新增授权。
在新增授权面板,权限策略选择自定义策略,添加前一步骤中新建的权限策略。
单击确认新增授权。
单击关闭。
创建工作空间并访问外部资源。
其他权限策略参考
访问MaxCompute数据
为执行角色添加以下权限策略。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "odps:ActOnBehalfOfAnotherUser",
"Resource": [
"acs:odps:*:*:users/default/aliyun/*",
"acs:odps:*:*:users/default/ramuser/*",
"acs:odps:*:*:users/default/ramrole/*"
]
}
]
}
访问开启了KMS的OSS
为执行角色添加以下权限策略。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
相关文档
如果需要访问不同阿里云账户下的OSS资源,详情请参见如何跨账号访问阿里云OSS?。
关于通过RAM Policy实现用户权限的常见示例,请参见RAM Policy常见示例。