Untuk menggunakan Object Storage Service (OSS) SDK for Python dalam mengirimkan permintaan, Anda harus mengonfigurasi kredensial akses yang digunakan untuk memverifikasi identitas dan izin akses Anda. Anda dapat memilih berbagai jenis kredensial akses sesuai dengan kebutuhan otentikasi dan otorisasi.
Catatan penggunaan
Untuk daftar wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir OSS.
Untuk informasi tentang cara membuat pasangan AccessKey untuk Pengguna RAM, lihat Buat Pasangan AccessKey untuk Pengguna RAM.
Sebelum mengonfigurasi kredensial akses, pastikan bahwa versi terbaru dari OSS SDK for Python telah diinstal. Untuk informasi lebih lanjut, lihat Instalasi.
Pastikan bahwa versi alibabacloud-credentials adalah 0.3.5 atau lebih baru. Versi yang lebih lama dapat menyebabkan kesalahan.
Inisialisasi penyedia kredensial
OSS mendukung berbagai metode untuk menginisialisasi penyedia kredensial. Pilih metode yang sesuai dengan kebutuhan autentikasi dan otorisasi Anda.
Metode inisialisasi | Skenario | Pasangan AccessKey atau token STS diperlukan | Kredensial dasar | Periode validitas kredensial | Metode rotasi atau pembaruan kredensial |
Aplikasi diterapkan dan dijalankan dalam lingkungan yang aman dan stabil yang tidak rentan terhadap serangan eksternal, dan memerlukan akses jangka panjang ke layanan cloud tanpa rotasi kredensial yang sering. | Ya | Pasangan AccessKey | Jangka panjang | Rotasi manual | |
Aplikasi diterapkan dan dijalankan dalam lingkungan yang tidak tepercaya, dalam hal ini Anda ingin mengelola masa berlaku kredensial dan sumber daya yang dapat diakses. | Ya | Token Layanan Keamanan (STS) | Sementara | Pembaruan manual | |
Aplikasi memerlukan akses ke layanan cloud, seperti akses lintas akun. | Ya | Token STS | Sementara | Pembaruan otomatis | |
Aplikasi diterapkan dan dijalankan pada instance Elastic Compute Service (ECS), Elastic Container Instance, atau node pekerja Container Service for Kubernetes (ACK). | Tidak | Token STS | Sementara | Pembaruan otomatis | |
Aplikasi yang tidak tepercaya diterapkan dan dijalankan pada node pekerja ACK. | Tidak | Token STS | Sementara | Pembaruan otomatis | |
Fungsi aplikasi Anda diterapkan dan dijalankan dalam Function Compute. | Tidak | Token STS | Sementara | Tidak perlu diperbarui | |
Aplikasi memerlukan kredensial akses dari sistem eksternal. | Tidak | Token STS | Sementara | Pembaruan otomatis | |
Aplikasi diterapkan dalam lingkungan di mana pasangan AccessKey memiliki risiko tinggi bocor, dan memerlukan rotasi kredensial akses yang sering untuk mendapatkan akses jangka panjang ke layanan cloud. | Tidak | Pasangan AccessKey | Jangka panjang | Rotasi otomatis | |
Jika tidak ada metode sebelumnya yang memenuhi kebutuhan Anda, Anda dapat menggunakan metode kustom untuk mendapatkan kredensial akses. | Kustom | Kustom | Kustom | Kustom |
Contoh konfigurasi untuk skenario umum
Gunakan pasangan AccessKey dari Pengguna RAM
Jika aplikasi Anda memerlukan akses jangka panjang ke OSS tanpa sering merotasi kredensial akses dan berjalan dalam lingkungan yang aman dan stabil, Anda dapat menggunakan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dari Akun Alibaba Cloud atau Pengguna RAM untuk menginisialisasi penyedia kredensial. Metode ini mengharuskan Anda memelihara pasangan AccessKey secara manual, yang menimbulkan risiko keamanan dan meningkatkan kompleksitas pemeliharaan.
Akun Alibaba Cloud memiliki izin penuh atas sumber dayanya, dan kebocoran pasangan AccessKey-nya menimbulkan risiko keamanan yang signifikan. Oleh karena itu, kami merekomendasikan agar Anda menggunakan pasangan AccessKey dari Pengguna RAM dengan izin minimum yang diperlukan untuk menginisialisasi penyedia kredensial.
Untuk informasi tentang cara membuat pasangan AccessKey untuk Pengguna RAM, lihat Buat Pasangan AccessKey untuk Pengguna RAM. Pasangan AccessKey dari Pengguna RAM hanya ditampilkan saat Pengguna RAM dibuat. Simpan pasangan AccessKey tersebut tepat waktu. Jika Anda lupa pasangan AccessKey, buat pasangan AccessKey baru untuk rotasi.
Variabel lingkungan
Konfigurasikan variabel lingkungan untuk pasangan AccessKey dari Pengguna RAM.
Linux
Jalankan perintah berikut di CLI untuk menambahkan konfigurasi variabel lingkungan ke file
~/.bashrc:echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrcJalankan perintah berikut untuk menerapkan perubahan:
source ~/.bashrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk melihat tipe shell default:
echo $SHELLKonfigurasikan variabel lingkungan berdasarkan tipe shell default.
Zsh
Jalankan perintah berikut untuk menambahkan konfigurasi variabel lingkungan ke file
~/.zshrc:echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrcJalankan perintah berikut untuk menerapkan perubahan:
source ~/.zshrcJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
Jalankan perintah berikut untuk menambahkan konfigurasi variabel lingkungan ke file
~/.bash_profile:echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profileJalankan perintah berikut untuk menerapkan perubahan:
source ~/.bash_profileJalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di CMD:
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
Jalankan perintah berikut di PowerShell:
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Untuk memastikan bahwa pengaturan dimuat, restart atau segarkan lingkungan kompilasi dan runtime Anda, seperti IDE, alat baris perintah, aplikasi desktop, dan layanan di latar belakang.
Teruskan kredensial menggunakan variabel lingkungan.
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan pasangan AccessKey dari Pengguna RAM yang diperoleh dari variabel lingkungan untuk mengonfigurasi kredensial akses. Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Kredensial statis
Contoh berikut menunjukkan cara mengkodekan kredensial akses Pengguna RAM secara langsung dalam kode:
Jangan sematkan kredensial akses dalam kode aplikasi yang diterapkan dalam lingkungan produksi. Metode ini hanya dimaksudkan untuk pengujian.
# -*- coding: utf-8 -*-
import oss2
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan nama bucket.
bucket_name = 'yourBucketName'
# Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
region = 'cn-hangzhou'
# Masukkan ID AccessKey dan Rahasia AccessKey dari Pengguna RAM.
access_key_id = 'yourAccessKeyID'
access_key_secret = 'yourAccessKeySecret'
# Gunakan pasangan AccessKey dari Pengguna RAM sebagai kredensial akses. Perhatikan bahwa AuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan.
auth = oss2.AuthV4(access_key_id, access_key_secret)
# Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# Gunakan objek bucket untuk operasi selanjutnya.Gunakan kredensial akses sementara yang disediakan oleh STS
Jika aplikasi Anda perlu mengakses Object Storage Service (OSS) secara sementara, Anda dapat menggunakan kredensial akses sementara yang disediakan oleh STS, berupa pasangan AccessKey dan token STS. Perhatikan bahwa metode ini memerlukan pemeliharaan manual untuk token STS, yang dapat menimbulkan risiko keamanan serta meningkatkan kompleksitas pemeliharaan. Jika Anda ingin memperpanjang akses setelah token STS yang ada kedaluwarsa, Anda harus memperbarui token STS secara manual.
Anda dapat memperoleh kredensial akses sementara dengan memanggil operasi API AssumeRole. Untuk informasi lebih lanjut, lihat .
Anda juga dapat memperoleh kredensial akses sementara menggunakan SDK. Untuk informasi lebih lanjut, lihat Gunakan Kredensial Akses Sementara yang Disediakan oleh STS untuk Mengakses OSS.
Anda harus menentukan periode validitas untuk token STS saat Anda menghasilkan token tersebut. Token STS yang kedaluwarsa tidak dapat digunakan.
Untuk daftar titik akhir STS, lihat Titik Akhir.
Variabel lingkungan
Konfigurasikan variabel lingkungan untuk kredensial akses sementara.
Mac OS X/Linux/Unix
PeringatanPerhatikan bahwa kredensial akses sementara (ID AccessKey, Rahasia AccessKey, dan token STS) yang disediakan oleh STS digunakan alih-alih ID AccessKey dan Rahasia AccessKey dari Pengguna RAM.
ID AccessKey yang disediakan oleh STS dimulai dengan STS. Contoh: STS.****************.
export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID> export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET> export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>Windows
PeringatanPerhatikan bahwa kredensial akses sementara (ID AccessKey, Rahasia AccessKey, dan token STS) yang disediakan oleh STS digunakan alih-alih pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dari Pengguna RAM.
ID AccessKey yang disediakan oleh STS dimulai dengan STS. Contoh: STS.****************.
set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID> set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET> set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>Teruskan informasi kredensial menggunakan variabel lingkungan.
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan ID AccessKey, Rahasia AccessKey, dan token STS sebagai kredensial akses. ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Kredensial statis
Contoh berikut menunjukkan cara mengkodekan kredensial akses sementara dalam kode:
Jangan sematkan kredensial akses dalam kode aplikasi yang diterapkan dalam lingkungan produksi. Metode ini hanya dimaksudkan untuk pengujian.
# -*- coding: utf-8 -*-
import oss2
# Tentukan ID AccessKey sementara dan Rahasia AccessKey yang disediakan oleh STS, alih-alih ID AccessKey dan Rahasia AccessKey dari Akun Alibaba Cloud.
# Perhatikan bahwa ID AccessKey yang disediakan oleh STS dimulai dengan STS.
sts_access_key_id = 'STS.****************'
sts_access_key_secret = 'yourAccessKeySecret'
# Tentukan token STS yang diperoleh dari STS.
security_token = 'yourSecurityToken'
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan nama bucket.
bucket_name = 'yourBucketName'
# Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
region = 'cn-hangzhou'
# Inisialisasi instance StsAuth. Perhatikan bahwa auth_version diatur ke v4, menunjukkan bahwa algoritma tanda tangan V4 digunakan.
auth = oss2.StsAuth(sts_access_key_id,
sts_access_key_secret,
security_token,
auth_version="v4")
# Gunakan instance StsAuth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# Gunakan objek bucket untuk operasi selanjutnya.Contoh konfigurasi untuk skenario lainnya
Gunakan ARN dari peran RAM
Jika Anda perlu memberikan otorisasi kepada aplikasi Anda untuk mengakses Object Storage Service (OSS), misalnya dalam skenario akses lintas akun, Anda dapat menggunakan Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM untuk menginisialisasi penyedia kredensial. Logika dasar metode ini adalah menggunakan token STS yang diperoleh dari STS untuk mengonfigurasi kredensial akses. Alat Kredensial memperoleh token STS berdasarkan ARN dari peran RAM dan memperbarui token STS dengan memanggil operasi AssumeRole sebelum sesi berakhir. Anda dapat menentukan kebijakan untuk membatasi izin yang diberikan kepada peran RAM.
Akun Alibaba Cloud memiliki izin penuh atas sumber dayanya, dan kebocoran pasangan AccessKey-nya menimbulkan risiko keamanan yang signifikan. Oleh karena itu, kami merekomendasikan agar Anda menggunakan pasangan AccessKey dari Pengguna RAM dengan izin minimum yang diperlukan untuk menginisialisasi penyedia kredensial.
Untuk informasi tentang cara membuat pasangan AccessKey untuk Pengguna RAM, lihat Buat Pasangan AccessKey untuk Pengguna RAM. Pasangan AccessKey dari Pengguna RAM hanya ditampilkan saat Pengguna RAM dibuat. Simpan pasangan AccessKey tersebut tepat waktu. Jika Anda lupa pasangan AccessKey, buat pasangan AccessKey baru untuk rotasi.
Anda dapat membuat peran RAM dengan memanggil operasi CreateRole. ARN dari peran RAM termasuk dalam respons. Untuk informasi lebih lanjut, lihat CreateRole.
Tambahkan dependensi alibabacloud_credentials.
pip install alibabacloud_credentialsKonfigurasikan pasangan AccessKey dan RAMRoleARN sebagai kredensial akses.
# -*- coding: utf-8 -*- import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials.models import Config from oss2 import CredentialsProvider from oss2.credentials import Credentials import os class CredentialProviderWrapper(CredentialsProvider): def __init__(self, client): self.client = client def get_credentials(self): credential = self.client.get_credential() access_key_id = credential.access_key_id access_key_secret = credential.access_key_secret security_token = credential.security_token return Credentials(access_key_id, access_key_secret, security_token) config = Config( # Dapatkan pasangan AccessKey (ID AccessKey dan Rahasia AccessKey) dari Pengguna RAM melalui variabel lingkungan. access_key_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), access_key_secret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), type='ram_role_arn', # Tentukan ARN dari peran RAM yang ingin dijalankan oleh aplikasi Anda dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. Contoh: acs:ram::123456789012****:role/adminrole role_arn='<RoleArn>', # Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME. role_session_name='<RoleSessionName>', # (Opsional) Tentukan izin terbatas. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"} policy='<Policy>', # (Opsional) Tentukan periode validitas sesi peran. role_session_expiration=3600 ) cred = Client(config) credentials_provider = CredentialProviderWrapper(cred) # Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(credentials_provider) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Gunakan peran RAM dari instance ECS
Jika aplikasi Anda berjalan pada instance ECS, Elastic Container Instance, atau node pekerja ACK, kami merekomendasikan menggunakan peran RAM dari instance ECS untuk menginisialisasi penyedia kredensial. Logika dasar metode ini adalah menggunakan token STS yang diperoleh dari STS untuk mengonfigurasi kredensial akses. Anda dapat menyambungkan peran RAM ke instance ECS, Elastic Container Instance, atau node pekerja ACK untuk secara otomatis memperbarui token STS pada instance. Metode ini tidak memerlukan pasangan AccessKey atau token STS, sehingga menghilangkan risiko terkait pengelolaan kredensial secara manual. Anda dapat membuat peran RAM dengan memanggil operasi CreateRole. ARN termasuk dalam respons. Untuk informasi lebih lanjut, lihat CreateRole.
Tambahkan dependensi alibabacloud_credentials.
pip install alibabacloud_credentialsGunakan peran RAM untuk memberikan kredensial akses.
# -*- coding: utf-8 -*- import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials.models import Config from oss2 import CredentialsProvider from oss2.credentials import Credentials class CredentialProviderWrapper(CredentialsProvider): def __init__(self, client): self.client = client def get_credentials(self): credential = self.client.get_credential() access_key_id = credential.access_key_id access_key_secret = credential.access_key_secret security_token = credential.security_token return Credentials(access_key_id, access_key_secret, security_token) config = Config( type='ecs_ram_role', # Tentukan jenis kredensial. Atur nilai menjadi ecs_ram_role. role_name='<RoleName>' # Tentukan nama peran RAM yang disambungkan ke instance ECS. Nama peran RAM bersifat opsional. Jika Anda tidak mengonfigurasi parameter ini, sistem akan mencari peran RAM secara otomatis. Kami merekomendasikan agar Anda mengonfigurasi parameter ini untuk mengurangi jumlah permintaan. ) cred = Client(config) credentials_provider = CredentialProviderWrapper(cred) # Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(credentials_provider) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Gunakan peran OIDC IdP
Setelah peran RAM dikonfigurasi pada node pekerja ACK, aplikasi dalam pod pada node tersebut dapat mengambil token STS untuk peran yang disambungkan dengan menggunakan server metadata, mirip dengan aplikasi yang diterapkan pada instance ECS. Namun, Anda mungkin tidak ingin aplikasi yang tidak tepercaya, seperti yang diajukan oleh pelanggan tanpa mengungkapkan kode aplikasi kepada Anda, mengakses server metadata untuk mendapatkan token STS dari peran RAM yang disambungkan ke node pekerja. Untuk memastikan keamanan sumber daya cloud, izinkan aplikasi yang tidak tepercaya untuk mendapatkan token STS yang diperlukan secara aman, dan meminimalkan izin tingkat aplikasi, Anda dapat menggunakan fitur RAM Roles for Service Account (RRSA). Logika dasar metode ini adalah menggunakan token STS yang diperoleh dari STS untuk mengonfigurasi kredensial akses. ACK membuat dan memasang file token OpenID Connect (OIDC) yang sesuai untuk pod aplikasi yang berbeda, dan meneruskan informasi konfigurasi terkait ke variabel lingkungan. Alat Kredensial mendapatkan informasi konfigurasi dari variabel lingkungan dan memanggil operasi AssumeRoleWithOIDC dari STS untuk mendapatkan token STS untuk peran yang disambungkan. Metode ini tidak memerlukan pasangan AccessKey atau token STS, menghilangkan risiko terkait dengan mengelola kredensial ini secara manual. Untuk informasi lebih lanjut, lihat Gunakan RRSA untuk Mengotorisasi Pod yang Berbeda untuk Mengakses Layanan Cloud yang Berbeda.
Tambahkan dependensi alibabacloud_credentials.
pip install alibabacloud_credentials
Gunakan ARN peran OIDC IdP sebagai kredensial akses.
# -*- coding: utf-8 -*- import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials.models import Config from oss2 import CredentialsProvider from oss2.credentials import Credentials import os class CredentialProviderWrapper(CredentialsProvider): def __init__(self, client): self.client = client def get_credentials(self): credential = self.client.get_credential() access_key_id = credential.access_key_id access_key_secret = credential.access_key_secret security_token = credential.security_token return Credentials(access_key_id, access_key_secret, security_token) config = Config( # Atur jenis kredensial menjadi oidc_role_arn. type='oidc_role_arn', # Tentukan ARN dari peran RAM dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN. role_arn=os.environ.get('<RoleArn>'), # Tentukan ARN dari OIDC IdP dengan menentukan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN. oidc_provider_arn=os.environ.get('<OidcProviderArn>'), # Tentukan jalur file token OIDC dengan menentukan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE. oidc_token_file_path=os.environ.get('<OidcTokenFilePath>'), # Tentukan nama sesi peran dengan menentukan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME. role_session_name='<RoleSessionName>', # (Opsional) Tentukan izin terbatas. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"} policy='<Policy>', # Tentukan periode validitas sesi. role_session_expiration=3600 ) cred = Client(config) credentials_provider = CredentialProviderWrapper(cred) # Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(credentials_provider) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Gunakan Kredensial dalam konteks Function Compute
Jika fungsi untuk aplikasi Anda diterapkan dan dijalankan dalam Function Compute, Anda dapat menginisialisasi penyedia kredensial dengan menggunakan Kredensial dalam konteks Function Compute. Logika dasar metode ini adalah menggunakan token STS yang diperoleh dari STS untuk mengonfigurasi kredensial akses. Function Compute mendapatkan token STS dengan mengasumsikan peran layanan berdasarkan peran yang dikonfigurasikan untuk fungsi tersebut. Kemudian, token STS diteruskan ke aplikasi Anda menggunakan Kredensial dalam konteks. Token STS berlaku selama 36 jam. Anda tidak dapat mengubah periode validitasnya. Fungsi dapat dieksekusi hingga 24 jam. Anda tidak perlu memperbarui token STS selama eksekusi fungsi, karena tetap valid selama eksekusi fungsi. Metode ini tidak memerlukan pasangan AccessKey atau token STS, menghilangkan risiko terkait dengan mengelola kredensial ini secara manual. Untuk informasi lebih lanjut tentang cara memberi otorisasi Function Compute untuk mengakses OSS, lihat Gunakan Peran Fungsi untuk Memberikan Izin Function Compute untuk Mengakses Layanan Cloud Lainnya.
Inisialisasi penyedia kredensial dengan menggunakan Kredensial dalam konteks Function Compute.
# -*- coding: utf-8 -*- import oss2 from oss2 import CredentialsProvider from oss2.credentials import Credentials def handler(event, context): class CredentialProviderWrapper(CredentialsProvider): def get_credentials(self): creds = context.credentials return Credentials(creds.access_key_id, creds.access_key_secret, creds.security_token) credentials_provider = CredentialProviderWrapper() # Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(credentials_provider) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya. return 'success'
Gunakan CredentialsURI
Jika aplikasi Anda perlu mengambil kredensial Alibaba Cloud dari sistem eksternal untuk menerapkan manajemen kredensial yang fleksibel dan akses tanpa kunci, Anda dapat menggunakan CredentialsURI untuk menginisialisasi penyedia kredensial. Logika dasar metode ini adalah mengonfigurasi kredensial akses menggunakan token STS yang diperoleh dari STS. Alat Kredensial mendapatkan token STS melalui URI yang ditentukan untuk menginisialisasi klien. Metode ini tidak memerlukan pasangan AccessKey atau token STS, sehingga menghilangkan risiko terkait pengelolaan kredensial secara manual.
CredentialsURI mengacu pada alamat server yang menghasilkan token STS.
Layanan backend yang menyediakan respons URI kredensial harus secara otomatis memperbarui token STS untuk memastikan bahwa aplikasi Anda selalu dapat memperoleh kredensial yang valid.
Agar Alat Kredensial dapat mem-parsing dan menggunakan token STS dengan benar, URI harus mematuhi persyaratan berikut:
Kode status respons: 200
Struktur tubuh respons:
{ "Code": "Success", "AccessKeySecret": "AccessKeySecret", "AccessKeyId": "AccessKeyId", "Expiration": "2021-09-26T03:46:38Z", "SecurityToken": "SecurityToken" }
Tambahkan dependensi alibabacloud_credentials.
pip install alibabacloud_credentialsKonfigurasikan URI sebagai kredensial akses.
# -*- coding: utf-8 -*- import oss2 from alibabacloud_credentials.client import Client from alibabacloud_credentials.models import Config from oss2 import CredentialsProvider from oss2.credentials import Credentials class CredentialProviderWrapper(CredentialsProvider): def __init__(self, client): self.client = client def get_credentials(self): credential = self.client.get_credential() access_key_id = credential.access_key_id access_key_secret = credential.access_key_secret security_token = credential.security_token return Credentials(access_key_id, access_key_secret, security_token) config = Config( type='credentials_uri', # Tentukan URI kredensial dalam format http://local_or_remote_uri/ dengan menentukan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI. credentials_uri='<CredentialsUri>', ) cred = Client(config) credentials_provider = CredentialProviderWrapper(cred) # Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(credentials_provider) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Gunakan pasangan AccessKey yang berotasi secara otomatis
Jika aplikasi Anda memerlukan akses jangka panjang ke OSS, Anda perlu merotasikan pasangan AccessKey secara manual untuk mengurangi risiko kebocoran kredensial. Dalam hal ini, Anda dapat menggunakan kunci klien untuk menginisialisasi penyedia kredensial. Logika dasar metode ini adalah menggunakan pasangan AccessKey untuk mengakses sumber daya OSS. Setelah Anda menggunakan kunci klien, Key Management Service (KMS) dapat secara otomatis dan berkala merotasikan pasangan AccessKey dari Pengguna RAM yang dikelola dan secara dinamis mengubah pasangan AccessKey statis dari Pengguna RAM. Ini mengurangi risiko kebocoran pasangan AccessKey. KMS juga mendukung rotasi segera untuk menonaktifkan pasangan AccessKey yang bocor dengan cepat. Ini menghilangkan kebutuhan untuk memelihara pasangan AccessKey secara manual dan mengurangi risiko keamanan serta kompleksitas pemeliharaan. Untuk informasi lebih lanjut tentang cara mendapatkan kunci klien, lihat Buat AAP.
Tambahkan dependensi kredensial.
pip install aliyun-secret-manager-clientBuat file konfigurasi bernama
secretsmanager.properties.# Atur jenis kredensial menjadi client_key. credentials_type=client_key # Tentukan kata sandi dekripsi kunci klien. Anda dapat membaca kata sandi dekripsi dari variabel lingkungan atau file. client_key_password_from_env_variable=<your client key private key password environment variable name> client_key_password_from_file_path=<your client key private key password file path> # Tentukan jalur file kunci privat kunci klien. client_key_private_key_path=<your client key private key file path> # Tentukan ID wilayah tempat Anda ingin menggunakan KMS. cache_client_region_id=[{"regionId":"<regionId>"}]Teruskan kredensial menggunakan file konfigurasi.
# -*- coding: utf-8 -*- import json import oss2 from oss2 import CredentialsProvider from oss2.credentials import Credentials from alibaba_cloud_secretsmanager_client.secret_manager_cache_client_builder import SecretManagerCacheClientBuilder class CredentialProviderWrapper(CredentialsProvider): def get_credentials(self): secret_cache_client = SecretManagerCacheClientBuilder.new_client() secret_info = secret_cache_client.get_secret_info("<secretName>") secret_value_json = json.loads(secret_info.secret_value) return Credentials(secret_value_json["AccessKeyId"], secret_value_json["AccessKeySecret"]) credentials_provider = CredentialProviderWrapper() # Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan. auth = oss2.ProviderAuthV4(credentials_provider) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = 'https://oss-cn-hangzhou.aliyuncs.com' # Tentukan nama bucket. bucket_name = 'yourBucketName' # Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. region = 'cn-hangzhou' # Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan. bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region) # Gunakan objek bucket untuk operasi selanjutnya.
Gunakan kredensial akses kustom
Jika metode sebelumnya tidak memenuhi persyaratan Anda, Anda dapat menentukan metode kustom untuk mendapatkan kredensial akses melalui pemanggilan operasi CredentialsProvider. Perhatikan bahwa jika implementasi didasarkan pada token STS, Anda perlu menyediakan dukungan pembaruan kredensial.
# -*- coding: utf-8 -*-
import oss2
from oss2 import CredentialsProvider
from oss2.credentials import Credentials
class CredentialProviderWrapper(CredentialsProvider):
def get_credentials(self):
# TODO
# Tentukan metode yang digunakan untuk mendapatkan kredensial akses kustom.
# Kembalikan kredensial akses jangka panjang (ID AccessKey dan Rahasia AccessKey).
return Credentials('<access_key_id>', '<access_key_secret>')
# Kembalikan kredensial akses sementara (ID AccessKey, Rahasia AccessKey, dan token.
# Perbarui kredensial akses sementara berdasarkan periode validitas.
# return Credentials('<access_key_id>', '<access_key_secret>', '<token>');
credentials_provider = CredentialProviderWrapper()
# Perhatikan bahwa ProviderAuthV4 menunjukkan bahwa algoritma tanda tangan V4 digunakan.
auth = oss2.ProviderAuthV4(credentials_provider)
# Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Tentukan nama bucket.
bucket_name = 'yourBucketName'
# Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
region = 'cn-hangzhou'
# Gunakan instance Auth untuk menginisialisasi bucket. Saat menggunakan algoritma tanda tangan V4, Anda harus menentukan parameter wilayah. Jika tidak, kesalahan akan dikembalikan.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# Gunakan objek bucket untuk operasi selanjutnya.
