Os jobs em um workspace do EMR Serverless Spark usam uma função de execução para autenticação e acesso a outros services da Alibaba Cloud, como Object Storage Service (OSS) e Data Lake Formation (DLF). Ao criar um workspace, use a função de execução padrão ou defina uma função personalizada.
Casos de uso
Durante a execução do job, a função de execução acessa diferentes recursos ou services e assume uma identidade específica para autenticar e auditar suas ações. Os principais casos de uso são:
-
Acesso a arquivos no OSS
A função de execução acessa e opera em arquivos armazenados no Object Storage Service (OSS) durante a execução do job.
-
Leitura e gravação de metadados do DLF
Se o gerenciamento de permissões estiver ativado para o Data Lake Formation (DLF), a função de execução assumirá identidades diferentes conforme o tipo de job:
Desenvolvimento de dados: assume a identidade da conta Alibaba Cloud ou do usuário RAM (subconta) 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 função de execução assume a identidade da conta Alibaba Cloud ou do usuário RAM (subconta) que enviou o job para autenticar e auditar suas ações.
Observações de uso
Não é possível alterar a função de execução após a criação do workspace.
Função de execução padrão
Se você não modificar a configuração de Execution Role ao criar um workspace, o sistema usará automaticamente a função de execução padrão AliyunEMRSparkJobRunDefaultRole.
A função de execução padrão tem as seguintes propriedades:
Nome da função: AliyunEMRSparkJobRunDefaultRole.
Política associada: esta função inclui a política de acesso do sistema AliyunEMRSparkJobRunDefaultRolePolicy, que concede acesso ao Object Storage Service (OSS), Data Lake Formation (DLF) e MaxCompute.
Manutenção: a Alibaba Cloud cria e mantém essa política e a atualiza automaticamente para refletir alterações nos requisitos dos services.
Não edite nem exclua a função de execução padrão AliyunEMRSparkJobRunDefaultRole. Essa ação pode causar falhas na criação de recursos do workspace ou na execução de jobs.
Função de execução personalizada
Para personalizar as permissões da função de execução, selecione uma função personalizada na configuração de Execution Role durante a criação do workspace. Os passos a seguir demonstram como configurar uma função personalizada para acesso sem senha a outros recursos, como OSS e DLF, na mesma conta Alibaba Cloud.
A política de acesso abaixo é um exemplo de configuração de permissões para uma função personalizada. Ao usar uma função de execução personalizada, observe que sua política de acesso é estática e não se atualiza automaticamente com as mudanças nos requisitos dos services da Alibaba Cloud. Para garantir a execução correta dos jobs, revise e atualize periodicamente a política de acesso. Consulte a política de acesso (AliyunEMRSparkJobRunDefaultRolePolicy) da função de execução 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.
Faça logon no console do RAM como administrador do 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 Remarks e clique em OK.Esta política contém os seguintes elementos:
Action: especifica a operação em um recurso específico. Este exemplo concede permissões para ler dados e consultar diretórios no OSS e DLF.Resource: define os objetos autorizados. Este exemplo concede acesso a todos os objetos do DLF e a todo o conteúdo do bucket do OSS chamadoserverless-spark-test-resources. Substituaserverless-spark-test-resourcespelo nome do seu bucket do 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 função do RAM.
No painel de navegação à esquerda, escolha .
Na página Role, clique em Create Role.
-
Configure a função do RAM.
-
No painel Create Role, configure os parâmetros a seguir e clique em OK.
Parameter
Description
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 à função do RAM.
Na página Role, clique em Add Authorization na coluna Actions da função 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.
Faça logon no console do E-MapReduce.
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 do OSS para o qual a função do RAM criada tenha permissões de leitura e gravação.
Execution Role: selecione a função do RAM criada, como
test-serverless-spark-jobrun.
-
Após a criação do workspace, execute um job em lote conforme descrito em Quick start for JAR development para verificar as permissões.
Se você enviar um arquivo para o bucket do OSS autorizado, o job será executado conforme esperado.
Se você enviar um arquivo para um bucket do OSS não autorizado, o job falhará com um erro de acesso negado ao caminho do OSS.
Outros exemplos de políticas
Acesso a dados do MaxCompute
Adicione a seguinte política de acesso à função de execução.
{
"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 criptografado com KMS
Adicione a seguinte política de acesso à função de execução.
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:List*",
"kms:DescribeKey",
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
Documentação relacionada
Para acessar recursos do OSS pertencentes a outra conta Alibaba Cloud, consulte How do I access OSS resources across different Alibaba Cloud accounts?.
Para exemplos comuns de uso de políticas do RAM no gerenciamento de permissões de usuários, consulte Common examples of RAM policies.