Saat menggunakan SDK Alibaba Cloud, informasi kredensial seperti Pasangan Kunci Akses dan token Security Token Service (STS) dikelola oleh alat Credentials. Topik ini menjelaskan jenis kredensial yang didukung oleh alat Credentials serta cara mengonfigurasinya.
Prasyarat
Python 3.7 atau versi lebih baru. Untuk informasi selengkapnya, lihat Kebijakan dukungan SDK Alibaba Cloud.
SDK Alibaba Cloud untuk Python V2.0. Untuk informasi selengkapnya, lihat SDK V2.0 dan V1.0.
Instal alat Credentials
Kami menyarankan Anda menggunakan pip untuk menginstal alat ini.
pip install alibabacloud_credentialsUntuk informasi tentang versi terbaru pustaka alibabacloud_credentials, lihat alibabacloud-credentials · PyPI atau Github. Kami menyarankan Anda menggunakan versi terbaru untuk memastikan dukungan semua fitur.
Jenis kredensial yang didukung oleh alat Credentials dan parameter konfigurasinya
Jenis kredensial yang didukung oleh alat Credentials dan parameter konfigurasinya didefinisikan dalam kelas Config pada modul alibabacloud_credentials.models. Jenis kredensial ditentukan oleh parameter type. Jenis kredensial yang berbeda memerlukan parameter konfigurasi yang berbeda. Tabel berikut menjelaskan nilai valid untuk type dan parameter konfigurasi yang didukung masing-masing jenis. Dalam tabel ini, menunjukkan parameter yang diperlukan, - menunjukkan parameter opsional, dan menunjukkan bahwa parameter tersebut tidak didukung.
Kami menyarankan agar Anda tidak menggunakan parameter yang tidak tercantum dalam tabel berikut.
type | 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 Security Token Service (STS). | - | ||||||
role_arn: Nama Sumber Daya Alibaba Cloud (ARN) dari peran Resource Access Management (RAM). | |||||||
role_session_name: Nama kustom untuk sesi. Nilai default berformat | - | - | |||||
role_name: Menentukan nama peran RAM. | - | ||||||
disable_imds_v1: Menentukan apakah akan memaksa menggunakan mode penguatan keamanan (IMDSv2). Jika Anda mengatur parameter ini ke true, mode penguatan keamanan (IMDSv2) digunakan. Nilai default: | - | ||||||
bearer_token: token bearer. | |||||||
policy: kebijakan kustom. | - | - | |||||
role_session_expiration: periode waktu habis sesi. Nilai default: 3600. Satuan: detik. | - | - | |||||
oidc_provider_arn: ARN dari penyedia identitas OpenID Connect (OIDC) (IdP). | |||||||
oidc_token_file_path: jalur mutlak ke token OIDC. | |||||||
external_id: ID eksternal peran, yang digunakan untuk mencegah masalah confused deputy. Untuk informasi selengkapnya, lihat Gunakan ID eksternal untuk mencegah masalah confused deputy. | - | ||||||
credentials_uri: URI kredensial. | |||||||
sts_endpoint: titik akhir STS. Titik akhir VPC dan titik akhir Internet didukung. Nilai default: | - | - | |||||
timeout: periode waktu habis permintaan baca HTTP. Nilai default: 5000. Satuan: milidetik. | - | - | - | - | |||
connect_timeout: periode waktu habis permintaan koneksi HTTP. Nilai default: 10000. Satuan: milidetik. | - | - | - | - |
Gunakan alat Credentials
Bagian berikut menyediakan contoh kode untuk menunjukkan cara menggunakan alat Credentials. Anda dapat memilih metode berdasarkan kebutuhan Anda.
Kami menyarankan Anda menyimpan Pasangan Kunci Akses di variabel lingkungan atau file konfigurasi.
Kami menyarankan Anda menggunakan pola singleton saat menggunakan alat Credentials. Praktik ini mengaktifkan fitur caching kredensial bawaan, mencegah masalah throttling akibat banyak panggilan API, serta menghindari pemborosan sumber daya karena pembuatan banyak instans. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis untuk kredensial sesi.
Metode 1: Rantai penyedia kredensial default
Ini adalah metode default yang digunakan dalam kode contoh di Portal OpenAPI.
Saat Anda menggunakan alat Credentials tanpa meneruskan parameter konfigurasi apa pun, alat ini mengambil kredensial dari rantai penyedia kredensial default. Jika menggunakan metode ini, pastikan setidaknya satu metode pengambilan kredensial yang didukung oleh rantai penyedia kredensial default telah dikonfigurasi di lingkungan runtime aplikasi Anda.
from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi import models as open_api_models
# Jangan tentukan parameter konfigurasi apa pun. Kredensial akan diambil dari rantai penyedia 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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 2: Pasangan Kunci Akses
Alat Credentials menggunakan AccessKey Anda sebagai kredensial akses.
Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Jika Pasangan Kunci Akses akun Alibaba Cloud bocor, hal ini menimbulkan ancaman keamanan signifikan bagi sistem Anda. Kami tidak merekomendasikan penggunaan Pasangan Kunci Akses akun Alibaba Cloud.
Kami menyarankan Anda menggunakan Pasangan Kunci Akses Pengguna RAM yang diberikan izin minimum yang diperlukan.
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',
# Wajib. Contoh ini menunjukkan cara mendapatkan ID AccessKey dari variabel lingkungan.
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
# Wajib. Contoh ini menunjukkan cara mendapatkan Rahasia AccessKey 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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 3: Token STS
Alat 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',
# Wajib. Contoh ini menunjukkan cara mendapatkan ID AccessKey dari variabel lingkungan.
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
# Wajib. Contoh ini menunjukkan cara mendapatkan Rahasia AccessKey dari variabel lingkungan.
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# Wajib. Contoh ini menunjukkan cara mendapatkan token keamanan sementara 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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 4: Pasangan Kunci Akses dan RamRoleArn
Alat Credentials menggunakan AccessKey dan ARN peran RAM yang Anda berikan untuk memanggil AssumeRole, mendapatkan token STS, lalu menggunakannya sebagai kredensial akses. Kredensial yang diperoleh dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis untuk 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',
# Wajib. Contoh ini menunjukkan cara mendapatkan ID AccessKey dari variabel lingkungan.
access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
# Wajib. Contoh ini menunjukkan cara mendapatkan Rahasia AccessKey dari variabel lingkungan.
access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
# Wajib. ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
role_arn='<role_arn>',
# Opsional. Nama sesi peran. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
role_session_name='<role_session_name>',
# Opsional. Kebijakan izin yang lebih kecil. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
policy='<policy>',
# Opsional. ID eksternal peran, yang digunakan untuk mencegah masalah confused deputy.
external_id='<external_id>',
# Opsional. Waktu kedaluwarsa sesi. Nilai default adalah 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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 5: Peran RAM instans ECS
Jika aplikasi Anda berjalan di instans ECS atau ECI yang diberi peran RAM, alat Credentials dapat mengambil token STS peran RAM dari metadata instans. Token STS ini kemudian digunakan sebagai kredensial akses. Kredensial yang diambil dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis untuk kredensial sesi.
Alat Credentials secara default menggunakan mode penguatan keamanan (IMDSv2) untuk mengakses metadata instans ECS. Jika terjadi pengecualian dalam mode penguatan keamanan, Anda dapat menggunakan parameter disable_imds_v1 atau variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLED untuk mengontrol logika penanganan pengecualian:
Jika nilainya
False(default), sistem mencoba beralih ke mode NAT dan melanjutkan pengambilan kredensial.Jika nilainya
True, kredensial hanya dapat diambil dalam mode penguatan keamanan. Jika akses dalam mode penguatan keamanan gagal, pengecualian dilemparkan.
Dukungan server terhadap IMDSv2 bergantung pada konfigurasi server Anda.
Anda juga dapat mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk menonaktifkan akses kredensial dari metadata instans.
Untuk informasi selengkapnya tentang metadata instans, lihat Metadata instans.
Untuk informasi selengkapnya tentang cara memberikan peran RAM ke instans ECS atau ECI, lihat Buat peran RAM dan berikan ke instans ECS dan Berikan peran RAM instans ke instans ECI.
Saat menggunakan mode penguatan keamanan untuk mengambil kredensial identitas sementara,
alibabacloud_credentialsharus versi 0.3.6 atau 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 tidak menentukan parameter ini, nama akan diambil secara otomatis. Kami menyarankan Anda menentukan parameter ini untuk mengurangi jumlah permintaan. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA.
role_name='<role_name>',
# Opsional. Nilai default adalah False. Jika diatur ke True, mode penguatan keamanan dipaksakan. Jika diatur ke False, sistem pertama-tama mencoba mengambil kredensial dalam mode penguatan keamanan. Jika upaya gagal, sistem 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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 6: OIDCRoleArn
Jika Anda menggunakan protokol autentikasi OIDC dan telah membuat peran RAM untuk Penyedia Identitas OIDC, Anda dapat memberikan ARN Penyedia Identitas OIDC, token OIDC, dan ARN peran RAM ke alat Credentials. Sistem secara otomatis memanggil API AssumeRoleWithOIDC STS untuk mendapatkan token STS untuk peran RAM dan menggunakannya sebagai kredensial akses. Kredensial yang diperoleh dengan metode ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis untuk kredensial sesi. Misalnya, jika aplikasi Anda berjalan di kluster ACK yang memiliki fitur RRSA diaktifkan, alat Credentials dapat membaca informasi konfigurasi OIDC dari variabel lingkungan pod, memanggil API AssumeRoleWithOIDC untuk mendapatkan token STS untuk peran layanan, lalu 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',
# Wajib. ARN peran RAM. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
role_arn='<role_arn>',
# Wajib. ARN Penyedia Identitas OIDC. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
oidc_provider_arn='<oidc_provider_arn>',
# Wajib. Jalur file token OIDC. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
oidc_token_file_path='<oidc_token_file_path>',
# Opsional. Nama sesi peran. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
role_session_name='<role_session_name>',
# Opsional. Kebijakan izin yang lebih kecil. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
policy='<policy>',
# Opsional. Waktu kedaluwarsa sesi. Nilai default adalah 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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 7: Kredensial URI
Anda dapat mengenkapsulasi layanan STS dan mengekspos URI-nya untuk memungkinkan layanan eksternal mengambil token STS dari URI tersebut. Hal ini mengurangi risiko terpaparnya informasi sensitif seperti AccessKey. Alat Credentials dapat mengakses URI yang Anda berikan untuk mengambil token STS. Token STS ini kemudian digunakan sebagai kredensial akses. Kredensial yang diambil dengan cara ini mendukung pembaruan otomatis. Untuk informasi selengkapnya, lihat Mekanisme pembaruan otomatis untuk kredensial sesi.
URI harus memenuhi kondisi berikut:
Mendukung permintaan GET.
Mengembalikan kode status 200.
Badan respons memiliki struktur berikut:
{ "Code": "Success", "AccessKeySecret": "yourAccessKeySecret", "AccessKeyId": "STS.****************", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "yourSecurityToken" }
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',
# Wajib. URI eksternal untuk mengambil kredensial. Formatnya http://local_or_remote_uri/. Anda dapat mengatur ini menggunakan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
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()
# Jika Anda menggunakan SDK V2.0 untuk produk Alibaba Cloud, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Metode 8: Token Bearer
Saat ini, hanya Cloud Call Center (CCC) yang mendukung 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',
# Wajib. 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()
# Jika Anda menggunakan SDK CCC V2.0, gunakan kelas Config dari modul alibabacloud_tea_openapi.models untuk meneruskan kredensial.
config = open_api_models.Config(
credential=credentialsClient,
endpoint='<endpoint>'
)
# ... Kode untuk menginisialisasi klien produk menggunakan objek config dihilangkan.
Rantai penyedia kredensial default
Rantai penyedia kredensial default adalah strategi fallback yang mencari kredensial dalam urutan yang telah ditentukan. Alat ini melewati rantai hingga menemukan informasi kredensial. Jika informasi kredensial tidak dapat diperoleh dari penyedia mana pun dalam rantai, `CredentialException` dilemparkan. Urutan pencarian adalah sebagai berikut:
1. Menggunakan variabel lingkungan
Jika tidak ditemukan informasi kredensial dalam properti sistem, alat Credentials memeriksa variabel lingkungan.
Jika variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET ada dan tidak kosong, Pasangan Kunci Akses digunakan sebagai kredensial default.
Jika variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID, ALIBABA_CLOUD_ACCESS_KEY_SECRET, dan ALIBABA_CLOUD_SECURITY_TOKEN semuanya diatur, token STS digunakan sebagai kredensial default.
2. Mendapatkan informasi kredensial menggunakan peran RAM Penyedia Identitas OIDC
Jika tidak ditemukan informasi kredensial, alat Credentials memeriksa variabel lingkungan berikut yang terkait dengan peran RAM OIDC:
ALIBABA_CLOUD_ROLE_ARN: ARN peran RAM.
ALIBABA_CLOUD_OIDC_PROVIDER_ARN: ARN Penyedia Identitas OIDC.
ALIBABA_CLOUD_OIDC_TOKEN_FILE: Jalur file token OIDC.
Jika ketiga variabel lingkungan tersebut ada dan tidak kosong, alat Credentials menggunakan nilai variabel lingkungan ini untuk memanggil operasi AssumeRoleWithOIDC STS dan mendapatkan token STS sebagai kredensial default.
3. Menggunakan file konfigurasi
Fitur ini memerlukan versi alibabacloud_credentials 1.0rc3 atau lebih baru.
Jika kredensial masih belum ditemukan, alat Credentials mencoba memuat file config.json dari jalur default dan menggunakan kredensial yang ditentukan sebagai kredensial default. Jalur file default adalah:
Linux/macOS:
~/.aliyun/config.jsonWindows:
C:\Users\USER_NAME\.aliyun\config.json
Untuk mengonfigurasi kredensial menggunakan metode ini, Anda dapat menggunakan Cloud Assistant CLI atau membuat file konfigurasi config.json secara manual di jalur yang sesuai. Blok kode berikut menunjukkan contoh 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 | Menentukan nama kredensial yang akan digunakan, yang sesuai dengan nilai parameter |
profiles | Kumpulan informasi kredensial. Gunakan parameter
|
4. Mendapatkan informasi kredensial menggunakan peran RAM instans ECS
Jika tidak ditemukan informasi kredensial, alat Credentials mencoba mendapatkan token STS peran RAM yang diberikan ke instans dari metadata instans dan menggunakannya sebagai kredensial default. Saat mengakses metadata instans, program pertama-tama mendapatkan nama peran RAM yang dilampirkan ke instans saat ini, lalu mendapatkan token STS yang sesuai berdasarkan peran tersebut. Anda juga dapat menentukan nama peran RAM menggunakan variabel lingkungan ALIBABA_CLOUD_ECS_METADATA untuk mengurangi waktu yang diperlukan untuk mendapatkan kredensial dan meningkatkan efisiensi.
Secara default, alat Credentials mengakses metadata dalam mode penguatan keamanan (IMDSv2). Jika terjadi pengecualian dalam mode penguatan keamanan, Anda dapat menggunakan variabel lingkungan ALIBABA_CLOUD_IMDSV1_DISABLED untuk mengontrol logika penanganan pengecualian:
Jika nilainya
false(default), sistem mencoba beralih ke mode NAT untuk melanjutkan pengambilan kredensial.Jika nilainya
true, hanya mode penguatan keamanan yang diizinkan untuk mendapatkan kredensial. Jika akses dalam mode penguatan keamanan gagal, pengecualian dilemparkan.
Selain itu, Anda dapat menonaktifkan akses kredensial dari metadata instans dengan mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true.
Untuk informasi selengkapnya tentang metadata instans, lihat Metadata instans.
Untuk informasi selengkapnya tentang cara memberikan peran RAM ke instans ECS atau ECI, lihat Buat peran RAM dan berikan ke instans ECS dan Berikan peran RAM instans ke instans ECI.
Untuk mengambil kredensial identitas sementara dalam mode penguatan keamanan, Anda harus memastikan bahwa versi alibabacloud_credentials adalah 0.3.6 atau lebih baru.
5. Mendapatkan informasi kredensial berdasarkan URI
Jika tidak ditemukan informasi kredensial, alat Credentials memeriksa variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. Jika variabel ini ada dan mengarah ke URI yang valid, alat Credentials mengakses URI ini untuk mendapatkan token STS sebagai kredensial default.
Mekanisme pembaruan otomatis kredensial sesi
Kredensial sesi mencakup ram_role_arn, ecs_ram_role, oidc_role_arn, dan credentials_uri. Jenis kredensial ini memiliki mekanisme pembaruan otomatis bawaan dalam alat Credentials. Setelah klien kredensial mendapatkan kredensial untuk pertama kalinya, alat Credentials menyimpan informasi kredensial ke cache. Pada permintaan berikutnya, instans klien kredensial yang sama secara otomatis mengambil kredensial dari cache. Jika kredensial dalam cache telah kedaluwarsa, instans klien kredensial akan mengambil kembali kredensial dan memperbarui cache.
Untuk kredensial `ecs_ram_role`, alat Credentials menyegarkan cache 15 menit sebelum kredensial kedaluwarsa.
Contoh berikut membuat klien kredensial dalam pola singleton. Klien mendapatkan kredensial pada titik waktu yang berbeda untuk memverifikasi mekanisme pembaruan otomatis dan memanggil operasi OpenAPI untuk memastikan bahwa kredensial yang diperoleh valid.
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):
"""Menerapkan 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 klien ECS gagal: {e}") from e
@property
def client(self) -> Client:
return self._client
#
# Fungsi tugas
#
def execute_task():
try:
# Dapatkan kredensial dan klien ECS.
credential = Credential().client.get_credential()
ecs_client = EcsClient(Credential().client).client
# Cetak informasi kredensial.
print("Waktu:", time.strftime("%Y-%m-%d %H:%M:%S"))
print("ID AK:", credential.access_key_id)
print("Rahasia AK:", credential.access_key_secret)
print("Token STS:", credential.security_token)
# Panggil operasi API untuk mengkueri daftar wilayah.
request = DescribeRegionsRequest()
response = ecs_client.describe_regions(request)
print("Hasil pemanggilan:", response.to_map()["statusCode"])
except Exception as e:
print(f"Eksekusi klien 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. Keluar dari program.")
sys.exit(0)
def schedule_execution(delay):
task_timer = threading.Timer(delay, run_execute_task)
task_timer.start()
return task_timer
# Tentukan penundaan untuk 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()

Bagian berikut menganalisis hasil log:
Pada panggilan pertama, tidak ada informasi kredensial yang di-cache. Oleh karena itu, sistem mendapatkan kredensial berdasarkan konfigurasi. Setelah kredensial diperoleh, kredensial tersebut disimpan dalam cache.
Kredensial yang digunakan pada panggilan kedua sama dengan yang pertama. Ini menunjukkan bahwa kredensial untuk panggilan kedua diambil dari cache.
Pada panggilan ketiga, kredensial dalam cache telah kedaluwarsa. Hal ini karena periode validitas kredensial (`RoleSessionExpiration`) diatur menjadi 3.600 detik, dan panggilan ketiga terjadi 4.200 detik setelah panggilan pertama. Oleh karena itu, SDK mengambil kembali kredensial baru berdasarkan mekanisme pembaruan otomatis dan menyimpan kredensial baru ke cache.
Kredensial yang digunakan pada panggilan keempat sama dengan kredensial baru yang diperoleh pada panggilan ketiga. Ini menunjukkan bahwa kredensial dalam cache telah diperbarui setelah kedaluwarsa.
Referensi
Untuk informasi selengkapnya tentang RAM, lihat Istilah.
Untuk informasi selengkapnya tentang cara membuat Pasangan Kunci Akses, lihat Buat Pasangan Kunci Akses.
Untuk informasi selengkapnya tentang cara membuat Pengguna RAM, Pasangan Kunci Akses, peran RAM, dan kebijakan akses secara terprogram serta memberikan izin, lihat Ikhtisar SDK RAM.
Untuk informasi selengkapnya tentang cara mengasumsikan peran secara terprogram, lihat Ikhtisar SDK STS.
Untuk informasi selengkapnya tentang operasi API terkait RAM dan STS, lihat Referensi API.
Praktik terbaik untuk menggunakan kredensial akses untuk memanggil operasi API