All Products
Search
Document Center

Alibaba Cloud SDK:Manage access credentials

Last Updated:Aug 29, 2026

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

Instal tool Credentials

Kami menyarankan Anda menggunakan pip untuk menginstal tool Credentials:

pip install alibabacloud_credentials

Untuk 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. Didukung menunjukkan parameter yang diperlukan, - menunjukkan parameter opsional, dan Tidak didukung menandakan bahwa parameter tersebut tidak didukung.

Kami menyarankan Anda hanya menggunakan jenis dan parameter kredensial yang tercantum dalam tabel berikut.

Parameteraccess_keystsram_role_arnecs_ram_roleoidc_role_arncredentials_uribearer
access_key_id: ID AccessKey.DidukungDidukungDidukungTidak didukungTidak didukungTidak didukungTidak didukung
access_key_secret: Rahasia AccessKey.DidukungDidukungDidukungTidak didukungTidak didukungTidak didukungTidak didukung
security_token: Token Layanan Keamanan (STS).Tidak didukungDidukung-Tidak didukungTidak didukungTidak didukungTidak didukung
role_arn: Nama Sumber Daya Alibaba Cloud (ARN) dari peran Resource Access Management (RAM).Tidak didukungTidak didukungDidukungTidak didukungDidukungTidak didukungTidak didukung
role_session_name: nama sesi kustom. Format default adalah credentials-python-Timestamp saat ini.Tidak didukungTidak didukung-Tidak didukung-Tidak didukungTidak didukung
role_name: nama peran RAM.Tidak didukungTidak didukungTidak didukung-Tidak didukungTidak didukungTidak didukung
disable_imds_v1: menentukan apakah akan memaksa menggunakan mode penguatan keamanan (IMDSv2). Nilai default: False.Tidak didukungTidak didukungTidak didukung-Tidak didukungTidak didukungTidak didukung
bearer_token: token bearer.Tidak didukungTidak didukungTidak didukungTidak didukungTidak didukungTidak didukungDidukung
policy: kebijakan kustom.Tidak didukungTidak didukung-Tidak didukung-Tidak didukungTidak didukung
role_session_expiration: waktu kedaluwarsa sesi. Nilai default: 3600. Satuan: detik.Tidak didukungTidak didukung-Tidak didukung-Tidak didukungTidak didukung
oidc_provider_arn: ARN dari Penyedia Identitas OIDC (OIDC IdP).Tidak didukungTidak didukungTidak didukungTidak didukungDidukungTidak didukungTidak didukung
oidc_token_file_path: jalur ke file token OIDC.Tidak didukungTidak didukungTidak didukungTidak didukungDidukungTidak didukungTidak didukung
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.Tidak didukungTidak didukung-Tidak didukungTidak didukungTidak didukungTidak didukung
credentials_uri: URI kredensial.Tidak didukungTidak didukungTidak didukungTidak didukungTidak didukungDidukungTidak didukung
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.Tidak didukungTidak didukung-Tidak didukung-Tidak didukungTidak didukung
timeout: periode timeout baca permintaan HTTP. Nilai default: 5000. Satuan: milidetik.Tidak didukungTidak didukung----Tidak didukung
connect_timeout: periode timeout koneksi permintaan HTTP. Nilai default: 10000. Satuan: milidetik.Tidak didukungTidak didukung----Tidak didukung

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.

Penting
  • 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

Catatan

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.

Peringatan

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 True, tool Credentials hanya memperoleh kredensial dalam mode penguatan keamanan. Jika akses dalam mode penguatan keamanan gagal, pengecualian dilemparkan.

    Apakah suatu instans mendukung mode penguatan keamanan bergantung pada cara instans tersebut dikonfigurasi.

Anda juga dapat mengatur variabel lingkungan ALIBABA_CLOUD_ECS_METADATA_DISABLED=true untuk mencegah tool Credentials memperoleh kredensial dari metadata instans.

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 name dalam profiles. Secara default, sistem memberikan prioritas pada nama kredensial yang ditentukan oleh variabel lingkungan ALIBABA_CLOUD_PROFILE . Jika variabel lingkungan ini tidak dikonfigurasi, sistem menggunakan nama kredensial yang ditentukan oleh current.

profiles

Berisi kumpulan konfigurasi kredensial. Parameter mode menentukan jenis kredensial:

  • AK: Menggunakan AccessKey Pengguna RAM sebagai kredensial.

  • StsToken: Menggunakan token STS sebagai kredensial.

  • RamRoleArn: Mengasumsikan peran RAM dengan menggunakan kredensial Pengguna RAM untuk memperoleh kredensial sementara.

  • EcsRamRole: Memperoleh kredensial dari metadata instans.

  • OIDC: Memperoleh kredensial dengan menggunakan ARN penyedia OIDC, token OIDC, dan ARN peran RAM.

  • ChainableRamRoleArn: Menggunakan chaining peran untuk memperoleh kredensial baru, menggunakan kredensial awal dari profiles yang ditentukan oleh parameter source_profile.

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.

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.

Catatan

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: 200

Analisis 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