Configure as credenciais de autenticação do cliente Alibaba Cloud Python SDK V1.0 para fazer requisições de API.
O SDK oferece suporte a cinco tipos de credenciais. Escolha aquela que corresponde ao seu ambiente de implantação:
|
Tipo de credencial |
Quando usar |
|
Par de AccessKey |
Desenvolvimento e testes locais com uma conta de usuário RAM |
|
Credenciais STS |
Necessidade de acesso de curta duração ou concessão de permissões temporárias a outros serviços |
|
Credenciais de função RAM |
Sua aplicação assume uma função RAM e precisa de renovação automática do token STS |
|
Credenciais de função RAM do ECS |
Seu código é executado em uma instância ECS com uma função RAM associada |
|
Credenciais padrão |
Desejo de que o SDK descubra credenciais automaticamente a partir de variáveis de ambiente |
Nunca codifique credenciais diretamente no source code nem as envie para controle de versão. Armazene-as em variáveis de ambiente ou em um gerenciador de segredos.
Usar um par de AccessKey
Este método é ideal para desenvolvimento e testes locais durante a autenticação como usuário RAM. Armazene o AccessKey ID e o AccessKey secret em variáveis de ambiente e passe-os para AcsClient.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# Initialize the client.
client = AcsClient(
os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Get the AccessKey ID of the RAM user from an environment variable.
os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # Get the AccessKey secret of the RAM user from an environment variable.
'<region_id>' # The region ID.
)
# Create an API request and set parameters.
request = DescribeRegionsRequest()
# Send the request.
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Usar credenciais STS
Recomendado quando você precisa de acesso temporário. O Security Token Service (STS) emite credenciais de segurança efêmeras — AccessKey ID, AccessKey secret e token de segurança — que expiram automaticamente.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkecs.request.v20140526.AcceptInquiredSystemEventRequest import AcceptInquiredSystemEventRequest
cred = StsTokenCredential(
sts_access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Obtain the AccessKey ID provided by STS from environment variables.
sts_access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # Obtain the AccessKey secret provided by STS from environment variables.
sts_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN') # Obtain the STS token provided by STS from environment variables.
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = AcceptInquiredSystemEventRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Usar credenciais de função RAM
Indicado para aplicações que precisam assumir uma função RAM. O cliente solicita e renova tokens STS automaticamente antes de cada chamada de API. Também é possível solicitar tokens STS manualmente e criar um cliente STS.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import RamRoleArnCredential
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
cred = RamRoleArnCredential(
sts_access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Get the AccessKey ID of the RAM user from an environment variable.
sts_access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # Get the AccessKey secret of the RAM user from an environment variable.
role_arn='<ram_role_arn>',
session_role_name='<session_role_name>'
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = DescribeRegionsRequest()
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Usar credenciais de função RAM do ECS
Utilize esta opção quando seu código for executado em uma instância ECS com uma função RAM associada. O SDK obtém credenciais de segurança temporárias automaticamente do endpoint de metadados da instância em http://100.100.100.200/latest/meta-data/ram/security-credentials/<role_name>. Nenhuma configuração de credencial é necessária no seu código.
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import EcsRamRoleCredential
from aliyunsdkecs.request.v20140526.AcceptInquiredSystemEventRequest import AcceptInquiredSystemEventRequest
cred = EcsRamRoleCredential(
role_name='<ram_role_name>'
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = AcceptInquiredSystemEventRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Usar a credencial padrão
Mais adequado para cenários em que se deseja a descoberta automática de credenciais pelo SDK. O sistema verifica as variáveis de ambiente ALIYUN_ACCESS_KEY_ID e ALIYUN_ACCESS_KEY_SECRET. Se ambas estiverem definidas e não vazias, o SDK as utiliza para criar uma credencial padrão.
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# Initialize the client.
client = AcsClient(
region_id='<region_id>' # The region ID.
)
# Create an API request and set parameters.
request = DescribeRegionsRequest()
# Send the request.
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Melhores práticas de segurança
Use variáveis de ambiente ou um gerenciador de segredos. Jamais codifique credenciais diretamente no source code ou as envie para um repositório.
Siga o princípio do menor privilégio. Conceda aos usuários RAM e funções RAM apenas as permissões estritamente necessárias.
Prefira credenciais de função RAM ou função RAM do ECS em produção. Ambos os tipos emitem tokens STS de curta duração e os renovam automaticamente, reduzindo o risco de exposição de credenciais.
Renove pares de AccessKey regularmente. Revogue quaisquer pares de AccessKey que não estejam mais em uso.
Utilize credenciais STS para acesso temporário. Ao conceder acesso a terceiros ou a processos efêmeros, emita credenciais STS com tempo de expiração apropriado em vez de compartilhar um par de AccessKey de longa duração.