Para usar o Object Storage Service (OSS) SDK for Node.js, forneça credenciais de acesso para autenticar suas requisições. O SDK oferece suporte a diversos métodos de configuração de credenciais. Escolha a opção mais adequada aos seus requisitos de segurança e operação.
Pré-requisitos
Instale o OSS SDK for Node.js. Para mais informações, consulte Instalar o OSS SDK for Node.js.
Selecione um método de configuração de credenciais
A tabela a seguir compara os diferentes métodos de configuração de credenciais para ajudar você a escolher o mais adequado.
|
Método |
Cenário |
Par de AccessKey ou token de segurança obrigatório |
Lógica subjacente |
Período de validade da credencial |
Método de rotação ou atualização da credencial |
|
Aplicações implantadas e executadas em ambiente seguro e estável, não vulnerável a ataques externos, que precisam acessar serviços de nuvem por longos períodos sem rotação frequente de credenciais. |
Sim |
Par de AccessKey |
Longo prazo |
Rotação manual |
|
|
Aplicações implantadas e executadas em ambiente não confiável, nas quais se deseja gerenciar o período de validade da credencial e os recursos acessíveis. |
Sim |
Token de segurança |
Temporário |
Atualização manual |
|
|
Aplicações que necessitam de autorização para acessar serviços de nuvem, como em cenários de acesso entre contas. |
Sim |
Token de segurança |
Temporário |
Atualização automática |
|
|
Método 4: Usar a função RAM obtida pelo modo de reforço de segurança dos metadados da instância ECS |
Aplicações implantadas e executadas em instâncias do Elastic Compute Service (ECS), instâncias de contêiner elástico e nós de trabalho do Container Service for Kubernetes (ACK). |
Não |
Token de segurança |
Temporário |
Atualização automática |
|
Aplicações não confiáveis implantadas e executadas em nós de trabalho do ACK. |
Não |
Token de segurança |
Temporário |
Atualização automática |
|
|
Aplicações que requerem credenciais de acesso provenientes de sistemas externos. |
Não |
Token de segurança |
Temporário |
Atualização automática |
Método 1: Usar um par de AccessKey
O uso de um par de AccessKey de longo prazo é simples, porém menos seguro. Esse método é adequado para aplicações em ambientes altamente seguros. Para maior segurança, use sempre o par de AccessKey de um usuário RAM com as permissões mínimas necessárias, e não o par de AccessKey da sua conta Alibaba Cloud. Para mais informações sobre como obter um par de AccessKey, consulte CreateAccessKey.
Uma conta Alibaba Cloud tem acesso total a todos os recursos da conta. O vazamento do par de AccessKey da conta Alibaba Cloud representa uma ameaça crítica ao sistema. Portanto, use o par de AccessKey de um usuário RAM com as permissões mínimas necessárias para inicializar um provedor de credenciais.
-
Configure as variáveis de ambiente.
Mac OS X/Linux/Unix
export ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET>Windows
set ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID> set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> -
Use o par de AccessKey para inicializar o cliente.
const OSS = require("ali-oss"); // Initialize the OSSClient instance. const client = new OSS({ // Obtain the AccessKey ID from the environment variable. accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Obtain the AccessKey secret from the environment variable. accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET }); // listBuckets const buckets = await client.listBuckets(); console.log(buckets);
Método 2: Usar um token de segurança
Chame a operação AssumeRole do STS como um usuário RAM e especifique o período máximo de validade do token de segurança para obtê-lo.
-
Configure as variáveis de ambiente.
Mac OS X/Linux/Unix
export ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID> export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> export ALIBABA_CLOUD_SECURITY_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN>Windows
set ALIBABA_CLOUD_ACCESS_KEY_ID=<ALIBABA_CLOUD_ACCESS_KEY_ID> set ALIBABA_CLOUD_ACCESS_KEY_SECRET=<ALIBABA_CLOUD_ACCESS_KEY_SECRET> set ALIBABA_CLOUD_SECURITY_TOKEN=<ALIBABA_CLOUD_SECURITY_TOKEN> -
Use as credenciais de acesso temporárias para inicializar a instância do OSSClient.
const OSS = require("ali-oss"); // Initialize the OSSClient instance. const client = new OSS({ // Obtain the AccessKey ID from the environment variable. accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, // Obtain the AccessKey secret from the environment variable. accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, // Obtain the security token from the environment variable. stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN }); // listBuckets const buckets = await client.listBuckets(); console.log(buckets);
Método 3: Usar RAMRoleARN
Este método usa um token de segurança obtido do STS para configurar as credenciais de acesso. Após especificar o Alibaba Cloud Resource Name (ARN) de uma função RAM, a ferramenta Credentials obtém o token de segurança do STS. Também é possível usar o parâmetro policy para limitar as permissões da função RAM.
Use o par de AccessKey e o RAMRoleARN para inicializar a instância do OSSClient.
const Credential = require("@alicloud/credentials");
const OSS = require("ali-oss");
// Use the ARN of your RAM role to initialize the Credentials client.
const credentialsConfig = new Credential.Config({
// Specify the credential type.
type: "ram_role_arn",
// Obtain the AccessKey ID from the environment variable.
accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID,
// Obtain the AccessKey secret from the environment variable.
accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,
// Specify the ARN of the RAM role that you want your application to assume by specifying the ALIBABA_CLOUD_ROLE_ARN environment variable. Example: acs:ram::123456789012****:role/adminrole.
roleArn: '<RoleArn>',
// Specify the role session name by specifying the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
roleSessionName: '<RoleSessionName>',
// Optional. Specify limited permissions for the RAM role. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
// policy: '<Policy>',
roleSessionExpiration: 3600
});
const credentialClient = new Credential.default(credentialsConfig);
const credential = await credentialClient.getCredential();
// Initialize the OSSClient instance.
const client = new OSS({
accessKeyId:credential.accessKeyId,
accessKeySecret: credential.accessKeySecret,
stsToken: credential.securityToken,
refreshSTSTokenInterval: 0, // Specify that Credential manages the update of the AccessKey ID, AccessKey secret, and security token.
refreshSTSToken: async () => {
const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
return {
accessKeyId,
accessKeySecret,
stsToken: securityToken,
};
}
});
// listBuckets
const buckets = await client.listBuckets();
console.log( buckets);
Método 4: Usar a função RAM obtida pelo modo de reforço de segurança dos metadados da instância ECS
Este método usa um token de segurança obtido do STS para configurar as credenciais de acesso. A ferramenta Credentials obtém automaticamente a função RAM associada a uma instância ECS e recupera o token de segurança dessa função por meio do servidor de metadados da instância ECS. O token de segurança serve para inicializar um cliente Credentials. Use a ferramenta Credentials para ler o token de segurança e inicializar o cliente Credentials.
const Credential = require("@alicloud/credentials");
const OSS = require("ali-oss");
// Use the ARN of your RAM role to initialize the Credentials client.
const credentialsConfig = new Credential.Config({
// Specify the credential type.
type: "ecs_ram_role",
// Optional. Specify the name of the RAM role attached to an ECS instance by specifying the ALIBABA_CLOUD_ECS_METADATA environment variable. If you do not specify this parameter, the name of the RAM role attached to an ECS instance is automatically obtained. We recommend that you specify this parameter to reduce the number of requests.
roleName: '<RoleName>'
});
const credentialClient = new Credential.default(credentialsConfig);
const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
// Initialize the OSSClient instance.
const client = new OSS({
accessKeyId,
accessKeySecret,
stsToken: securityToken,
refreshSTSTokenInterval: 0, // Specify that Credential manages the update of the AccessKey ID, AccessKey secret, and security token.
refreshSTSToken: async () => {
const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
return {
accessKeyId,
accessKeySecret,
stsToken: securityToken,
};
}
});
// listBuckets
const buckets = await client.listBuckets();
console.log(buckets);
Método 5: Usar OIDCRoleARN
Após configurar uma função RAM no nó de trabalho do ACK, as aplicações nos pods desse nó podem obter o token de segurança da função via servidor de metadados, de forma semelhante às aplicações em instâncias ECS. No entanto, para aplicações não confiáveis, como código enviado por clientes, convém restringir o acesso ao token de segurança da função RAM. Para proteger os recursos de nuvem e permitir que aplicações não confiáveis obtenham os tokens necessários com permissões mínimas, use o recurso RAM Roles for Service Accounts. O ACK cria e monta arquivos de token OpenID Connect para diferentes pods de aplicação e passa as informações de configuração para variáveis de ambiente. A ferramenta Credentials recupera essas configurações e chama a operação AssumeRoleWithOIDC do STS para obter o token de segurança da função associada. Para mais informações, consulte Usar RRSA para controle de acesso no nível do pod.
Configure o OIDCRoleARN como credencial de acesso para inicializar o cliente.
const OSS = require("ali-oss");
const Credential = require("@alicloud/credentials");
const credentialsConfig = new Credential.Config({
// Specify the credential type.
type: "oidc_role_arn",
// Specify the ARN of the RAM role by specifying the ALIBABA_CLOUD_ROLE_ARN environment variable.
roleArn: '<RoleArn>',
// Specify the ARN of the OIDC IdP by specifying the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable.
oidcProviderArn: '<OidcProviderArn>',
// Specify the path of the OIDC token file by specifying the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable.
oidcTokenFilePath: '<OidcTokenFilePath>',
// Specify the role session name by specifying the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
roleSessionName: '<RoleSessionName>',
// Optional. Specify limited permissions for the RAM role. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}.
// policy: "<Policy>",
// Specify the validity period of the session.
roleSessionExpiration: 3600
});
const credentialClient = new Credential.default(credentialsConfig);
const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
const client = new OSS({
accessKeyId,
accessKeySecret,
stsToken: securityToken,
refreshSTSTokenInterval: 0, // Specify that Credential manages the update of the AccessKey ID, AccessKey secret, and security token.
refreshSTSToken: async () => {
const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential();
return {
accessKeyId,
accessKeySecret,
stsToken: securityToken,
};
}
});
const buckets = await client.listBuckets();
console.log(buckets);
Método 6: Usar CredentialsURI
Se sua aplicação precisar obter credenciais da Alibaba Cloud de um sistema externo para gerenciamento flexível e acesso sem chaves, use o CredentialsURI para inicializar um provedor de credenciais. Este método usa um token de segurança do STS para configurar as credenciais de acesso. A ferramenta Credentials recupera o token usando a URI especificada para inicializar uma instância do OSSClient no lado do cliente. Essa abordagem minimiza os riscos associados ao gerenciamento manual de pares de AccessKey ou tokens de segurança. O serviço de backend que fornece a resposta do CredentialsURI deve atualizar automaticamente o token de segurança para garantir que sua aplicação sempre tenha credenciais válidas.
-
Para que a ferramenta Credentials analise e use corretamente um token de segurança, a URI deve obedecer ao seguinte protocolo de resposta:
Código de status da resposta: 200
-
Estrutura do corpo da resposta:
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
-
Configure o CredentialsURI como credencial de acesso para inicializar o cliente.
const OSS = require("ali-oss"); const Credential = require("@alicloud/credentials"); // Use the URI of the credential to initialize the Credentials client. const credentialsConfig = new Credential.Config({ // Specify the credential type. type: "credentials_uri", // Specify the URI of the credential in the http://local_or_remote_uri/ format by specifying the ALIBABA_CLOUD_CREDENTIALS_URI environment variable. credentialsURI: '<CredentialsUri>' }); const credentialClient = new Credential.default(credentialsConfig); const credential = await credentialClient.getCredential(); // Initialize the OSSClient instance. const client = new OSS({ accessKeyId: credential.accessKeyId, accessKeySecret: credential.accessKeySecret, stsToken: credential.securityToken, refreshSTSTokenInterval: 0, // Specify that Credential manages the update of the AccessKey ID, AccessKey secret, and security token. refreshSTSToken: async () => { const { accessKeyId, accessKeySecret, securityToken } = await credentialClient.getCredential(); return { accessKeyId, accessKeySecret, stsToken: securityToken, }; } }); // listBuckets const buckets = await client.listBuckets(); console.log(buckets);
Próximos passos
Após inicializar o provedor de credenciais, use-o para criar uma instância do OSSClient. Para mais informações, consulte Inicializar o OSS SDK for Node.js.