O Alibaba Cloud SDK for Java V1.0 exige uma credencial de acesso válida para chamar operações da OpenAPI. O SDK oferece suporte a vários métodos de credenciais para garantir um desenvolvimento seguro.
Pré-requisitos
A versão do pacote aliyun-java-sdk-core deve ser 4.7.3 ou posterior.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.7.3</version>
</dependency>
Método 1: AccessKey
O vazamento de um AccessKey da conta Alibaba Cloud compromete todos os recursos associados a ela. Use o AccessKey de um usuário do Resource Access Management (RAM). Criar um AccessKey.
Defina as variáveis de ambiente
ALIBABA_CLOUD_ACCESS_KEY_IDeALIBABA_CLOUD_ACCESS_KEY_SECRETno ambiente de execução. Configurar variáveis de ambiente no Linux, macOS e Windows.
-
Inicialize o cliente configurando um AccessKey com DefaultProfile.
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.profile.DefaultProfile; public class Sample { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile( "<REGION_ID>", // Retrieve the AccessKey ID of the RAM user from an environment variable. System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // Retrieve the AccessKey secret of the RAM user from an environment variable. System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")); IAcsClient client = new DefaultAcsClient(profile); // The API call logic is omitted. } } -
Inicialize o cliente configurando um AccessKey com BasicCredentials.
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.auth.BasicCredentials; import com.aliyuncs.profile.DefaultProfile; public class Sample { public static void main(String[] args) { BasicCredentials basicCredentials = new BasicCredentials( // Retrieve the AccessKey ID of the RAM user from an environment variable. System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), // Retrieve the AccessKey secret of the RAM user from an environment variable. System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") ); DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>"); IAcsClient client = new DefaultAcsClient(profile, basicCredentials); // The API call logic is omitted. } }
Método 2: Token STS
Inicialize o cliente com uma credencial de acesso temporária (token STS).
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;
public class Test {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile(
"<REGION_ID>",
// Retrieve the AccessKey ID of the RAM user from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Retrieve the AccessKey secret of the RAM user from an environment variable.
System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
// The STS token.
System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
IAcsClient client = new DefaultAcsClient(profile);
// The API call logic is omitted.
}
}
Método 3: ARN de função RAM
Chame a operação AssumeRole do Security Token Service (STS) para obter um token STS.
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.STSAssumeRoleSessionCredentialsProvider;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
// Use a RAM role ARN.
STSAssumeRoleSessionCredentialsProvider stsProvider = STSAssumeRoleSessionCredentialsProvider
.builder()
// Required. Retrieve the AccessKey ID of the RAM user from an environment variable.
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// Required. Retrieve the AccessKey secret of the RAM user from an environment variable.
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
// The Alibaba Cloud Resource Name (ARN) of the RAM role. Required unless the ALIBABA_CLOUD_ROLE_ARN environment variable is set.
.roleArn("<ROLE_ARN>")
// A custom session name. Optional. Can also be set by using the ALIBABA_CLOUD_ROLE_SESSION_NAME environment variable.
.roleSessionName("<ROLE_SESSION_NAME>")
// A custom policy. Optional. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
.policy("<POLICY>")
// An external ID to prevent the confused deputy problem. Optional.
.externalId("<<EXTERNAL_ID>>")
// The duration of the access credential in seconds. Optional. Defaults to 3600 and must not exceed 43200 (12 hours).
.durationSeconds(3600)
// The region ID for the AssumeRole API call. Optional.
.stsRegionId("<STS_REGION_ID>")
.build();
DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
// The API call logic is omitted.
}
}
Método 4: Função RAM de instância
O SDK recupera credenciais de uma função RAM de instância anexada a uma instância do Elastic Compute Service (ECS) ou Elastic Container Instance (ECI), eliminando a necessidade de AccessKeys estáticos. O SDK detecta automaticamente a função RAM anexada e obtém um token STS do servidor de metadados.
A ferramenta Credentials usa IMDSv2 (modo de segurança reforçada) por padrão. Se o IMDSv2 falhar, a configuração disableIMDSv1 controla o comportamento de fallback:
false(padrão): retorna ao modo normal (IMDSv1) para recuperar credenciais.true: lança uma exceção em vez de retornar ao IMDSv1.
O suporte ao IMDSv2 depende da configuração da instância.
Certifique-se de que a instância ECS esteja configurada com uma função RAM.
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.InstanceProfileCredentialsProvider;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
// Use an instance RAM role.
InstanceProfileCredentialsProvider provider = InstanceProfileCredentialsProvider
.builder()
// The name of the RAM role attached to the instance.
.roleName("<ROLE_NAME>")
//.disableIMDSv1(false)
.build();
DefaultAcsClient client = new DefaultAcsClient(profile, provider);
// The API call logic is omitted.
}
}
Método 5: Função RAM OIDC
No Container Service for Kubernetes (ACK), o recurso RAM Roles for Service Accounts (RRSA) associa funções RAM a pods individuais. Cada aplicação assume uma função RAM diferente e usa credenciais temporárias para acessar recursos da Alibaba Cloud, eliminando AccessKeys de longo prazo.
O ACK monta um arquivo de token OIDC para cada pod e injeta a configuração como variáveis de ambiente. O SDK chama a operação AssumeRoleWithOIDC do STS para trocar o token OIDC por um token STS. Isolar permissões de pod usando RRSA.
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.auth.OIDCCredentialsProvider;
import com.aliyuncs.profile.DefaultProfile;
public class Sample {
public static void main(String[] args) {
// Use an OIDC-based RAM role.
OIDCCredentialsProvider provider = OIDCCredentialsProvider
.builder()
// The ARN of the OIDC provider. Required unless the ALIBABA_CLOUD_OIDC_PROVIDER_ARN environment variable is set.
.oidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
// The path of the OIDC token file. Required unless the ALIBABA_CLOUD_OIDC_TOKEN_FILE environment variable is set.
.oidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
// The ARN of the RAM role. Required unless the ALIBABA_CLOUD_ROLE_ARN environment variable is set.
.roleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
// A custom session name. Optional.
.roleSessionName("<ROLE_SESSION_NAME>")
// A custom policy. Optional. Example: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
.policy("<POLICY>")
// The duration of the access credential in seconds. Optional. Defaults to 3600 and must not exceed 43200 (12 hours).
.durationSeconds(3600)
// The region ID of STS. Optional.
.stsRegionId("<REGION_ID>")
.build();
DefaultProfile profile = DefaultProfile.getProfile(
// Specify the region ID of the client.
"<REGION_ID>");
IAcsClient client = new DefaultAcsClient(profile, provider);
// The API call logic is omitted.
}
}
Método 6: Token Bearer
Este método tem suporte apenas no Cloud Call Center (CCC).
import com.aliyuncs.auth.BearerTokenCredentials;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.DefaultAcsClient;
public class BearerToken {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
// Set the access credential by using BearerTokenCredentials.
BearerTokenCredentials bearerTokenCredential = new BearerTokenCredentials("<BEARER_TOKEN>");
DefaultAcsClient client = new DefaultAcsClient(profile, bearerTokenCredential);
// The API call logic is omitted.
}
}
Método 7: Cadeia de provedores de credenciais padrão
Se nenhuma credencial for fornecida explicitamente, o SDK usará a cadeia de provedores de credenciais padrão.
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
public class Test {
public static void main(String[] args) throws ClientException {
// Use the default credential provider chain.
IAcsClient client = new DefaultAcsClient("<REGION_ID>");
// The API call logic is omitted.
}
}
A cadeia de provedores de credenciais padrão busca credenciais disponíveis na seguinte ordem:
1. Propriedades do sistema
Se as propriedades do sistema alibabacloud.accessKeyId e alibabacloud.accessKeyIdSecret estiverem definidas e não vazias, o SDK as usará para criar credenciais padrão.
2. Variáveis de ambiente
Caso as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET estejam definidas e preenchidas, o SDK as usará como credenciais padrão.
3. Função RAM OIDC
O SDK verifica as seguintes variáveis de ambiente:
ALIBABA_CLOUD_ROLE_ARN: O ARN da função RAM.
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: O ARN do provedor OIDC.
ALIBABA_CLOUD_OIDC_TOKEN_FILE: O caminho do arquivo de token OIDC.
Se todas as três variáveis de ambiente estiverem definidas, o SDK chama a operação AssumeRoleWithOIDC do STS para obter um token STS, usado como credencial padrão.
4. Arquivo de configuração
Quando nenhuma credencial for encontrada, a cadeia de provedores tentará carregar o arquivo de credenciais compartilhadas, config.json, do local padrão e usará a credencial especificada no arquivo.
Linux/macOS:
~/.aliyun/config.jsonWindows:
C:\Users\USER_NAME\.aliyun\config.json
Para configurar uma credencial dessa forma, use a Alibaba Cloud CLI ou crie manualmente um arquivo config.json no caminho apropriado. O exemplo a seguir mostra o formato do conteúdo:
{
"current": "<PROFILE_NAME>",
"profiles": [
{
"name": "<PROFILE_NAME>",
"mode": "AK",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"
},
{
"name": "<PROFILE_NAME1>",
"mode": "StsToken",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"sts_token": "<SECURITY_TOKEN>"
},
{
"name":"<PROFILE_NAME2>",
"mode":"RamRoleArn",
"access_key_id":"<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret":"<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"ram_role_arn":"<ROLE_ARN>",
"ram_session_name":"<ROLE_SESSION_NAME>",
"expired_seconds":3600
},
{
"name":"<PROFILE_NAME3>",
"mode":"EcsRamRole",
"ram_role_name":"<RAM_ROLE_ARN>"
},
{
"name":"<PROFILE_NAME4>",
"mode":"OIDC",
"oidc_provider_arn":"<OIDC_PROVIDER_ARN>",
"oidc_token_file":"<OIDC_TOKEN_FILE>",
"ram_role_arn":"<ROLE_ARN>",
"ram_session_name":"<ROLE_SESSION_NAME>",
"expired_seconds":3600
},
{
"name":"<PROFILE_NAME5>",
"mode":"ChainableRamRoleArn",
"source_profile":"<PROFILE_NAME>",
"ram_role_arn":"<ROLE_ARN>",
"ram_session_name":"<ROLE_SESSION_NAME>",
"expired_seconds":3600
}
]
}
|
Parâmetro |
Descrição |
|
current |
Especifique o nome da credencial para recuperar a configuração correspondente. O nome da credencial corresponde ao valor do parâmetro |
|
profiles |
Contém uma coleção de configurações de credenciais. O parâmetro
|
5. Função RAM de instância ECS
O SDK verifica a variável de ambiente ALIBABA_CLOUD_ECS_METADATA, que especifica o nome de uma função RAM de instância. Se definida, o SDK recupera um token STS do servidor de metadados do ECS.
6. URI de credenciais
O SDK verifica a variável de ambiente ALIBABA_CLOUD_CREDENTIALS_URI. Quando configurada, o SDK solicita uma credencial temporária na URI especificada.