Os jobs em um workspace do EMR Serverless Spark usam uma execution role para autenticar e acessar outros serviços da Alibaba Cloud, como Object Storage Service (OSS) e Data Lake Formation (DLF). Ao criar um workspace, você pode usar a execution role padrão ou uma role personalizada.
Casos de uso
Durante a execução do job, a execution role chama diferentes recursos ou serviços e assume uma identidade especificada para autenticar e auditar suas ações. Os principais casos de uso são:
-
Acesso a arquivos no OSS
Durante a execução do job, a execution role acessa e opera arquivos armazenados no Object Storage Service (OSS).
-
Leitura e gravação de metadados no DLF
Se o gerenciamento de permissões estiver ativo no Data Lake Formation (DLF), a execution role assume identidades diferentes de acordo com o tipo de job:
Desenvolvimento de dados: assume a identidade da conta Alibaba Cloud ou do RAM user (sub-account) que envia o job.
Livy Gateway: assume a identidade do criador do token.
-
Leitura e gravação de dados no MaxCompute
Ao ler e gravar dados no MaxCompute, a execution role assume a identidade da conta Alibaba Cloud ou do RAM user (sub-account) que enviou o job para autenticar e auditar suas ações.
Observações de uso
A execution role não pode ser alterada após a criação do workspace.
Execution role padrão
Ao criar um workspace, se você não modifique a configuração Execution Role, o sistema usará automaticamente a execution role padrão AliyunEMRSparkJobRunDefaultRole.
A execution role padrão tem as seguintes propriedades:
Nome da role: AliyunEMRSparkJobRunDefaultRole.
Política associada: esta role inclui a política de acesso do sistema AliyunEMRSparkJobRunDefaultRolePolicy, que concede acesso ao Object Storage Service (OSS), ao Data Lake Formation (DLF) e ao MaxCompute.
Manutenção: a Alibaba Cloud cria e mantém esta política, atualizando-a automaticamente para refletir mudanças nos requisitos do service.
Não edite nem exclua a execution role padrão AliyunEMRSparkJobRunDefaultRole. Fazer isso pode causar falhas na criação de recursos do workspace ou na execução de jobs.
Execution role personalizada
Para personalizar as permissões da execution role, selecione uma role personalizada na configuração Execution Role ao criar um workspace. As etapas a seguir mostram como configure uma role personalizada para acesso sem senha a outros recursos, como OSS e DLF, dentro da mesma conta Alibaba Cloud.
A política de acesso a seguir é um exemplo de como configure permissões para uma role personalizada. Ao usar uma execution role personalizada, observe que sua política de acesso é estática e não é atualize automaticamente com as mudanças nos requisitos do service da Alibaba Cloud. Para garantir que os jobs sejam executados corretamente, recomendamos revisar e atualize periodicamente a política de acesso. Consulte a política de acesso (AliyunEMRSparkJobRunDefaultRolePolicy) da execution role padrão AliyunEMRSparkJobRunDefaultRole para obter a lista mais recente de permissões necessárias.
Procedimento
-
Crie uma política de acesso.
-
Acesse a página de criação de políticas.
Acesse o RAM console como administrador RAM.
No painel de navegação à esquerda, escolha .
Na página Policies, clique em Create Policy.
Na página Create Policy, clique na aba Json.
-
Insira o conteúdo da política e clique em OK.
{ "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": "*" } ] } -
Insira um Name, como
test-serverless-spark, e um Remarks, e clique em OK.Esta política contém os seguintes elementos:
Action: define a operação sobre um recurso específico. Neste exemplo, são concedidas permissões para ler dados e consulte diretórios no OSS e no DLF.Resource: especifica os objetos autorizados. Neste exemplo, o acesso é concedido a todos os objetos DLF e a todo o conteúdo do bucket OSS chamadoserverless-spark-test-resources. Substituaserverless-spark-test-resourcespelo nome do seu bucket OSS.
Para mais informações sobre os elementos básicos de uma política de acesso, consulte Basic elements of an access policy.
-
-
Crie uma RAM role.
No painel de navegação à esquerda, escolha .
Na página Role, clique em Create Role.
-
Crie a RAM role.
-
No painel Create Role, configure os parâmetros a seguir e clique em OK.
Parâmetro
Descrição
Select Trusted Entity
Selecione Alibaba Cloud Service.
Trusted Service
spark.emr-serverless.aliyuncs.com
Insira um Role Name, como
test-serverless-spark-jobrun, e clique em OK.
-
-
Conceda permissões à RAM role.
Na página Role, clique em Add Authorization na coluna Actions referente à role criada.
No painel Add Authorization, selecione Custom policy e adicione a política de acesso criada na etapa anterior.
Clique em OK.
Clique em Close.
-
Crie um workspace e acesse recursos externos.
Acesse o E-MapReduce console.
No painel de navegação à esquerda, escolha EMR Serverless > Spark.
-
Clique em Create Workspace e configure os parâmetros a seguir. Para mais informações sobre outros parâmetros, consulte Create a workspace.
Workspace Directory: selecione um caminho OSS para o qual a RAM role criada tenha permissões de leitura e gravação.
Execution Role: selecione a RAM role criada, como
test-serverless-spark-jobrun.
-
Após criar o workspace, execute um job em batch conforme descrito em Quick start for JAR development para verifique as permissões.
Se você fizer upload de um arquivo para o bucket OSS autorizado, o job será executado conforme esperado.
Se você fizer upload de um arquivo para um bucket OSS não autorizado, o job falhará com um erro de acesso negado ao caminho OSS.
Outros exemplos de políticas
Acesso a dados no MaxCompute
Adicione a seguinte política de acesso à execution role.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "odps:ActOnBehalfOfAnotherUser",
"Resource": [
"acs:odps:*:*:users/default/aliyun/*",
"acs:odps:*:*:users/default/ramuser/*",
"acs:odps:*:*:users/default/ramrole/*"
]
}
]
}
Acesso ao OSS com criptografia KMS
Adicione a seguinte política de acesso à execution role.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
Documentação relacionada
Para acesse recursos OSS pertencentes a uma conta Alibaba Cloud diferente, consulte How do I access OSS resources across different Alibaba Cloud accounts?.
Para exemplos comuns de uso de políticas RAM no gerencie de permissões de usuários, consulte Common examples of RAM policies.