Konfigurasikan kredensial otentikasi untuk client Alibaba Cloud Python SDK V1.0 agar dapat membuat permintaan API.
SDK mendukung lima jenis kredensial. Pilih salah satu yang sesuai dengan lingkungan penerapan Anda:
|
Jenis kredensial |
Gunakan saat |
|
AccessKey pair |
Pengembangan dan pengujian lokal dengan akun RAM user |
|
STS credentials |
Diperlukan akses berdurasi pendek, atau Anda perlu memberikan izin sementara kepada layanan lain |
|
RAM role credentials |
Aplikasi Anda mengasumsikan RAM role dan memerlukan refresh token STS secara otomatis |
|
ECS RAM role credentials |
Kode Anda berjalan pada instance ECS dengan RAM role yang telah disambungkan |
|
Default credentials |
Anda ingin SDK menemukan kredensial secara otomatis dari variabel lingkungan |
Jangan pernah menyematkan kredensial secara langsung di kode sumber atau melakukan commit ke sistem kontrol versi. Simpan kredensial di variabel lingkungan atau secrets manager.
Gunakan AccessKey pair
Gunakan metode ini untuk pengembangan dan pengujian lokal saat melakukan otentikasi sebagai RAM user. Simpan ID AccessKey dan rahasia AccessKey dalam variabel lingkungan, lalu berikan ke AcsClient.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# Inisialisasi client.
client = AcsClient(
os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Dapatkan ID AccessKey RAM user dari variabel lingkungan.
os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # Dapatkan rahasia AccessKey RAM user dari variabel lingkungan.
'<region_id>' # ID wilayah.
)
# Buat permintaan API dan atur parameter.
request = DescribeRegionsRequest()
# Kirim permintaan.
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Gunakan STS credentials
Gunakan metode ini saat Anda memerlukan akses berdurasi pendek. Security Token Service (STS) mengeluarkan kredensial keamanan sementara—berupa ID AccessKey, rahasia AccessKey, dan token keamanan—yang kedaluwarsa secara otomatis.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkecs.request.v20140526.AcceptInquiredSystemEventRequest import AcceptInquiredSystemEventRequest
cred = StsTokenCredential(
sts_access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Dapatkan ID AccessKey yang diberikan oleh STS dari variabel lingkungan.
sts_access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # Dapatkan rahasia AccessKey yang diberikan oleh STS dari variabel lingkungan.
sts_token=os.environ.get('ALIBABA_CLOUD_SECURITY_TOKEN') # Dapatkan token STS yang diberikan oleh STS dari variabel lingkungan.
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = AcceptInquiredSystemEventRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Gunakan RAM role credentials
Gunakan metode ini saat aplikasi Anda perlu mengasumsikan RAM role. Client secara otomatis meminta dan memperbarui token STS sebelum setiap panggilan API. Anda juga dapat meminta token STS secara manual dan membuat client STS.
import os
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import RamRoleArnCredential
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
cred = RamRoleArnCredential(
sts_access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'), # Dapatkan ID AccessKey RAM user dari variabel lingkungan.
sts_access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), # Dapatkan rahasia AccessKey RAM user dari variabel lingkungan.
role_arn='<ram_role_arn>',
session_role_name='<session_role_name>'
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = DescribeRegionsRequest()
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Gunakan ECS RAM role credentials
Gunakan metode ini saat kode Anda berjalan pada instance ECS dengan RAM role yang telah ditetapkan. SDK mengambil kredensial keamanan sementara secara otomatis dari titik akhir metadata instans di http://100.100.100.200/latest/meta-data/ram/security-credentials/<role_name>. Kode Anda tidak memerlukan konfigurasi kredensial tambahan.
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.auth.credentials import EcsRamRoleCredential
from aliyunsdkecs.request.v20140526.AcceptInquiredSystemEventRequest import AcceptInquiredSystemEventRequest
cred = EcsRamRoleCredential(
role_name='<ram_role_name>'
)
client = AcsClient(
region_id='<region_id>',
credential=cred
)
request = AcceptInquiredSystemEventRequest()
request.set_accept_format('json')
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Gunakan default credential
Gunakan metode ini saat Anda ingin SDK menemukan kredensial secara otomatis. SDK memeriksa variabel lingkungan ALIYUN_ACCESS_KEY_ID dan ALIYUN_ACCESS_KEY_SECRET. Jika keduanya diatur dan tidak kosong, SDK akan menggunakannya untuk membuat kredensial default.
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526.DescribeRegionsRequest import DescribeRegionsRequest
# Inisialisasi client.
client = AcsClient(
region_id='<region_id>' # ID wilayah.
)
# Buat permintaan API dan atur parameter.
request = DescribeRegionsRequest()
# Kirim permintaan.
response = client.do_action_with_exception(request)
print(str(response, encoding='utf-8'))
Praktik keamanan terbaik
Gunakan variabel lingkungan atau secrets manager. Jangan pernah menyematkan kredensial secara langsung di kode sumber atau melakukan commit ke repositori.
Terapkan prinsip hak istimewa minimal. Berikan izin hanya sebanyak yang dibutuhkan kepada RAM user dan RAM role.
Lebih baik gunakan kredensial RAM role atau ECS RAM role di lingkungan produksi. Kedua jenis kredensial ini mengeluarkan token STS berdurasi pendek dan memperbaruinya secara otomatis, sehingga mengurangi risiko kebocoran kredensial.
Putar AccessKey pair secara berkala. Cabut semua AccessKey pair yang sudah tidak digunakan.
Gunakan STS credentials untuk akses sementara. Saat memberikan akses kepada pihak ketiga atau proses berdurasi pendek, keluarkan STS credentials dengan waktu kedaluwarsa yang sesuai, bukan membagikan AccessKey pair berdurasi panjang.