Associar uma função do RAM a uma instância DSW permite que a instância utilize credenciais STS temporárias da função para acessar outros recursos de nuvem. Isso elimina a necessidade de configurar AccessKeys de longo prazo e reduz o risco de vazamento de credenciais.
O que é uma função do RAM de instância
Uma função do RAM de instância fornece uma identidade temporária baseada em funções para uma instância DSW. Quando uma instância DSW recebe uma função do RAM:
Os processos dentro da instância obtêm automaticamente credenciais STS de curto prazo do serviço de metadados local ou de um arquivo de credenciais.
As credenciais concedem permissões definidas pela política de permissões anexada, permitindo acesso seguro a serviços de nuvem autorizados, como OSS, MaxCompute e PAI-DLC.
Essa abordagem evita completamente o armazenamento de AccessKey em texto simples no código ou nos arquivos de configuração, ajudando você a atender aos requisitos de segurança e conformidade.
Os principais benefícios incluem:
Segurança: Utiliza credenciais STS de curto prazo atualizadas automaticamente em vez de AccessKeys de longo prazo, eliminando os riscos de chaves codificadas e vazamento de credenciais.
Facilidade de gerenciamento: Centraliza o gerenciamento de permissões por meio de políticas de função do RAM. As alterações na política entram em vigor imediatamente, sem reiniciar instâncias ou atualizar o código.
Confiança nativa: O Alibaba Cloud Security Token Service (STS) emite as credenciais, tornando-as confiáveis por padrão, sem exigir middleware de autenticação adicional.
Limitações
É possível associar apenas uma função do RAM a uma instância DSW por vez.
Procedimento
Etapa 1: Configurar uma função do RAM
Na página de configuração da instância DSW, escolha uma das três opções de função a seguir:
PAI default role
O Platform for AI (PAI) fornece uma função padrão. Após conceder essa função a uma instância, ela obtém automaticamente acesso aos seguintes recursos sem um AccessKey configurado:
Envie jobs para projetos do MaxCompute onde o proprietário da instância tenha permissões de execução usando o ODPS SDK.
Acesse dados no bucket do caminho de armazenamento padrão configurado para o workspace atual usando o OSS SDK.
Utilize o serviço Tongyi Lingma no WebIDE.
Crie e envie jobs de treinamento para o workspace atual usando o PAI ou o PAI-DLC SDK.
Custom role
-
Faça login no RAM console e crie uma função do RAM. Para obter instruções detalhadas, consulte Criar uma função do RAM para um serviço confiável do Alibaba Cloud.
Configure os parâmetros principais da seguinte forma:
Trusted entity type: Alibaba Cloud service
Trusted entity name: Platform for AI (pai.aliyun.cs.com)
-
Conceda permissões à função do RAM.
Clique em Add Authorization e anexe uma política de permissões do sistema ou personalizada à função do RAM. Isso concede à função permissões para acessar ou operar os recursos necessários. Por exemplo, adicione a política AliyunOSSFullAccess. Para mais informações, consulte Etapa 3: Conceder permissões a uma função do RAM.
NotaSe você estiver usando um usuário do RAM para operar a instância DSW, solicite ao administrador da conta raiz que crie e anexe a seguinte política de permissões ao seu usuário do RAM. Essa política permite que seu usuário do RAM utilize a função do RAM da instância.
O código a seguir mostra a política de permissões necessária. Substitua
${RoleName}pelo nome da função do RAM da instância DSW.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
No associated role
Se sua instância estiver visível publicamente no workspace, recomendamos não associar uma função do RAM a ela para evitar exposição de permissões. Ao criar uma instância ou alterar sua configuração, na seção Advanced Information, defina Instance RAM Role como Does Not Associate Role.
Atualizar a configuração da função do RAM
-
Acesse a página do DSW.
Faça login no PAI console e selecione sua região e workspace de destino.
No painel de navegação à esquerda, escolha Model Training > Data Science Workshop (DSW) para acessar a página do DSW.
Clique em Change Settings à direita da instância DSW.
-
Na seção Roles and Permissions, configure a função do RAM da instância.
ImportanteSe você alternar a função do RAM de uma instância em execução de Default Roles of PAI ou Custom Roles para Does Not Associate Role, ou de Does Not Associate Role para Default Roles of PAI ou Custom Roles, a instância será reiniciada imediatamente. Certifique-se de ter salvo a instância.
Após concluir a configuração, clique em OK.
Etapa 2: Obter credenciais temporárias
Após associar uma função do RAM a uma instância, obtenha e utilize suas credenciais temporárias de várias maneiras para acessar serviços de nuvem.
Credentials tool
Recomendamos usar a ferramenta Credentials dos SDKs do Alibaba Cloud. Ela lida automaticamente com a aquisição e atualização de credenciais, sendo a melhor prática para acessar serviços de nuvem.
-
Instale a dependência (exemplo em Python):
pip install alibabacloud_credentials -
Exemplo de uso:
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_credentials.models import Config as CredConfig credentialsConfig = CredConfig( type='credentials_uri' # Optional. If you have not configured other access methods in the default credential chain, you do not need to explicitly specify the type. The Credentials SDK obtains temporary credentials by using the URI method. ) credentialsClient = CredClient(credentialsConfig)
Para mais exemplos de SDK em outras linguagens, consulte Melhores práticas para usar credenciais para acessar a OpenAPI do Alibaba Cloud.
Local service
Na instância DSW, execute o seguinte comando no terminal para obter credenciais do serviço injetado localmente.
# Obtain temporary access credentials for the instance RAM role
curl $ALIBABA_CLOUD_CREDENTIALS_URI
A seguir está um exemplo de resposta:
SecurityToken: O token temporário para a função do RAM da instância.
Expiration: O tempo de expiração das credenciais de acesso temporárias.
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}
Local file
Em uma instância DSW, o PAI injeta automaticamente e atualiza periodicamente um arquivo contendo credenciais temporárias para a função do RAM da instância. Você pode obter essas credenciais lendo o arquivo no caminho /mnt/.alibabacloud/credentials. O conteúdo do arquivo é o seguinte:
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}
Etapa 3: Acessar outros serviços de nuvem
Access OSS
-
Execute os seguintes comandos para instalar a ferramenta Credentials e o OSS SDK:
# Install the credentials tool pip install alibabacloud_credentials # Install the OSS SDK pip install oss2 -
Use as credenciais temporárias da função do RAM da instância para acessar o OSS e listar 10 objetos em um bucket especificado. Para endpoints de região do OSS, consulte Regiões e endpoints.
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 your OSS bucket name. ) for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key)
Access MaxCompute
-
Execute os seguintes comandos para instalar a ferramenta Credentials e o ODPS SDK:
# Install the credentials tool pip install alibabacloud_credentials # Install the ODPS SDK pip install odps -
Utilize as credenciais temporárias da função do RAM da instância para acessar o MaxCompute e recuperar a lista de tabelas em um projeto especificado. Para endpoints de região do MaxCompute, consulte Endpoints.
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)
Access PAI-DLC
-
Execute os seguintes comandos para instalar a ferramenta Credentials, o OpenAPI SDK e o PAI-DLC SDK:
# Install the credentials tool pip install alibabacloud_credentials # Install the Alibaba Cloud OpenAPI SDK pip install alibabacloud-tea-util alibabacloud_tea_openapi # Install the PAI-DLC SDK pip install alibabacloud_pai_dlc20201203 -
Use as credenciais temporárias da função do RAM da instância para acessar o PAI-DLC e listar os jobs do PAI-DLC em um workspace especificado.
from alibabacloud_credentials.client import Client as CredClient from alibabacloud_tea_openapi.models import Config from alibabacloud_pai_dlc20201203.client import Client as pai_dlc20201203Client from alibabacloud_pai_dlc20201203 import models as pai_dlc_20201203_models from alibabacloud_tea_util.models import RuntimeOptions # Use the Credentials tool to initialize the PAI-DLC client. credentialsClient = CredClient() config = Config(credential=credentialsClient) config.endpoint = '<dlc_endpoint>' # Replace with the endpoint of your region. client = pai_dlc20201203Client(config) # Initialize the request and call the ListJobs API. list_jobs_request = pai_dlc_20201203_models.ListJobsRequest() list_jobs_request.workspace_id = '<workspace_id>' # Replace with your workspace ID. runtime_options = RuntimeOptions() headers = {} resp = client.list_jobs_with_options(list_jobs_request, headers, runtime_options) jobs = resp.to_map()['body']['Jobs'] print(jobs[0])
Perguntas frequentes
Resolver PassRoleFailedError
Faça login no RAM console para verificar se a função existe.
Caso a função não exista, altere a função do RAM da instância para uma função existente.
-
Se a função existir, solicite ao administrador da conta raiz que conceda ao seu usuário do RAM permissão para usar essa função. A política de permissões necessária é a seguinte (substitua ${RoleName} pelo nome da função do RAM):
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ram:PassRole", "Resource": "acs:ram::*:role/${RoleName}" } ] }
Resolver AssumeRoleFailedError
Esse erro geralmente ocorre porque a política de confiança da sua função está configurada incorretamente. Siga estas etapas para resolver o problema:
Faça login no RAM console como administrador do RAM.
No painel de navegação à esquerda, escolha Identity Management > Roles.
Na página Roles, clique em nome da função do RAM de destino.
Na aba Trust Policy, clique em Edit Trust Policy.
-
Modifique a política de confiança para adicionar
pai.aliyuncs.comao principalServicee clique em OK.Por exemplo, se a política de confiança original for:
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com" ] } } ], "Version": "1" }Atualize a política para incluir
pai.aliyuncs.com:{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::aaa:root" ], "Service": [ "xxx.aliyuncs.com", "pai.aliyuncs.com" ] } } ], "Version": "1" }