Penyedia Alibaba Cloud Terraform mendukung berbagai metode otentikasi. Metode yang tepat tergantung pada lingkungan runtime dan skenario Terraform Anda.
Prioritas metode otentikasi
Saat mengonfigurasi penyedia Alibaba Cloud, biasanya hanya satu metode otentikasi yang digunakan. Penyedia Terraform mencari kredensial identitas dalam urutan berikut dan berhenti begitu menemukan kredensial yang valid:
Konfigurasi statis: Penyedia pertama kali membaca parameter access_key, secret_key, security_token, atau ecs_role_name jika secara eksplisit ditentukan dalam blok penyedia.
Variabel lingkungan: Jika tidak ditemukan konfigurasi statis, penyedia membaca variabel lingkungan sistem, seperti ALICLOUD_ACCESS_KEY dan ALICLOUD_SECRET_KEY.
Berkas konfigurasi bersama:
Konfigurasi statis: Penyedia membaca informasi otentikasi untuk profil yang ditentukan dari berkas konfigurasi bersama lokal. Informasi ini dapat mencakup pasangan AccessKey, ram_role_arn, ram_role_name, atau sts_token.
Konfigurasi lanjutan: Jika berkas konfigurasi bersama tidak berisi konfigurasi statis tetapi dikonfigurasi dengan CloudSSO, OAuth, program eksternal, atau ChainableRamRoleArn, penyedia memanggil plugin yang sesuai untuk memperoleh kredensial sementara dari Layanan Token Keamanan (STS).
Kredensial URL: Jika metode di atas tidak menyediakan kredensial, penyedia mencoba mengambil kredensial dari URL yang ditentukan oleh credentials_uri.
Rekomendasi keamanan
Untuk meningkatkan keamanan di lingkungan produksi, gunakan metode otentikasi berikut yang mengandalkan kredensial sementara:
Peran RAM instans untuk ECS
Asumsi peran RAM (AssumeRole)
Asumsi peran melalui OIDC IdP
Metode-metode ini memberikan keuntungan keamanan sebagai berikut:
Menghindari hardcoding atau mengekspos AccessKey jangka panjang dalam konfigurasi Anda untuk mengurangi risiko kompromi kunci.
Membatasi durasi izin menggunakan kredensial dengan periode kedaluwarsa tetap.
Dukungan otorisasi detail halus
Untuk kontrol akses resource secara detail halus berdasarkan dimensi seperti aplikasi, tim, atau proyek, gunakan asumsi peran RAM dan asumsi peran OIDC IdP. Anda dapat menyambungkan peran dan kebijakan akses khusus ke beban kerja Terraform yang berbeda untuk menerapkan prinsip hak istimewa minimal.
Metode otentikasi Terraform
Penyedia Alibaba Cloud Terraform menyediakan metode otentikasi berikut:
Metode Otentikasi | Petunjuk | Kasus Penggunaan |
(access_key) | Menentukan AccessKey (AK) dalam teks biasa di berkas konfigurasi, atau meneruskannya sebagai parameter. |
|
(ALIBABA_CLOUD_ACCESS_KEY) | Membaca informasi AccessKey (AK) dari variabel lingkungan. |
|
(ecs_role_name) | Memperoleh kredensial akses untuk peran RAM yang dilampirkan dari metadata instans ECS. | Terraform dijalankan pada instans ECS. |
Asumsi peran OIDC (assume_role_with_oidc) | Memperoleh kredensial akses dengan mengasumsikan peran melalui OpenID Connect (OIDC). | Terraform dijalankan di kluster Kubernetes yang mendukung OIDC, seperti Alibaba Cloud ACK. |
(assume_role) | Memperoleh kredensial akses dengan mengasumsikan peran RAM. |
|
(credentials_uri) | Menentukan URI untuk memperoleh kredensial sementara. | Memperoleh kredensial dari layanan kredensial kustom, seperti API atau file. |
(profile) | Mengonfigurasi berbagai metode otentikasi dalam satu berkas terpadu menggunakan Antarmuka Baris Perintah (CLI) Alibaba Cloud. Memperoleh kredensial akses dengan menentukan nama profil. Metode otentikasi yang didukung meliputi:
|
|
Berkas konfigurasi bersama
Terraform mendukung penggunaan kredensial akses dari berkas konfigurasi bersama. Berkas konfigurasi bersama adalah berkas config.json yang dihasilkan oleh Antarmuka Baris Perintah (CLI) Alibaba Cloud. Anda dapat mengonfigurasi berbagai jenis informasi kredensial, seperti AccessKey statis, peran ECS, dan asumsi peran, dalam satu berkas dan mereferensinya menggunakan nama profile. Untuk informasi selengkapnya tentang metode konfigurasi, lihat Konfigurasi Kredensial.
Jalur default untuk berkas konfigurasi bersama adalah sebagai berikut:
Linux/macOS:
~/.aliyun/config.jsonWindows:
C:\Users\USER_NAME\.aliyun\config.json
Contoh konfigurasi
Dalam konfigurasi provider Terraform, Anda dapat menggunakan parameter profile untuk menentukan nama konfigurasi kredensial yang akan digunakan. Jika berkas konfigurasi tidak berada di jalur default, Anda dapat menggunakan parameter shared_credentials_file untuk menentukan jalur mutlak berkas konfigurasi. Kode berikut memberikan contoh konfigurasi:
provider "alicloud" {
region = "cn-hangzhou"
shared_credentials_file = "~/.aliyun/config.json"
profile = "TerraformTest"
}Berikut adalah contoh berkas config.json:
{
"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": "External",
"process_command": "<YOUR_COMMAND>",
"region_id": "<REGION_ID>",
"output_format": "json",
"language": "en"
},
{
"name": "<PROFILE_NAME5>",
"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_NAME6>",
"mode": "ChainableRamRoleArn",
"source_profile": "<PROFILE_NAME>",
"ram_role_arn": "<ROLE_ARN>",
"ram_session_name": "<ROLE_SESSION_NAME>",
"expired_seconds": 3600
},
{
"name": "<PROFILE_NAME7>",
"mode": "CloudSSO",
"cloud_sso_sign_in_url": "https://******/login",
"access_token": "eyJraWQiOiJiYzViMzUwYy******",
"cloud_sso_access_token_expire": 1754316142,
"cloud_sso_access_config": "ac-00s1******",
"cloud_sso_account_id": "151266******"
},
{
"name": "<PROFILE_NAME8>",
"mode": "OAuth",
"access_key_id": "<ALIBABA_CLOUD_ACCESS_KEY_ID>",
"access_key_secret": "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>",
"sts_token": "<SECURITY_TOKEN>",
"region_id": "<REGION_ID>",
"output_format": "json",
"language": "<zh|en>",
"sts_expiration": "<STS_EXPIRATION>",
"oauth_access_token": "<OAUTH_ACCESS_TOKEN>",
"oauth_refresh_token": "<OAUTH_REFRESH_TOKEN>",
"oauth_access_token_expire": 1754316142,
"oauth_site_type": "<CN|EN>"
}
]
}Dalam berkas config.json, Anda dapat menggunakan parameter mode untuk menentukan jenis kredensial yang berbeda:
AK: Menggunakan AccessKey pengguna sebagai kredensial.
StsToken: Menggunakan token STS sebagai kredensial.
RamRoleArn: Memperoleh kredensial menggunakan ARN peran RAM.
EcsRamRole: Memperoleh kredensial menggunakan peran RAM yang dilampirkan ke instans ECS.
External: Secara dinamis memperoleh kredensial dengan menjalankan perintah program eksternal.
OIDC: Memperoleh kredensial menggunakan ARN OIDC IdP dan token OIDC.
ChainableRamRoleArn: Menggunakan rantai peran. Menentukan nama kredensial lain dalam berkas
config.jsonmenggunakansource_profileuntuk memperoleh kredensial baru.OAuth: Kredensial yang diperoleh dengan masuk ke CLI menggunakan OAuth.
CloudSSO: Kredensial yang diperoleh oleh pengguna CloudSSO menggunakan CLI Alibaba Cloud.