All Products
Search
Document Center

Alibaba Cloud SDK:Kelola kredensial akses

Last Updated:Apr 11, 2026

Untuk memanggil operasi OpenAPI dengan Alibaba Cloud SDK for Java, Anda harus mengonfigurasi kredensial akses yang valid. SDK V1.0 mendukung beberapa metode kredensial guna membantu Anda mengembangkan aplikasi secara aman dan efisien.

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
  • Kebocoran AccessKey akun Alibaba Cloud Anda akan membahayakan seluruh resource di bawah akun tersebut. Untuk keamanan yang lebih baik, gunakan AccessKey milik pengguna Resource Access Management (RAM). Untuk informasi selengkapnya, lihat Buat AccessKey.

  • Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah disetel di lingkungan runtime Anda. Untuk informasi selengkapnya, lihat Konfigurasi variabel lingkungan pada Linux, macOS, dan Windows.

  • Inisialisasi client 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 client 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 client dengan menggunakan kredensial akses sementara, juga dikenal sebagai 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 disetel.
                .roleArn("<ROLE_ARN>")
                // Nama sesi kustom. Opsional. Juga dapat disetel 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

Untuk meningkatkan keamanan dan menyederhanakan penerapan, Alibaba Cloud SDK dapat mengambil kredensial dari peran RAM instans. Dengan metode ini, aplikasi yang diterapkan pada Elastic Compute Service (ECS) atau Elastic Container Instance (ECI) dapat memanggil API Alibaba Cloud tanpa perlu mengonfigurasi AccessKey statis. Baik instans ECS maupun ECI mendukung penyambungan peran RAM instans. Saat Anda menggunakan SDK pada sebuah instans, SDK secara otomatis mendeteksi peran RAM yang terpasang dan memperoleh token STS dari server metadata untuk menginisialisasi client.

Server metadata instans mendukung dua mode akses: mode penguatan keamanan dan mode normal. Alat Credentials menggunakan mode penguatan keamanan (IMDSv2) secara default untuk memperoleh kredensial akses. Jika terjadi pengecualian dalam mode penguatan keamanan, Anda dapat mengatur disableIMDSv1 untuk menjalankan logika penanganan pengecualian yang berbeda:

  1. Saat nilainya false (default), mode normal digunakan untuk melanjutkan pengambilan kredensial akses.

  2. Saat nilainya true, upaya memperoleh kredensial akses tanpa menggunakan mode penguatan keamanan akan melemparkan pengecualian.

Dukungan server Anda terhadap IMDSv2 bergantung pada konfigurasinya.

Catatan
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 terpasang pada instans.
                .roleName("<ROLE_NAME>")
                //.disableIMDSv1(false)
                .build();
        DefaultAcsClient client = new DefaultAcsClient(profile, provider);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 5: Peran RAM berbasis OIDC

Pada Container Service for Kubernetes (ACK), setelah menetapkan peran RAM ke node pekerja, Anda dapat menggunakan fitur RAM Roles for Service Accounts (RRSA) untuk mengaitkan peran RAM dengan Pod. Hal ini memungkinkan setiap aplikasi mengasumsikan peran RAM yang berbeda dan menggunakan kredensial sementara yang diperoleh untuk mengakses resource Alibaba Cloud. Pendekatan ini menerapkan prinsip hak istimewa minimal dan menghilangkan kebutuhan akan AccessKey jangka panjang, sehingga mengurangi risiko kebocoran kredensial.

Kluster ACK secara otomatis membuat dan memasang file token OIDC akun layanan untuk setiap Pod serta menyuntikkan detail konfigurasi sebagai variabel lingkungan. SDK membaca variabel lingkungan tersebut dan memanggil operasi AssumeRoleWithOIDC - Dapatkan kredensial identitas sementara dari peran yang diasumsikan selama SSO peran berbasis OIDC STS untuk menukar token OIDC menjadi token STS. Untuk informasi selengkapnya, lihat Isolasi izin Pod menggunakan RAM Roles for Service Accounts (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 disetel.
                .oidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // Jalur file token OIDC. Wajib kecuali variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE telah disetel.
                .oidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // ARN peran RAM. Wajib kecuali variabel lingkungan ALIBABA_CLOUD_ROLE_ARN telah disetel.
                .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 client.
                "<REGION_ID>");
        IAcsClient client = new DefaultAcsClient(profile, provider);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 6: Token Bearer

Catatan

Metode ini hanya didukung oleh 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>");
        // Setel kredensial akses menggunakan BearerTokenCredentials.
        BearerTokenCredentials bearerTokenCredential = new BearerTokenCredentials("<BEARER_TOKEN>");
        DefaultAcsClient client = new DefaultAcsClient(profile, bearerTokenCredential);
        // Logika pemanggilan API dihilangkan.
    }
}

Metode 7: Rantai penyedia kredensial default

Jika Anda menginisialisasi client tanpa secara eksplisit memberikan kredensial, 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

Program mencari kredensial lingkungan dalam properti sistem. Jika properti sistem alibabacloud.accessKeyId dan alibabacloud.accessKeyIdSecret telah didefinisikan dan tidak kosong, program 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, program akan menggunakannya untuk membuat kredensial default.

3. Peran RAM OIDC

Jika tidak ditemukan kredensial dengan prioritas lebih tinggi, 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 disetel, SDK memanggil operasi AssumeRoleWithOIDC STS untuk memperoleh token STS, yang kemudian digunakan sebagai kredensial default.

4. Berkas konfigurasi

5. Peran RAM instans ECS

Jika tidak ditemukan kredensial dengan prioritas lebih tinggi, SDK memeriksa variabel lingkungan ALIBABA_CLOUD_ECS_METADATA, yang menentukan nama peran RAM instans. Jika variabel ini disetel, SDK mengambil token STS dari server metadata ECS untuk digunakan sebagai kredensial default.

6. URI Kredensial

Jika tidak ditemukan kredensial dengan prioritas lebih tinggi, SDK memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika variabel ini disetel, SDK mengirim permintaan ke URI yang ditentukan untuk mengambil kredensial akses sementara yang akan digunakan sebagai kredensial default.