Java V1.0 için Alibaba Cloud SDK, OpenAPI işlemlerini çağırmak için geçerli bir erişim kimlik bilgisi gerektirir. SDK, güvenli geliştirme için birden çok kimlik bilgisi yöntemini destekler.
Önkoşullar
aliyun-java-sdk-core paketinin sürümü 4.7.3 veya üzeri olmalıdır.
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.7.3</version>
</dependency>
Yöntem 1: AccessKey
Sızan bir Alibaba Cloud hesap AccessKey'i, hesap altındaki tüm kaynakları tehlikeye atar. Bunun yerine Resource Access Management (RAM) kullanıcısının AccessKey'ini kullanın. AccessKey oluşturma.
Çalışma zamanı ortamınızda
ALIBABA_CLOUD_ACCESS_KEY_IDveALIBABA_CLOUD_ACCESS_KEY_SECRETortam değişkenlerini ayarlayın. Linux, macOS ve Windows'ta ortam değişkenlerini yapılandırma.
-
DefaultProfile kullanarak bir AccessKey yapılandırarak istemciyi başlatın.
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. } } -
BasicCredentials kullanarak bir AccessKey yapılandırarak istemciyi başlatın.
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. } }
Yöntem 2: STS belirteci
İstemciyi geçici bir erişim kimlik bilgisi (STS belirteci) ile başlatın.
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.
}
}
Yöntem 3: RAM rolü ARN'si
Bir STS belirteci almak için Security Token Service (STS) hizmetinin AssumeRole işlemini çağırın.
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.
}
}
Yöntem 4: Örnek RAM rolü
SDK, bir Elastic Compute Service (ECS) veya Elastic Container Instance (ECI) örneğine eklenen bir örnek RAM rolünden kimlik bilgilerini alabilir; bu sayede statik AccessKey'lere gerek kalmaz. SDK, eklenen RAM rolünü otomatik olarak algılar ve meta veri sunucusundan bir STS belirteci alır.
Kimlik Bilgileri aracı varsayılan olarak IMDSv2 (güvenlik sertleştirme modu) kullanır. IMDSv2 başarısız olursa, disableIMDSv1 ayarı geri dönüş davranışını kontrol eder:
false(varsayılan): Kimlik bilgilerini almak için normal moda (IMDSv1) geri döner.true: IMDSv1'e geri dönmek yerine bir özel durum oluşturur.
IMDSv2 desteği, örnek yapılandırmanıza bağlıdır.
ECS örneğinin bir RAM rolü ile yapılandırıldığından emin olun.
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.
}
}
Yöntem 5: OIDC RAM rolü
Container Service for Kubernetes (ACK) içinde, Service Accounts için RAM Rolleri (RRSA) özelliği RAM rollerini tek tek pod'larla ilişkilendirir. Her uygulama farklı bir RAM rolü üstlenir ve uzun süreli AccessKey'leri ortadan kaldırarak Alibaba Cloud kaynaklarına erişmek için geçici kimlik bilgilerini kullanır.
ACK, her pod için bir OIDC belirteç dosyası bağlar ve yapılandırmayı ortam değişkenleri olarak enjekte eder. SDK, OIDC belirtecini bir STS belirteciyle değiştirmek için STS hizmetinin AssumeRoleWithOIDC işlemini çağırır. RRSA kullanarak pod izinlerini yalıtma.
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.
}
}
Yöntem 6: Varsayılan kimlik bilgisi sağlayıcı zinciri
Açıkça bir kimlik bilgisi sağlanmazsa, SDK varsayılan kimlik bilgisi sağlayıcı zincirini kullanır.
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.
}
}
Varsayılan kimlik bilgisi sağlayıcı zinciri, kullanılabilir kimlik bilgilerini aşağıdaki sırayla arar:
1. Sistem özellikleri
alibabacloud.accessKeyId ve alibabacloud.accessKeyIdSecret sistem özellikleri tanımlanmış ve boş değilse, SDK bunları kullanarak varsayılan kimlik bilgilerini oluşturur.
2. Ortam değişkenleri
ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenleri tanımlanmış ve boş değilse, SDK bunları varsayılan kimlik bilgileri olarak kullanır.
3. OIDC RAM rolü
SDK şu ortam değişkenlerini kontrol eder:
ALIBABA_CLOUD_ROLE_ARN: RAM rolünün ARN'si.
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: OIDC sağlayıcısının ARN'si.
ALIBABA_CLOUD_OIDC_TOKEN_FILE: OIDC belirteç dosyasının yolu.
Bu üç ortam değişkeninin tümü ayarlanmışsa, SDK bir STS belirteci almak için STS hizmetinin AssumeRoleWithOIDC işlemini çağırır ve bunu varsayılan kimlik bilgisi olarak kullanır.
4. Yapılandırma dosyası
Hiçbir kimlik bilgisi bulunamazsa, sağlayıcı zinciri paylaşılan kimlik bilgileri dosyası olan config.json dosyasını varsayılan konumundan yüklemeyi dener ve dosyada belirtilen kimlik bilgisini kullanır.
Linux/macOS:
~/.aliyun/config.jsonWindows:
C:\Users\USER_NAME\.aliyun\config.json
Bir kimlik bilgisini bu şekilde yapılandırmak için Alibaba Cloud CLI aracını kullanabilir veya uygun yolda manuel olarak bir config.json dosyası oluşturabilirsiniz. Aşağıdaki örnek içerik formatını göstermektedir:
{
"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
}
]
}
|
Parametre |
Açıklama |
|
current |
İlgili kimlik bilgisi yapılandırmasını almak için kimlik bilgisi adını belirtin. Kimlik bilgisi adı, |
|
profiles |
Bir kimlik bilgisi yapılandırmaları koleksiyonu içerir.
|
5. ECS örnek RAM rolü
SDK, bir örnek RAM rolü adını belirten ALIBABA_CLOUD_ECS_METADATA ortam değişkenini kontrol eder. Ayarlanmışsa, SDK ECS meta veri sunucusundan bir STS belirteci alır.
6. Kimlik Bilgileri URI'si
SDK ALIBABA_CLOUD_CREDENTIALS_URI ortam değişkenini kontrol eder. Ayarlanmışsa, SDK belirtilen URI'den geçici bir kimlik bilgisi ister.