Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud SDK:Erişim kimlik bilgilerini yönetme

Son Güncelleme:Oct 07, 2026

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

Önemli
  • 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:

  1. false (varsayılan): Kimlik bilgilerini almak için normal moda (IMDSv1) geri döner.

  2. true: IMDSv1'e geri dönmek yerine bir özel durum oluşturur.

IMDSv2 desteği, örnek yapılandırmanıza bağlıdır.

Önemli

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.json

  • Windows: 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 içindeki name parametresinin değeridir. Varsayılan olarak sistem, ALIBABA_CLOUD_PROFILE ortam değişkeni tarafından belirtilen kimlik bilgisi adına öncelik verir. Bu ortam değişkeni yapılandırılmamışsa, sistem current tarafından belirtilen kimlik bilgisi adını kullanır.

profiles

Bir kimlik bilgisi yapılandırmaları koleksiyonu içerir. mode parametresi kimlik bilgisi türünü belirtir:

  • AK: Bir RAM kullanıcısının AccessKey'ini kimlik bilgisi olarak kullanır.

  • StsToken: Bir STS belirtecini kimlik bilgisi olarak kullanır.

  • RamRoleArn: Geçici bir kimlik bilgisi elde etmek için bir RAM kullanıcısının kimlik bilgilerini kullanarak bir RAM rolü üstlenir.

  • EcsRamRole: Örnek meta verilerinden bir kimlik bilgisi alır.

  • OIDC: Bir OIDC sağlayıcı ARN'si, bir OIDC belirteci ve bir RAM rolü ARN'si kullanarak bir kimlik bilgisi alır.

  • ChainableRamRoleArn: source_profile parametresi tarafından belirtilen profiles içindeki ilk kimlik bilgisini kullanarak yeni bir kimlik bilgisi elde etmek için rol zincirleme yöntemini kullanır.

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.