Alibaba Cloud SDK menggunakan tool Credentials untuk mengelola kredensial secara terpusat, seperti AccessKey dan STS Token Anda. Topik ini menjelaskan jenis kredensial yang didukung beserta metode konfigurasinya.
Prasyarat
Tool Credentials memerlukan Python 3.7 atau versi yang lebih baru. Untuk informasi selengkapnya, lihat Kebijakan maintenance Alibaba Cloud SDK.
Gunakan Alibaba Cloud SDK V2.0. Untuk informasi selengkapnya, lihat SDK V2.0 dan SDK V1.0.
Instal tool Credentials
Kami menyarankan Anda menggunakan pip untuk menginstal tool Credentials:
pip install alibabacloud_credentialsUntuk memeriksa versi terbaru library alibabacloud_credentials, lihat halaman paket alibabacloud-credentials di PyPI atau log perubahan di GitHub. Gunakan versi terbaru untuk memastikan semua fitur didukung.
Jenis dan parameter kredensial
Kelas Config dalam modul alibabacloud_credentials.models mendefinisikan jenis kredensial yang didukung oleh tool Credentials serta parameter konfigurasi masing-masing jenis. Parameter type menentukan jenis kredensial, dan setiap jenis memerlukan kumpulan parameter konfigurasi yang berbeda. Pada tabel berikut, setiap kolom sesuai dengan nilai yang valid untuk type, sedangkan setiap baris merepresentasikan parameter konfigurasi. menunjukkan parameter yang diperlukan, - menunjukkan parameter opsional, dan menandakan bahwa parameter tersebut tidak didukung.
Kami menyarankan Anda hanya menggunakan jenis dan parameter kredensial yang tercantum dalam tabel berikut.
| Parameter | access_key | sts | ram_role_arn | ecs_ram_role | oidc_role_arn | credentials_uri | bearer |
| access_key_id: ID AccessKey. | |||||||
| access_key_secret: Rahasia AccessKey. | |||||||
| security_token: Token Layanan Keamanan (STS). | - | ||||||
| role_arn: Nama Sumber Daya Alibaba Cloud (ARN) dari peran Resource Access Management (RAM). | |||||||
role_session_name: nama sesi kustom. Format default adalah credentials-python-Timestamp saat ini. | - | - | |||||
| role_name: nama peran RAM. | - | ||||||
disable_imds_v1: menentukan apakah akan memaksa menggunakan mode penguatan keamanan (IMDSv2). Nilai default: False. | - | ||||||
| bearer_token: token bearer. | |||||||
| policy: kebijakan kustom. | - | - | |||||
| role_session_expiration: waktu kedaluwarsa sesi. Nilai default: 3600. Satuan: detik. | - | - | |||||
| oidc_provider_arn: ARN dari Penyedia Identitas OIDC (OIDC IdP). | |||||||
| oidc_token_file_path: jalur ke file token OIDC. | |||||||
| external_id: ID eksternal dari peran, yang terutama digunakan untuk mencegah masalah confused deputy. Untuk informasi selengkapnya, lihat Mencegah masalah confused deputy dengan ID eksternal. | - | ||||||
| credentials_uri: URI kredensial. | |||||||
sts_endpoint: titik akhir STS. Titik akhir VPC dan titik akhir Internet didukung. Untuk nilai yang valid, lihat Titik akhir STS. Nilai default: sts.aliyuncs.com. | - | - | |||||
| timeout: periode timeout baca permintaan HTTP. Nilai default: 5000. Satuan: milidetik. | - | - | - | - | |||
| connect_timeout: periode timeout koneksi permintaan HTTP. Nilai default: 10000. Satuan: milidetik. | - | - | - | - |
Menggunakan tool Credentials
Bagian sebelumnya menjelaskan jenis kredensial dan parameter konfigurasi yang didukung oleh tool Credentials. Bagian berikut menyediakan contoh kode yang menunjukkan cara menggunakan tool ini. Pilih metode yang paling sesuai dengan skenario Anda.
-
Menyematkan AccessKey secara langsung dalam proyek Anda menciptakan risiko keamanan. Izin repositori yang tidak dikelola dengan baik dapat membocorkan semua sumber daya dalam akun Anda. Disarankan untuk menyimpan AccessKey dalam variabel lingkungan atau file konfigurasi.
-
Gunakan pola singleton dengan tool Credentials. Pola ini memungkinkan cache kredensial bawaan tool untuk mencegah pembatasan laju akibat panggilan API yang terlalu sering dan menghindari pemborosan sumber daya akibat pembuatan banyak instans. Untuk informasi selengkapnya, lihat Pembaruan otomatis kredensial sesi.
Metode 1: Rantai kredensial default
Ini adalah metode default yang digunakan dalam contoh kode di Portal OpenAPI.
Jika Anda menggunakan tool Credentials tanpa meneruskan parameter konfigurasi apa pun, tool ini mengambil kredensial dari rantai kredensial default. Sebelum menggunakan metode ini, pastikan lingkungan runtime aplikasi Anda telah dikonfigurasi dengan salah satu sumber kredensial yang didukung oleh rantai kredensial default.
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
# Jika tidak ada parameter konfigurasi yang ditentukan, kredensial diambil dari rantai kredensial default.
credentialsClient = CredentialClient()
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Gunakan config untuk menginisialisasi client layanan cloud. Untuk informasi selengkapnya, lihat dokumentasi SDK masing-masing layanan cloud.Metode 2: Pasangan Kunci Akses
Tool Credentials menggunakan AccessKey yang Anda berikan sebagai kredensial akses.
Akun Alibaba Cloud (akun root) memiliki izin penuh atas semua sumber dayanya, sehingga AK yang bocor menimbulkan risiko keamanan signifikan. Jangan gunakan AK akun root.
Gunakan AK Pengguna RAM dengan izin hak istimewa minimal.
import os
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='access_key',
# Diperlukan. Dalam contoh ini, ID AccessKey diambil dari variabel lingkungan.
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
# Diperlukan. Dalam contoh ini, rahasia AccessKey diambil dari variabel lingkungan.
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kemudian, gunakan config untuk menginisialisasi client layanan cloud yang sesuai.Metode 3: Token STS
Tool Credentials menggunakan token STS statis yang Anda berikan sebagai kredensial akses.
import os
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='sts',
# Diperlukan. Dalam contoh ini, ID AccessKey diambil dari variabel lingkungan.
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
# Diperlukan. Dalam contoh ini, rahasia AccessKey diambil dari variabel lingkungan.
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# Diperlukan. Dalam contoh ini, token keamanan sementara diambil dari variabel lingkungan.
security_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN')
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kode yang menggunakan config untuk menginisialisasi client layanan cloud dihilangkan.Metode 4: Pasangan Kunci Akses dan ARN Peran RAM
Tool Credentials menggunakan pasangan AccessKey dan ARN peran RAM yang Anda berikan untuk memanggil AssumeRole dan memperoleh token STS. Tool ini kemudian menggunakan token STS sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis kredensial sesi.
import os
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='ram_role_arn',
# Diperlukan. Dalam contoh ini, ID AccessKey diambil dari variabel lingkungan.
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
# Diperlukan. Dalam contoh ini, rahasia AccessKey diambil dari variabel lingkungan.
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# Diperlukan. ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN untuk mengatur parameter ini.
role_arn='<role_arn>',
# Opsional. Nama sesi peran. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME untuk mengatur parameter ini.
role_session_name='<role_session_name>',
# Opsional. Kebijakan yang lebih restriktif. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
policy='<policy>',
# Opsional. ID eksternal peran, yang terutama digunakan untuk mencegah masalah confused deputy.
external_id='<external_id>',
# Opsional. Waktu kedaluwarsa sesi. Nilai default: 3600 detik.
role_session_expiration=3600
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kode yang menggunakan config untuk menginisialisasi client layanan cloud dihilangkan.Metode 5: Peran RAM Instans ECS
Jika aplikasi Anda berjalan pada instans Elastic Compute Service (ECS) atau Elastic Container Instance (ECI) yang telah disambungkan peran RAM, tool Credentials dapat memperoleh token STS peran RAM dari metadata instans dan menggunakannya sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis kredensial sesi.
Secara default, tool Credentials menggunakan mode penguatan keamanan (IMDSv2) untuk mengakses metadata instans ECS. Jika terjadi kesalahan dalam mode penguatan keamanan, gunakan parameter disable_imds_v1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLED untuk mengontrol cara tool menangani kesalahan tersebut:
Jika nilainya
False, yaitu nilai default, tool Credentials mencoba beralih ke mode normal (IMDSv1) untuk terus memperoleh kredensial.Jika nilainya
Apakah suatu instans mendukung mode penguatan keamanan bergantung pada cara instans tersebut dikonfigurasi.True, tool Credentials hanya memperoleh kredensial dalam mode penguatan keamanan. Jika akses dalam mode penguatan keamanan gagal, pengecualian dilemparkan.
Anda juga dapat mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk mencegah tool Credentials memperoleh kredensial dari metadata instans.
Untuk informasi selengkapnya tentang metadata instans, lihat Metadata instans.
Untuk informasi selengkapnya tentang cara menyambungkan peran RAM ke instans ECS atau ECI, lihat Langkah 1: Buat peran RAM dan Sambungkan peran RAM instans ke instans ECI.
Untuk memperoleh kredensial identitas sementara dalam mode penguatan keamanan, gunakan
alibabacloud_credentialsversi 0.3.6 atau yang lebih baru.
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='ecs_ram_role',
# Opsional. Nama peran ECS. Jika Anda mengosongkan parameter ini, nama akan diambil secara otomatis. Kami menyarankan Anda menentukan nama untuk mengurangi jumlah permintaan. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA untuk mengatur parameter ini.
role_name='<role_name>',
# Opsional. Nilai default: False. True: kredensial hanya diperoleh dalam mode penguatan keamanan (IMDSv2), dan pengecualian dilemparkan jika akses gagal, jadi atur True hanya untuk instans yang mendukung mode penguatan keamanan. False: tool pertama-tama mencoba memperoleh kredensial dalam mode penguatan keamanan. Jika upaya tersebut gagal, tool beralih ke mode normal (IMDSv1).
disable_imds_v1=True
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kode yang menggunakan config untuk menginisialisasi client layanan cloud dihilangkan.Metode 6: ARN Peran OIDC
Jika Anda menggunakan protokol autentikasi OIDC dan telah membuat peran RAM untuk penyedia identitas OIDC, Anda dapat meneruskan ARN Penyedia Identitas OIDC (OIDC IdP), token OIDC, dan ARN peran RAM ke tool Credentials. Tool ini secara otomatis memanggil operasi AssumeRoleWithOIDC STS untuk memperoleh token STS peran RAM dan menggunakannya sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis kredensial sesi.
Sebagai contoh, jika aplikasi Anda berjalan di kluster Container Service for Kubernetes (ACK) yang telah mengaktifkan RRSA, tool Credentials membaca konfigurasi OIDC dari variabel lingkungan pod dan memanggil operasi AssumeRoleWithOIDC untuk memperoleh token STS peran layanan. Aplikasi Anda kemudian menggunakan token STS tersebut untuk mengakses layanan Alibaba Cloud.
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='oidc_role_arn',
# Diperlukan. ARN peran RAM. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN untuk mengatur parameter ini.
role_arn='<role_arn>',
# Diperlukan. ARN Penyedia Identitas OIDC. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN untuk mengatur parameter ini.
oidc_provider_arn='<oidc_provider_arn>',
# Diperlukan. Jalur ke file token OIDC. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE untuk mengatur parameter ini.
oidc_token_file_path='<oidc_token_file_path>',
# Opsional. Nama sesi peran. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME untuk mengatur parameter ini.
role_session_name='<role_session_name>',
# Opsional. Kebijakan yang lebih restriktif. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
policy='<policy>',
# Opsional. Waktu kedaluwarsa sesi. Nilai default: 3600 detik.
role_session_expiration=3600
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kode yang menggunakan config untuk menginisialisasi client layanan cloud dihilangkan.Metode 7: Kredensial URI
Anda dapat mengenkapsulasi layanan STS dan mengekspos URI sehingga layanan eksternal dapat memperoleh token STS melalui URI tersebut. Pendekatan ini mengurangi risiko membocorkan informasi sensitif seperti pasangan AccessKey. Tool Credentials mengakses URI yang Anda berikan untuk memperoleh token STS dan menggunakannya sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis kredensial sesi.
URI harus memenuhi kondisi berikut:
Permintaan GET didukung.
Kode status respons adalah 200.
Badan respons memiliki struktur berikut:
{
"Code": "Success",
"AccessKeySecret": "yourAccessKeySecret",
"AccessKeyId": "STS.****************",
"Expiration": "2021-09-26T03:46:38Z",
"SecurityToken": "yourSecurityToken"
}Contoh berikut menunjukkan cara memperoleh kredensial dari URI:
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='credentials_uri',
# Diperlukan. URI tempat kredensial diperoleh. Formatnya adalah http://local_or_remote_uri/. Anda juga dapat menggunakan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI untuk mengatur parameter ini.
credentials_uri='<credentials_uri>',
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK V2.0 untuk layanan cloud, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kode yang menggunakan config untuk menginisialisasi client layanan cloud dihilangkan.Metode 8: Token Bearer
Saat ini, hanya Alibaba Cloud Call Center (CCC) yang mendukung autentikasi token bearer.
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_tea_openapi import models as open_api_models
credentialsConfig = CredentialConfig(
type='bearer',
# Diperlukan. Masukkan token bearer Anda.
bearer_token='<BearerToken>',
)
credentialsClient = CredentialClient(credentialsConfig)
credential = credentialsClient.get_credential()
access_key_id = credential.get_access_key_id()
access_key_secret = credential.get_access_key_secret()
security_token = credential.get_security_token()
# Saat Anda menggunakan SDK CCC V2.0, teruskan kredensial menggunakan kelas Config dari modul alibabacloud_tea_openapi.models.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# Kode yang menggunakan config untuk menginisialisasi client layanan cloud dihilangkan.Rantai penyedia kredensial default
Rantai penyedia kredensial default adalah mekanisme fallback yang mencari kredensial dengan memeriksa urutan lokasi yang telah ditentukan. Pencarian berlanjut hingga kredensial ditemukan. Jika tidak ada kredensial yang ditemukan setelah memeriksa semua lokasi, CredentialException dilemparkan. Urutan pencarian adalah sebagai berikut:
1. Memperoleh informasi kredensial dari variabel lingkungan
Jika tidak ditemukan kredensial dalam properti sistem, rantai penyedia kemudian memeriksa variabel lingkungan.
-
Jika ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET keduanya tersedia dan tidak kosong, rantai penyedia menggunakannya sebagai kredensial default.
-
Jika ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN juga diatur, rantai penyedia menggunakan token STS sebagai kredensial default.
2. Memperoleh informasi kredensial dengan menggunakan peran RAM dari Penyedia Identitas OIDC
Jika belum ditemukan kredensial, rantai penyedia memeriksa variabel lingkungan berikut yang terkait dengan peran RAM OIDC:
-
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 tersedia dan tidak kosong, rantai penyedia menggunakan nilai-nilai ini untuk memanggil API AssumeRoleWithOIDC Layanan Token Keamanan (STS) untuk memperoleh token STS.
3. Memperoleh informasi kredensial dari file konfigurasi
Fitur ini memerlukan alibabacloud_credentials versi 1.0rc3 atau yang lebih baru.
Jika belum ditemukan kredensial, rantai penyedia mencoba memuat file kredensial bersama, config.json, dari lokasi defaultnya dan menggunakan kredensial yang ditentukan dalam file 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 file config.json secara manual di jalur yang sesuai. Contoh berikut menunjukkan format kontennya:
{
"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
|
4. Memperoleh informasi kredensial dengan menggunakan peran RAM instans ECS
Jika belum ditemukan kredensial, rantai penyedia mencoba mengambil token STS untuk peran RAM instans dari metadata instans. Token ini kemudian digunakan sebagai kredensial default. Untuk melakukan ini, rantai pertama-tama mengambil nama peran RAM yang ditetapkan ke instans dan kemudian menggunakan peran tersebut untuk memperoleh token STS yang sesuai. Untuk mengurangi waktu pengambilan kredensial dan meningkatkan efisiensi, Anda dapat menentukan nama peran RAM secara langsung dengan menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
Secara default, rantai penyedia mengakses metadata instans dalam mode penguatan keamanan (IMDSv2). Jika terjadi pengecualian dalam mode penguatan keamanan, Anda dapat menggunakan variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLED untuk mengontrol perilaku fallback:
-
Ketika nilainya
false(default), sistem mencoba beralih ke mode lama untuk mengambil kredensial. -
Ketika nilainya
true, mode penguatan keamanan diberlakukan. Jika akses gagal dalam mode ini, pengecualian dilemparkan.
Sebagai tambahan, Anda dapat mencegah rantai penyedia mengakses metadata instans untuk kredensial dengan mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.
Untuk informasi selengkapnya tentang metadata instans, lihat Metadata instans.
Untuk informasi selengkapnya tentang cara menyambungkan peran RAM ke instans ECS atau ECI, lihat Langkah 1: Buat peran RAM dan Sambungkan peran RAM instans ke instans ECI.
Untuk memperoleh kredensial identitas sementara dalam mode penguatan keamanan, gunakan
alibabacloud_credentialsversi 0.3.6 atau yang lebih baru.
5. Memperoleh informasi kredensial berdasarkan URI
Jika belum ditemukan kredensial, rantai penyedia memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika variabel ini diatur dan mengarah ke URI yang valid, rantai mengakses URI tersebut untuk mengambil token STS.
Mekanisme pembaruan otomatis kredensial sesi
Jenis kredensial sesi, seperti ram_role_arn, ecs_ram_role, oidc_role_arn, dan credentials_uri, mendukung pembaruan otomatis melalui mekanisme bawaan dalam penyedia kredensial. Ketika client kredensial mengambil kredensial untuk pertama kalinya, penyedia menyimpannya dalam cache. Pada operasi selanjutnya, instans client yang sama secara otomatis mengambil kredensial dari cache ini. Jika kredensial yang di-cache telah kedaluwarsa, instans client mengambil yang baru dan memperbarui cache sesuai.
Untuk kredensial ecs_ram_role, penyedia kredensial secara proaktif memperbaruinya 15 menit sebelum kedaluwarsa.
Contoh berikut menggunakan pola singleton untuk membuat client kredensial. Ini menunjukkan mekanisme pembaruan dengan mengambil kredensial pada interval waktu berbeda dan memanggil operasi OpenAPI untuk memverifikasi bahwa kredensial tersebut dapat digunakan.
import os
import sys
import time
import threading
from functools import wraps
from threading import Lock
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_credentials.models import Config as CredentialConfig
from alibabacloud_ecs20140526.client import Client
from alibabacloud_ecs20140526.models import DescribeRegionsRequest
from alibabacloud_tea_openapi.models import Config as EcsConfig
#
# Dekorator singleton aman thread.
#
def singleton(cls):
"""Mengimplementasikan pola singleton aman thread."""
instances = {}
lock = Lock()
@wraps(cls)
def wrapper(*args, **kwargs):
with lock:
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
#
# Kelas layanan singleton.
#
@singleton
class Credential:
def __init__(self):
self._client = self._init_client()
@staticmethod
def _init_client() -> CredentialClient:
try:
config = CredentialConfig(
type="ram_role_arn",
access_key_id=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
access_key_secret=os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
role_arn=os.getenv("ALIBABA_CLOUD_ROLE_ARN"),
role_session_name="RamRoleArnTest",
role_session_expiration=3600,
)
return CredentialClient(config)
except Exception as e:
raise RuntimeError(f"Inisialisasi kredensial gagal: {e}") from e
@property
def client(self) -> CredentialClient:
return self._client
@singleton
class EcsClient:
def __init__(self, credential: CredentialClient):
self._client = self._init_client(credential)
@staticmethod
def _init_client(credential: CredentialClient) -> Client:
try:
ecs_config = EcsConfig(credential=credential)
ecs_config.endpoint = 'ecs.cn-hangzhou.aliyuncs.com'
return Client(ecs_config)
except Exception as e:
raise RuntimeError(f"Inisialisasi client ECS gagal: {e}") from e
@property
def client(self) -> Client:
return self._client
#
# Fungsi tugas.
#
def execute_task():
try:
# Memperoleh kredensial dan client ECS.
credential = Credential().client.get_credential()
ecs_client = EcsClient(Credential().client).client
# Mencetak informasi kredensial.
print("Time:", time.strftime("%Y-%m-%d %H:%M:%S"))
print("AK ID:", credential.access_key_id)
print("AK Secret:", credential.access_key_secret)
print("STS Token:", credential.security_token)
# Memanggil operasi API untuk mengkueri daftar wilayah.
request = DescribeRegionsRequest()
response = ecs_client.describe_regions(request)
print("Invoke result:", response.to_map()["statusCode"])
except Exception as e:
print(f"Eksekusi client ECS gagal: {e}")
raise
def schedule_task():
def run_execute_task():
try:
execute_task()
except Exception as e:
print(f"Eksekusi tugas gagal: {e}")
finally:
nonlocal task_count
task_count += 1
if task_count == len(DELAYS):
print("Semua tugas selesai. Mengakhiri program.")
sys.exit(0)
def schedule_execution(delay):
task_timer = threading.Timer(delay, run_execute_task)
task_timer.start()
return task_timer
# Menentukan penundaan tugas terjadwal.
DELAYS = [0, 600, 4200, 4300]
task_count = 0
timers = [schedule_execution(delay) for delay in DELAYS]
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
print("Program dihentikan oleh pengguna.")
for timer in timers:
timer.cancel()
if __name__ == "__main__":
schedule_task()Time: 2025-05-28 14:51:51
AK ID: STS.NXC2_xxx_3e8nhx6
AK Secret: 89HQ_xxx_3pVFMsJzbStqUQn
STS Token: CAISxAJ1q6Ft5B2yfSjIr5v2ed2M3uhT3JKAb3b9h3AdS+oUga3T1Dz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
/QkjJRNF20pLM7VtilmAGIpbng4YfgbiJREKxaXeiru_xxx_3XUiTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
/DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_+UxM3D2hT+Bi3HLQztRLNaRsQdpz0agA6vG9rqhiMsdPZDiIoh5FHnB/fZ
+F9ol26SXsmquJdjfFgX9FFPVOqvnsHYRXUS2abqNKD_xxx_1GzLDX26i+hM2jxG6CFc9BJ3S5iElyLCAA
Invoke result: 200
Time: 2025-05-28 15:01:51
AK ID: STS.NXC2_xxx_3e8nhx6
AK Secret: 89HQ_xxx_3pVFMsJzbStqUQn
STS Token: CAISxAJ1q6Ft5B2yfSjIr5v2ed2M3uhT3JKAb3b9h3AdS+oUga3T1Dz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
/QkjJRNF20pLM7VtilmAGIpbng4YfgbiJREKxaXeiru_xxx_3XUiTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
/DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_+UxM3D2hT+Bi3HLQztRLNaRsQdpz0agA6vG9rqhiMsdPZDiIoh5FHnB/fZ
+F9ol26SXsmquJdjfFgX9FFPVOqvnsHYRXUS2abqNKD_xxx_1GzLDX26i+hM2jxG6CFc9BJ3S5iElyLCAA
Invoke result: 200
Time: 2025-05-28 16:01:53
AK ID: STS.NVw9_xxx_QZ3M4mu
AK Secret: 2mP6_xxx_Xvp38ai4mJTazm
STS Token: CAISxAJ1q6Ft5B2yfSjIr5XCctz4vp1A9qmocRChqE4hXdUfovH6Lzz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
/QkjJRNF20pLM7VtoxWAYIpbng4YfgbiJREKxaXeiru_xxx_iTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
/DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_xM3D2hT+Bi3HLQztXxScP8Qdpz0agAG61LMbLwCjTNi3juW48l
+/w3E16v00Wet2c9vr1Ftp3qaJ8zuQJIMgixWIvAXa4_xxx_eAMf+DaoEa0gUg1lQ7096D76vMDDr1eTiiAA
Invoke result: 200
Time: 2025-05-28 16:03:31
AK ID: STS.NVw9_xxx_QZ3M4mu
AK Secret: 2mP6_xxx_Xvp38ai4mJTazm
STS Token: CAISxAJ1q6Ft5B2yfSjIr5XCctz4vp1A9qmocRChqE4hXdUfovH6Lzz2IHhMeXZoA+4YsPw2mmFW6/sdLqdJQpp
/QkjJRNF20pLM7VtoxWAYIpbng4YfgbiJREKxaXeiru_xxx_iTnmW3NFkFlyGEe4CFdkf3jm5bHu0WB0gCkK7FO/trLT8L6P5U2DvBWSMyo2eF6TK3F3RNL5gJCnKUM1/Qcp6if5I
/DXQEIvUTYbreL6L9mNxRkY6UgHKpJvCxxBmi0fUW5f_xxx_xM3D2hT+Bi3HLQztXxScP8Qdpz0agAG61LMbLwCjTNi3juW48l
+/w3E16v00Wet2c9vr1Ftp3qaJ8zuQJIMgixWIvAXa4_xxx_eAMf+DaoEa0gUg1lQ7096D76vMDDr1eTiiAA
Invoke result: 200Analisis berdasarkan output log:
-
Pada pemanggilan pertama, cache kosong. Sistem mengambil kredensial berdasarkan konfigurasi Anda dan kemudian menyimpannya dalam cache.
-
Pemanggilan kedua menggunakan kredensial yang sama dengan yang pertama, menunjukkan bahwa kredensial tersebut diambil dari cache.
-
Pada pemanggilan ketiga, kredensial yang di-cache telah kedaluwarsa. Waktu kedaluwarsanya (
RoleSessionExpiration) adalah 3.600 detik, tetapi pemanggilan ini dilakukan 4.200 detik setelah yang pertama. Akibatnya, mekanisme pembaruan otomatis SDK mengambil kredensial baru dan memperbarui cache. -
Pemanggilan keempat menggunakan kredensial yang sama dengan yang ketiga, mengonfirmasi bahwa cache telah diperbarui.
Dokumen terkait
-
Untuk ikhtisar konsep dasar RAM, lihat Konsep dasar.
-
Untuk membuat AccessKey, lihat Buat AccessKey.
-
Untuk membuat Pengguna RAM, AccessKey, dan peran RAM secara terprogram; mendefinisikan kebijakan izin; dan memberikan izin, lihat Ikhtisar SDK RAM.
-
Untuk mengasumsikan peran secara terprogram, lihat Ikhtisar SDK STS.
-
Untuk detail tentang API RAM dan STS, lihat Referensi API.
-
Praktik terbaik menggunakan kredensial akses untuk memanggil Alibaba Cloud OpenAPI