All Products
Search
Document Center

Alibaba Cloud SDK:Mengelola kredensial akses

Last Updated:Sep 10, 2026

Alibaba Cloud SDK for Java V1.0 memerlukan kredensial akses yang valid untuk memanggil operasi OpenAPI. SDK ini mendukung berbagai metode autentikasi guna memastikan pengembangan yang aman.

Prasyarat

Versi paket aliyun-java-sdk-core harus 4.7.3 atau lebih baru.

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.7.3</version>
</dependency>

Metode 1: AccessKey

Penting
  • Inisialisasi klien dengan mengonfigurasi AccessKey menggunakan 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>",
                    // Ambil ID AccessKey Pengguna RAM dari variabel lingkungan.
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // Ambil rahasia AccessKey Pengguna RAM dari variabel lingkungan.
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            IAcsClient client = new DefaultAcsClient(profile);
            // Logika pemanggilan API dihilangkan.
        }
    }
  • Inisialisasi klien dengan mengonfigurasi AccessKey menggunakan 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(
                    // Ambil ID AccessKey Pengguna RAM dari variabel lingkungan.
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // Ambil rahasia AccessKey Pengguna RAM dari variabel lingkungan.
                    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
            );
            DefaultProfile profile = DefaultProfile.getProfile("<REGION_ID>");
            IAcsClient client = new DefaultAcsClient(profile, basicCredentials);
            // Logika pemanggilan API dihilangkan.
        }
    }

Metode 2: Token STS

Inisialisasi klien dengan kredensial akses sementara (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>",
                // Ambil ID AccessKey Pengguna RAM dari variabel lingkungan.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Ambil rahasia AccessKey Pengguna RAM dari variabel lingkungan.
                System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                // Token STS.
                System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"));
        IAcsClient client = new DefaultAcsClient(profile);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 3: ARN Peran RAM

Panggil operasi AssumeRole Layanan Token Keamanan (STS) untuk mendapatkan 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>");
        // Gunakan ARN peran RAM.
        STSAssumeRoleSessionCredentialsProvider stsProvider = STSAssumeRoleSessionCredentialsProvider
                .builder()
                // Wajib. Ambil ID AccessKey Pengguna RAM dari variabel lingkungan.
                .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // Wajib. Ambil rahasia AccessKey Pengguna RAM dari variabel lingkungan.
                .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM. Wajib kecuali variabel lingkungan ALIBABA_CLOUD_ROLE_ARN telah ditetapkan.
                .roleArn("<ROLE_ARN>")
                // Nama sesi kustom. Opsional. Juga dapat ditetapkan melalui variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                .roleSessionName("<ROLE_SESSION_NAME>")
                // Kebijakan kustom. Opsional. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .policy("<POLICY>")
                // ID eksternal untuk mencegah masalah confused deputy. Opsional.
                .externalId("<<EXTERNAL_ID>>")
                // Durasi kredensial akses dalam detik. Opsional. Nilai default 3600 dan tidak boleh melebihi 43200 (12 jam).
                .durationSeconds(3600)
                // ID wilayah untuk pemanggilan API AssumeRole. Opsional.
                .stsRegionId("<STS_REGION_ID>") 
                .build();
        DefaultAcsClient client = new DefaultAcsClient(profile, stsProvider);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 4: Peran RAM Instans

SDK dapat mengambil kredensial dari peran RAM instans yang ditautkan ke instans Elastic Compute Service (ECS) atau Elastic Container Instance (ECI), sehingga menghilangkan kebutuhan akan AccessKey statis. SDK secara otomatis mendeteksi peran RAM yang terpasang dan memperoleh token STS dari server metadata.

Alat Credentials menggunakan IMDSv2 (mode penguatan keamanan) secara default. Jika IMDSv2 gagal, pengaturan disableIMDSv1 mengontrol perilaku fallback:

  1. false (default): fallback ke mode normal (IMDSv1) untuk mengambil kredensial.

  2. true: melempar exception alih-alih fallback ke IMDSv1.

Dukungan IMDSv2 bergantung pada konfigurasi instans Anda.

Penting

Pastikan instans ECS telah dikonfigurasi dengan peran 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>");
        // Gunakan peran RAM instans.
        InstanceProfileCredentialsProvider provider = InstanceProfileCredentialsProvider
                .builder()
                // Nama peran RAM yang disambungkan ke instans.
                .roleName("<ROLE_NAME>")
                //.disableIMDSv1(false)
                .build();
        DefaultAcsClient client = new DefaultAcsClient(profile, provider);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 5: Peran RAM OIDC

Di Container Service for Kubernetes (ACK), fitur RAM Roles for Service Accounts (RRSA) mengaitkan peran RAM dengan Pod individual. Setiap aplikasi mengasumsikan peran RAM yang berbeda dan menggunakan kredensial sementara untuk mengakses sumber daya Alibaba Cloud, sehingga menghilangkan kebutuhan akan AccessKey jangka panjang.

ACK memasang file token OIDC untuk setiap Pod dan menyuntikkan konfigurasi sebagai variabel lingkungan. SDK memanggil operasi AssumeRoleWithOIDC STS untuk menukar token OIDC menjadi token STS. Isolasi izin Pod menggunakan 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) {
        // Gunakan peran RAM berbasis OIDC.
        OIDCCredentialsProvider provider = OIDCCredentialsProvider
                .builder()
                // ARN penyedia OIDC. Wajib kecuali variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN telah ditetapkan.
                .oidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // Jalur file token OIDC. Wajib kecuali variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE telah ditetapkan.
                .oidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // ARN peran RAM. Wajib kecuali variabel lingkungan ALIBABA_CLOUD_ROLE_ARN telah ditetapkan.
                .roleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // Nama sesi kustom. Opsional.
                .roleSessionName("<ROLE_SESSION_NAME>")
                // Kebijakan kustom. Opsional. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .policy("<POLICY>")
                // Durasi kredensial akses dalam detik. Opsional. Nilai default 3600 dan tidak boleh melebihi 43200 (12 jam).
                .durationSeconds(3600)
                // ID wilayah STS. Opsional.
                .stsRegionId("<REGION_ID>")
                .build();
        DefaultProfile profile = DefaultProfile.getProfile(
                // Tentukan ID wilayah klien.
                "<REGION_ID>");
        IAcsClient client = new DefaultAcsClient(profile, provider);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 6: Rantai penyedia kredensial default

Jika tidak ada kredensial yang diberikan secara eksplisit, SDK akan menggunakan rantai penyedia kredensial default.

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;

public class Test {
    public static void main(String[] args) throws ClientException {
        // Gunakan rantai penyedia kredensial default.
        IAcsClient client = new DefaultAcsClient("<REGION_ID>");
        // Logika pemanggilan API dihilangkan.
    }
}

Rantai penyedia kredensial default mencari kredensial yang tersedia dalam urutan berikut:

1. Properti sistem

Jika properti sistem alibabacloud.accessKeyId dan alibabacloud.accessKeyIdSecret telah didefinisikan dan tidak kosong, SDK akan menggunakannya untuk membuat kredensial default.

2. Variabel lingkungan

Jika variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah didefinisikan dan tidak kosong, SDK akan menggunakannya sebagai kredensial default.

3. Peran RAM OIDC

SDK memeriksa variabel lingkungan berikut:

ALIBABA_CLOUD_ROLE_ARN: ARN peran RAM.

ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN penyedia OIDC.

ALIBABA_CLOUD_OIDC_TOKEN_FILE: Jalur file token OIDC.

Jika ketiga variabel lingkungan tersebut telah ditetapkan, SDK akan memanggil operasi AssumeRoleWithOIDC STS untuk memperoleh token STS, yang kemudian digunakan sebagai kredensial default.

4. Berkas konfigurasi

Jika belum ditemukan kredensial, rantai penyedia akan mencoba memuat berkas kredensial bersama, config.json, dari lokasi defaultnya dan menggunakan kredensial yang ditentukan dalam berkas tersebut.

  • Linux/macOS: ~/.aliyun/config.json

  • Windows: C:\Users\USER_NAME\.aliyun\config.json

Untuk mengonfigurasi kredensial dengan cara ini, Anda dapat menggunakan Alibaba Cloud CLI atau membuat berkas config.json secara manual di jalur yang sesuai. Contoh berikut menunjukkan format isinya:

{
  "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
    }
  ]
}

Parameter

Deskripsi

current

Tentukan nama kredensial untuk mengambil konfigurasi kredensial yang sesuai. Nama kredensial adalah nilai parameter name dalam profiles. Secara default, sistem memberikan prioritas pada nama kredensial yang ditentukan oleh variabel lingkungan ALIBABA_CLOUD_PROFILE . Jika variabel lingkungan ini tidak dikonfigurasi, sistem menggunakan nama kredensial yang ditentukan oleh current.

profiles

Berisi kumpulan konfigurasi kredensial. Parameter mode menentukan jenis kredensial:

  • AK: Menggunakan AccessKey Pengguna RAM sebagai kredensial.

  • StsToken: Menggunakan token STS sebagai kredensial.

  • RamRoleArn: Mengasumsikan peran RAM dengan menggunakan kredensial Pengguna RAM untuk memperoleh kredensial sementara.

  • EcsRamRole: Memperoleh kredensial dari metadata instans.

  • OIDC: Memperoleh kredensial dengan menggunakan ARN penyedia OIDC, token OIDC, dan ARN peran RAM.

  • ChainableRamRoleArn: Menggunakan role chaining untuk memperoleh kredensial baru, menggunakan kredensial awal dari profiles yang ditentukan oleh parameter source_profile.

5. Peran RAM instans ECS

SDK memeriksa variabel lingkungan ALIBABA_CLOUD_ECS_METADATA, yang menentukan nama peran RAM instans. Jika ditetapkan, SDK akan mengambil token STS dari server metadata ECS.

6. URI Kredensial

SDK memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika ditetapkan, SDK akan meminta kredensial sementara dari URI yang ditentukan.