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
Kebocoran AccessKey Akun Alibaba Cloud dapat membahayakan seluruh sumber daya di bawah akun tersebut. Sebaiknya gunakan AccessKey milik Pengguna Resource Access Management (RAM). Buat AccessKey.
Tetapkan variabel lingkungan
ALIBABA_CLOUD_ACCESS_KEY_IDdanALIBABA_CLOUD_ACCESS_KEY_SECRETdi lingkungan runtime Anda. Konfigurasi variabel lingkungan pada Linux, macOS, dan Windows.
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:
false(default): fallback ke mode normal (IMDSv1) untuk mengambil kredensial.true: melempar exception alih-alih fallback ke IMDSv1.
Dukungan IMDSv2 bergantung pada konfigurasi instans Anda.
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 |
|
profiles |
Berisi kumpulan konfigurasi kredensial. Parameter
|
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.