全部产品
Search
文档中心

Object Storage Service:Konfigurasikan kredensial akses menggunakan OSS SDK for Python 1.0

更新时间:Aug 16, 2025

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

Gunakan pasangan AccessKey dari Pengguna RAM

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

Gunakan kredensial akses sementara yang disediakan oleh STS

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

Gunakan ARN dari peran RAM

Aplikasi memerlukan akses ke layanan cloud, seperti akses lintas akun.

Ya

Token STS

Sementara

Pembaruan otomatis

Gunakan peran RAM dari instance ECS

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

Gunakan peran OIDC IdP

Aplikasi yang tidak tepercaya diterapkan dan dijalankan pada node pekerja ACK.

Tidak

Token STS

Sementara

Pembaruan otomatis

Gunakan parameter Kredensial dalam konteks Function Compute

Fungsi aplikasi Anda diterapkan dan dijalankan dalam Function Compute.

Tidak

Token STS

Sementara

Tidak perlu diperbarui

Gunakan CredentialsURI

Aplikasi memerlukan kredensial akses dari sistem eksternal.

Tidak

Token STS

Sementara

Pembaruan otomatis

Gunakan pasangan AccessKey yang berotasi secara 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

Gunakan kredensial akses kustom

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.

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

  1. Konfigurasikan variabel lingkungan untuk pasangan AccessKey dari Pengguna RAM.

    Linux
    1. 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'" >> ~/.bashrc
      1. Jalankan perintah berikut untuk menerapkan perubahan:

        source ~/.bashrc
      2. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan telah berlaku:

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
    macOS
    1. Jalankan perintah berikut di terminal untuk melihat tipe shell default:

      echo $SHELL
    2. Konfigurasikan variabel lingkungan berdasarkan tipe shell default.

      Zsh
      1. 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'" >> ~/.zshrc
      2. Jalankan perintah berikut untuk menerapkan perubahan:

        source ~/.zshrc
      3. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
      Bash
      1. 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_profile
      2. Jalankan perintah berikut untuk menerapkan perubahan:

        source ~/.bash_profile
      3. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
    Windows
    CMD
    1. Jalankan perintah berikut di CMD:

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
    2. Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan berlaku:

      echo %OSS_ACCESS_KEY_ID%
      echo %OSS_ACCESS_KEY_SECRET%
    PowerShell
    1. 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)
    2. 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)
  2. 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.

  3. 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:

Peringatan

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.

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

  1. Konfigurasikan variabel lingkungan untuk kredensial akses sementara.

    Mac OS X/Linux/Unix

    Peringatan
    • Perhatikan 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

    Peringatan
    • Perhatikan 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>
  2. 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:

Peringatan

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.

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

  1. Tambahkan dependensi alibabacloud_credentials.

    pip install alibabacloud_credentials
  2. Konfigurasikan 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.

  1. Tambahkan dependensi alibabacloud_credentials.

    pip install alibabacloud_credentials
  2. Gunakan 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.

  1. Tambahkan dependensi alibabacloud_credentials.

    pip install alibabacloud_credentials
  1. 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.

  1. 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.

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

  1. 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"
      }
  2. Tambahkan dependensi alibabacloud_credentials.

    pip install alibabacloud_credentials
  3. Konfigurasikan 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.

  1. Tambahkan dependensi kredensial.

    pip install aliyun-secret-manager-client
  2. Buat 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>"}]
  3. 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.

FAQ

Bagaimana cara membedakan antara kredensial akses sementara yang disediakan oleh STS dan pasangan AccessKey dari Pengguna RAM saat saya menginisialisasi penyedia kredensial?

Saat Anda menggunakan kredensial akses sementara (ID AccessKey, Rahasia AccessKey, dan token STS) yang diperoleh dari STS untuk menginisialisasi penyedia kredensial, jangan keliru antara ID AccessKey yang dikembalikan oleh STS dengan ID AccessKey dari Pengguna RAM. ID AccessKey yang diperoleh dari STS dimulai dengan STS. Contoh:

image

Bagaimana cara melihat ID AccessKey dari Pengguna RAM? Dapatkah saya melihat Rahasia AccessKey dari pasangan AccessKey?

  1. Anda dapat melihat pasangan AccessKey dari Pengguna RAM dengan mengikuti langkah-langkah yang dijelaskan dalam Lihat Informasi tentang Pasangan AccessKey dari Pengguna RAM.

  2. Rahasia AccessKey dari Pengguna RAM hanya ditampilkan saat pasangan AccessKey dibuat. Anda tidak dapat melihat pasangan AccessKey tersebut di kemudian waktu. Jika Anda lupa Rahasia AccessKey, Anda tidak dapat memulihkan Rahasia AccessKey tersebut. Dalam hal ini, Anda dapat langsung membuat pasangan AccessKey baru untuk rotasi di Konsol RAM. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey.

Bagaimana cara memperbaiki kesalahan AccessDenied yang terjadi saat saya menggunakan pasangan AccessKey dari Pengguna RAM untuk mengunggah file?

Kesalahan AccessDenied biasanya terjadi karena dua alasan: pasangan AccessKey salah atau kurangnya izin unggah. Anda dapat melakukan langkah-langkah berikut untuk memecahkan masalah kesalahan AccessDenied:

  1. Periksa apakah pasangan AccessKey yang diberikan benar dengan mengikuti instruksi yang dijelaskan dalam Lihat Informasi tentang Pasangan AccessKey dari Pengguna RAM.

  2. Rahasia AccessKey dari Pengguna RAM hanya ditampilkan saat pasangan AccessKey dibuat. Anda tidak dapat melihat pasangan AccessKey tersebut di kemudian waktu. Jika Anda lupa Rahasia AccessKey, Anda tidak dapat memulihkan Rahasia AccessKey tersebut. Dalam hal ini, Anda dapat langsung membuat pasangan AccessKey baru untuk rotasi di Konsol RAM. Untuk informasi lebih lanjut, lihat Buat Pasangan AccessKey.

  3. Di Konsol RAM, periksa apakah Pengguna RAM memiliki izin untuk mengunggah file ke OSS. Jika tidak, berikan izin yang diperlukan.

Bagaimana cara memperbaiki kesalahan koneksi saat saya mengakses OSS menggunakan titik akhir OSS publik?

Jika Anda mengalami kesalahan koneksi saat mengakses OSS melalui titik akhir publik, itu mungkin disebabkan oleh titik akhir yang salah. Untuk memperbaiki kesalahan, lakukan pemeriksaan berikut:

  1. Periksa wilayah bucket di Konsol OSS.

  2. Periksa apakah titik akhir yang ditentukan adalah yang benar untuk wilayah tersebut. Misalnya, jika bucket berada di wilayah China(Hangzhou), gunakan titik akhir oss-cn-hangzhou.aliyuncs.com untuk mengaktifkan akses jaringan publik. Untuk daftar titik akhir OSS, lihat Wilayah dan Titik Akhir OSS.

  3. Periksa apakah lingkungan Anda dapat terhubung ke Internet.

Jika kesalahan dilaporkan, bagaimana cara menentukan jenis kesalahan tersebut?

OSS menyediakan kode kesalahan untuk membantu Anda menentukan jenis kesalahan tertentu. Misalnya, Anda dapat melihat 02-AUTH untuk kesalahan otentikasi umum.