Quando jobs do DLC acessam outros recursos de nuvem, é necessário configurar um par de AccessKey para autenticação. Ao associar uma função do RAM, o job do DLC usa credenciais temporárias do Security Token Service (STS) para acessar outros serviços de nuvem. Isso elimina a necessidade de pares de AccessKey permanentes e reduz o risco de vazamento de chaves. Este tópico descreve como criar uma função do RAM, conceder permissões ao DLC e obter credenciais de acesso temporárias usando essa função.
Benefícios
Uma função do RAM é uma entidade confiável que os serviços de nuvem podem assumir para gerenciar o acesso entre serviços. O uso de uma função do RAM para autenticação e controle de acesso oferece os seguintes benefícios:
Segurança: Credenciais temporárias do STS substituem pares de AccessKey permanentes, o que diminui o risco de vazamento de chaves.
Controle e praticidade: Controle com precisão o acesso dos desenvolvedores aos recursos de nuvem modificando a política de permissões da função do RAM.
Limitações
É possível associar apenas uma função do RAM a cada job do DLC.
Métodos de configuração
Ao criar um job do DLC, configure uma função do RAM e obtenha credenciais temporárias do STS.
Configurar uma função do RAM para o DLC
Função padrão do PAI
A função padrão do PAI baseia-se na função de serviço AliyunPAIDLCDefaultRole. Ela possui permissões refinadas para acessar apenas o MaxCompute e o Object Storage Service (OSS). Uma credencial temporária emitida por essa função tem as mesmas permissões da conta Alibaba Cloud ao acessar tabelas do MaxCompute. Para acesso ao OSS, ela só pode acessar o bucket padrão do OSS configurado para o workspace atual.
Após conceder a função padrão do PAI, obtenha credenciais temporárias dentro do job para acessar recursos básicos de desenvolvimento, sem precisar conceder permissões excessivas ou criar uma função do RAM adicional.
-
Casos de uso
Com a função padrão do PAI concedida, não é necessário configurar um par de AccessKey nos seguintes cenários:
Envio de um job usando o SDK PyODPS para um projeto do MaxCompute onde o proprietário do job tem permissões de execução.
Acesso a dados no bucket padrão do OSS configurado para o workspace atual por meio do SDK do OSS.
-
Método de configuração
Ao criar um job do DLC, na seção Roles and Permissions, selecione Default Roles of PAI como Instance RAM Role. Na seção Roles and Permissions, defina Visibility como Visible within the workspace e Instance RAM Role como default role of PAI.
Após configurar a função do RAM, obtenha uma credencial de acesso temporária usando a função do RAM associada.
Função personalizada
Se as permissões das credenciais temporárias da função padrão do PAI não atenderem aos seus requisitos, crie uma função do RAM e personalize sua política de permissões. Siga estas etapas:
-
Faça login no console do RAM e crie uma função do RAM.
Configure os seguintes parâmetros principais:
Principal Type: Selecione Cloud Services.
Principal Name: Selecione PAI.
-
Conceda permissões à função do RAM criada.
Anexe uma política do sistema ou personalizada à função do RAM para definir suas permissões. Por exemplo, conceda a política AliyunOSSReadOnlyAccess à função do RAM para permitir acesso somente leitura ao OSS.
Caso você seja um usuário do RAM, solicite ao administrador da sua conta Alibaba Cloud que conceda ao seu usuário do RAM as permissões necessárias para usar a função do RAM. Para mais informações, consulte Gerenciar permissões de usuários do RAM. O código abaixo apresenta um exemplo de política de permissões personalizada:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }Substitua ${RoleName} pelo nome da função do RAM associada ao job do DLC.
-
Envie o job do DLC e associe a função do RAM. Na seção Roles and Permissions, configure os seguintes parâmetros principais. Para obter informações sobre outros parâmetros, consulte Criar um job de treinamento.
Parâmetro
Descrição
Instance RAM Role
Selecione Custom Role.
RAM Role
Escolha a função do RAM criada nas etapas anteriores. A credencial temporária herda as permissões dessa função personalizada ao acessar serviços de nuvem.
Depois de configurar a função do RAM, obtenha uma credencial de acesso temporária usando a função do RAM associada.
Sem função associada
Se não for necessário usar um par de AccessKey para acessar dados, recomenda-se não associar uma função. Ao criar um job do DLC, na seção Roles and Permissions, selecione Does Not Associate Role como Instance RAM Role. Na seção Roles and Permissions, defina Visibility como Visible to creator only e Instance RAM Role como Do not associate role.
Obter uma credencial de acesso temporária
Se você atribuir a função padrão do PAI ou uma função personalizada a um job do DLC, poderá obter credenciais temporárias de uma das seguintes maneiras:
Usar a ferramenta de credenciais
A ferramenta Alibaba Cloud Credentials obtém credenciais temporárias do STS chamando um serviço local injetado automaticamente durante a criação do job. As credenciais são renovadas automaticamente de forma periódica.
Ao criar um job do DLC, conclua as seguintes configurações principais:
-
Instale a ferramenta Alibaba Cloud Credentials.
Na seção Third-party Library Settings, selecione Third-party Libraries e insira alibabacloud_credentials na caixa de texto para instalar a ferramenta Alibaba Cloud Credentials.
NotaIgnore esta etapa se a biblioteca já estiver pré-instalada na imagem.
-
Configure um arquivo de script.
O código abaixo mostra um exemplo de script em Python. Para mais exemplos em outras linguagens de SDK, consulte Melhores práticas para usar credenciais de acesso à OpenAPI da Alibaba Cloud. Utilize a opção Source Code Repositories ou Mount Configuration para carregar o arquivo de script no ambiente do DLC.
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' ) credentialsClient = CredClient(credentialsConfig)
Acessar o serviço local
Ao criar um job do DLC, execute o seguinte comando no campo Startup Command para obter credenciais temporárias do serviço local injetado automaticamente.
# Obtain a temporary access credential for the instance RAM role.
curl $ALIBABA_CLOUD_CREDENTIALS_URI
O exemplo a seguir mostra uma saída de amostra:
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
Descrição dos campos:
SecurityToken: Token de segurança temporário da função do RAM.
Expiration: Tempo de expiração das credenciais temporárias.
Acessar um arquivo local
No contêiner do DLC, leia o arquivo no caminho especificado para obter as credenciais temporárias da função do RAM. Esse arquivo é injetado automaticamente e atualizado periodicamente pelo PAI. O caminho do arquivo é /mnt/.alibabacloud/credentials. O código a seguir exibe o conteúdo do arquivo:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}
Exemplos
Acessar o ODPS
Ao criar um job do DLC, realize as seguintes configurações essenciais:
-
Instale as bibliotecas necessárias.
Na seção Third-party Library Settings, configure as Third-party Libraries para instalar a ferramenta Alibaba Cloud Credentials e o SDK do ODPS.
alibabacloud_credentials pyodpsNotaIgnore esta etapa caso essas bibliotecas já estejam pré-instaladas na imagem.
-
Configure um arquivo de script.
O código abaixo fornece um exemplo de script em Python. Use a opção Source Code Repositories ou Mount Configurations para carregar o arquivo de script no ambiente do DLC e configure um Mount Path, como
/mnt/data/.from alibabacloud_credentials import providers from odps.accounts import CredentialProviderAccount from odps import ODPS if __name__ == '__main__': account = CredentialProviderAccount(providers.DefaultCredentialsProvider()) o = ODPS( account=account, project="{odps_project}", # Replace with your project name. endpoint="{odps_endpoint}" # Replace with the endpoint of the region where your project is located. ) for t in o.list_tables(): print(t) -
Configure o comando de inicialização.
Defina o Startup Command como o comando que executa o script. Por exemplo,
python /mnt/data/xx.py. -
Configure as informações da função.
Para Instance RAM Role, selecione Default Roles of PAI.
Acessar o OSS
Ao criar um job do DLC, conclua as configurações chave listadas abaixo:
-
Instale as bibliotecas exigidas.
Na seção Third-party Library Settings, ajuste as Third-party Libraries para instalar a ferramenta Alibaba Cloud Credentials e o SDK do OSS.
alibabacloud_credentials oss2NotaIgnore esta etapa se essas bibliotecas já vierem pré-instaladas na imagem.
-
Configure um arquivo de script.
O código a seguir apresenta um exemplo de script Python. Você pode utilizar a opção Source Code Repositories ou Mount Configurations para enviar o arquivo de script ao ambiente do DLC e definir um Mount Path, como
/mnt/data/.import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials import providers from itertools import islice auth = oss2.ProviderAuth(providers.DefaultCredentialsProvider()) bucket = oss2.Bucket(auth, '{oss_endpoint}', # Replace with the endpoint of the region where your OSS bucket is located. '{oss_bucket}' # Replace with the name of your OSS bucket. ) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key) -
Configure o comando de inicialização.
Defina o Startup Command para o comando que roda o script. Exemplo:
python /mnt/data/xx.py. -
Configure as informações da função.
Em Instance RAM Role, escolha Default Roles of PAI.
FAQ
Erro ao selecionar uma função personalizada
-
Mensagem de erro: check permission for ram role failed ou check permission for RAM user failed.
Acesse o console do RAM para verificar se a função existe.
Caso a função não exista, altere a Instance RAM Role para uma função existente.
-
Se a função existir, entre em contato com o administrador da sua conta Alibaba Cloud para conceder ao seu usuário do RAM as permissões de uso da função. Para mais detalhes, veja Gerenciar permissões de usuários do RAM. Abaixo está um exemplo de política de permissões personalizada. Substitua
${RoleName}pelo nome da sua função do RAM.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
-
Mensagem de erro: Failed to assume role for user.
Esse erro geralmente ocorre porque nenhuma política de confiança foi configurada para sua função. Adicione uma política de confiança seguindo estas etapas:
Faça login no console do RAM como administrador do RAM.
No painel de navegação à esquerda, escolha .
Na página Roles, clique em Roles no nome da função do RAM desejada.
Na aba Trust Policy, clique em Edit Trust Policy.
-
No editor, modifique a política de confiança e clique em OK.
Suponha que a política de confiança original da função seja:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com" ] } } ], "Version": "1" }O novo conteúdo da política fica assim:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com", "pai.aliyuncs.com" ] } } ], "Version": "1" }