All Products
Search
Document Center

Object Storage Service:OSS Python SDK V1

Last Updated:May 28, 2026

Kami merekomendasikan OSS Python SDK V2, yang mendesain ulang autentikasi, mekanisme retry, dan penanganan error, serta menambahkan paginator, transfer manager, dan antarmuka berbasis file.

Memulai dengan cepat

Mulai menggunakan OSS Python SDK V1 dengan langkah-langkah berikut.

Persiapkan lingkungan

Instal Python

OSS Python SDK V1 kompatibel dengan Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, atau versi yang lebih baru.

Saat menginstal Python SDK di lingkungan Windows, pastikan versi Visual C++ adalah 15.0 atau lebih baru.

Instal python-devel

OSS Python SDK V1 menggunakan pustaka crcmod untuk checksum CRC. Ekstensi C-nya memerlukan header Python.h dari python-devel. Tanpa itu, SDK akan menggunakan validasi CRC berbasis pure Python, yang jauh lebih lambat untuk proses upload dan download.

Windows

Di Windows, file header yang diperlukan sudah termasuk dalam instalasi Python bawaan. Anda tidak perlu menginstal python-devel secara terpisah.

macOS

Di macOS, file header yang diperlukan sudah termasuk dalam instalasi Python bawaan. Anda tidak perlu menginstal python-devel secara terpisah.

CentOS

Untuk menginstal python-devel, jalankan perintah berikut.

yum install python-devel

RHEL

Untuk menginstal python-devel, jalankan perintah berikut.

yum install python-devel

Fedora

Untuk menginstal python-devel, jalankan perintah berikut.

yum install python-devel

Debian

Untuk menginstal python-devel, jalankan perintah berikut.

apt-get install python-dev

Ubuntu

Untuk menginstal python-devel, jalankan perintah berikut.

apt-get install python-dev

Instal SDK

Instal SDK menggunakan salah satu metode berikut. Gunakan versi terbaru untuk memastikan kompatibilitas dengan contoh kode.

Instal dengan pip

  1. Instal pip. pip diinstal secara default bersama Python 2.7.9 atau lebih baru, atau Python 3.4 atau lebih baru.

  2. Untuk menginstal versi SDK terbaru, jalankan perintah berikut.

    pip install oss2                   

Instal dari sumber

  1. Unduh versi terbaru SDK dari GitHub, ekstrak paketnya, lalu masuk ke direktori tersebut. Pastikan direktori tersebut berisi file setup.py.

    Untuk mengunduh versi sebelumnya dari OSS Python SDK V1, lihat Riwayat Rilis.

  2. Untuk menginstal SDK, jalankan perintah berikut.

    python setup.py install                   

Konfigurasi kredensial akses

Konfigurasikan kredensial akses dengan Pasangan AccessKey pengguna RAM.

  1. Di Konsol RAM, buat pengguna RAM dengan Permanent AccessKey Pair. Simpan pasangan AccessKey tersebut dan berikan izin AliyunOSSFullAccess kepada pengguna.

  2. Gunakan pasangan AccessKey pengguna RAM untuk mengonfigurasi variabel lingkungan.

    Linux

    1. Jalankan perintah berikut di antarmuka baris perintah untuk menambahkan pengaturan 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
    2. Jalankan perintah berikut untuk menerapkan perubahan.

      source ~/.bashrc
    3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Jalankan perintah berikut di terminal untuk melihat jenis shell default.

      echo $SHELL
    2. Lakukan operasi berikut berdasarkan jenis shell default.

      Zsh
      1. Jalankan perintah berikut untuk menambahkan pengaturan 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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET
      Bash
      1. Jalankan perintah berikut untuk menambahkan pengaturan 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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Inisialisasi klien

Sebagian besar operasi dengan OSS Python SDK V1 menggunakan kelas oss2.Service dan oss2.Bucket.

  • Kelas oss2.Service mencantumkan bucket. Tidak mendukung akses melalui nama domain kustom.

  • Kelas oss2.Bucket mengupload, mendownload, dan menghapus file, serta mengonfigurasi berbagai pengaturan bucket.

Penting

Karena adanya perubahan kebijakan untuk meningkatkan kepatuhan dan keamanan, mulai 20 Maret 2025, pengguna OSS baru harus menggunakan nama domain kustom (CNAME) untuk melakukan operasi API data pada bucket OSS yang berlokasi di wilayah Tiongkok Daratan. Titik akhir publik default dibatasi untuk operasi ini. Lihat pengumuman resmi untuk daftar lengkap operasi yang terdampak. Jika Anda mengakses data melalui HTTPS, Anda harus mengikat Sertifikat SSL yang valid ke domain kustom Anda. Ini wajib untuk akses Konsol OSS, karena konsol menerapkan HTTPS.

Inisialisasi instans bucket

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual Anda, seperti ap-southeast-1.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Contoh kode untuk menginisialisasi klien dengan OSS Python SDK V1

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    # Muat kredensial akses dari variabel lingkungan. Anda harus mengatur variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # Atur wilayah layanan OSS.
    region = "<region-id>"
    # Atur titik akhir.
    endpoint = "<endpoint>"
    # Atur nama bucket.
    bucket_name = "example-bucket"

    # Inisialisasi instans Bucket OSS.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Cantumkan file dalam bucket.
    print("=== Daftar file dalam bucket ===")
    try:
        # Gunakan metode list_objects untuk mencantumkan file.
        result = bucket.list_objects()
        
        # Iterasi melalui daftar file dan cetak hanya nama file-nya.
        for obj in result.object_list:
            print(obj.key)
        
        # Cetak statistik.
        print(f"\nTotal file yang dicantumkan: {len(result.object_list)}")
        if result.is_truncated:
            print("Catatan: Hasil dipotong. Masih ada file lain yang tersedia.")
            
    except oss2.exceptions.OssError as e:
        print(f"Kesalahan OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        raise

if __name__ == "__main__":
    # Titik masuk program.
    try:
        main()
    except Exception as e:
        print(f"Terjadi kesalahan selama eksekusi: {e}")
        raise

Inisialisasi instans layanan

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual Anda, seperti ap-southeast-1.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Contoh kode untuk menginisialisasi instans Service dengan OSS Python SDK V1

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    # Muat kredensial akses dari variabel lingkungan. Anda harus mengatur variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    # Atur wilayah layanan OSS.
    region = "<region-id>"
    # Atur titik akhir.
    endpoint = "<endpoint>"

    # Inisialisasi instans Service OSS.
    service = oss2.Service(auth, endpoint, region=region)
    
    # Cantumkan semua bucket.
    print("=== Daftar semua bucket ===")
    try:
        # Gunakan BucketIterator untuk mencantumkan bucket.
        buckets = [b.name for b in oss2.BucketIterator(service)]
        
        # Iterasi melalui daftar bucket dan cetak hanya nama bucket-nya.
        for bucket in buckets:
            print(bucket)
        
        # Cetak statistik.
        print(f"\nTotal bucket yang dicantumkan: {len(buckets)}")
            
    except oss2.exceptions.OssError as e:
        print(f"Kesalahan OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        raise

if __name__ == "__main__":
    # Titik masuk program.
    try:
        main()
    except Exception as e:
        print(f"Terjadi kesalahan selama eksekusi: {e}")
        raise

Konfigurasi klien

Sesuaikan parameter seperti titik akhir, timeout, dan ukuran kolam koneksi saat menginisialisasi klien OSS.

Gunakan nama domain internal

Untuk mengakses OSS melalui jaringan internal, gunakan nama domain internal sebagai titik akhir.

Ganti placeholder <region-id> dalam kode dengan wilayah aktual, seperti ap-southeast-1.
endpoint = "oss-<region-id>-internal.aliyuncs.com"

# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)

Gunakan nama domain kustom

Untuk menggunakan nama domain kustom, atur titik akhir ke domain Anda dan aktifkan is_cname=True.

Petakan nama domain kustom Anda ke bucket Anda sebelum menggunakannya. Akses OSS Menggunakan Nama Domain Kustom.
# Atur nama domain kustom.
endpoint = "http://example.com"

# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, is_cname=True, region=region)

Kontrol timeout

Atur parameter connect_timeout (dalam detik) saat menginisialisasi klien. Nilai default: 60 detik.

# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, connect_timeout=30, region=region)

Ukuran kolam koneksi

Sesuaikan ukuran kolam koneksi dengan parameter pool_size dari objek session.

# Atur ukuran kolam koneksi. Nilai default adalah 10.
session = oss2.Session(pool_size=20)

# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, session=session, region=region)

Versi TLS

Untuk menentukan versi TLS, buat sesi dengan menggunakan SSLAdapter kustom.

Python SDK versi 2.18.1 dan yang lebih baru memungkinkan Anda menentukan versi TLS.
import ssl
from requests.adapters import HTTPAdapter

# Definisikan adapter kustom untuk menentukan versi TLS.
class SSLAdapter(HTTPAdapter):
    def init_poolmanager(self, *args, **http_client_config):
        # Tentukan TLS 1.2.
        http_client_config["ssl_version"] = ssl.PROTOCOL_TLSv1_2
        return super(SSLAdapter, self).init_poolmanager(*args, **http_client_config)
        
# Buat sesi dengan menggunakan SSLAdapter.
session = oss2.Session(adapter=SSLAdapter())

# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, session=session, region=region)

Nonaktifkan pemeriksaan CRC

Untuk menonaktifkan pemeriksaan integritas data CRC, atur parameter enable_crc=False.

Penting

Pertahankan CRC tetap diaktifkan. Menonaktifkannya berarti OSS tidak dapat menjamin integritas data selama proses upload dan download.

# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, enable_crc=False, region=region)

Versi Tanda Tangan

Penting

Signature V1 Alibaba Cloud Object Storage akan dihentikan sesuai jadwal berikut. Kami merekomendasikan agar Anda segera upgrade ke signature V4 untuk memastikan layanan Anda tidak terganggu.

  • Per 1 Maret 2025, pengguna baru tidak dapat menggunakan signature V1.

  • Per 1 September 2025, kami akan menghentikan dukungan dan pemeliharaan untuk signature V1, dan Anda tidak dapat membuat bucket baru yang menggunakannya.

Contoh berikut menginisialisasi klien dengan signature V1. Untuk inisialisasi signature V4, lihat Inisialisasi Klien.

Sebelum menjalankan kode contoh, ganti placeholder seperti <endpoint> dengan wilayah dan titik akhir aktual Anda, seperti https://oss-ap-southeast-1.aliyuncs.com.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Contoh kode inisialisasi klien OSS Python SDK V1
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    # Muat kredensial akses dari variabel lingkungan. Anda harus mengatur variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
    auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

    # Atur titik akhir.
    endpoint = "<endpoint>"
    # Atur nama bucket.
    bucket_name = "example-bucket"

    # Inisialisasi instans bucket OSS.
    bucket = oss2.Bucket(auth, endpoint, bucket_name)
    
    # Cantumkan file dalam bucket.
    print("=== Daftar file dalam bucket ===")
    try:
        # Cantumkan file dengan menggunakan metode list_objects().
        result = bucket.list_objects()
        
        # Iterasi melalui daftar objek dan cetak key setiap objek.
        for obj in result.object_list:
            print(obj.key)
        
        # Cetak statistik.
        print(f"\nTotal file yang dicantumkan: {len(result.object_list)}")
        if result.is_truncated:
            print("Catatan: Hasil dipotong. Masih ada file lain yang tersedia.")
            
    except oss2.exceptions.OssError as e:
        print(f"Kesalahan OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        raise

if __name__ == "__main__":
    # Titik masuk program.
    try:
        main()
    except Exception as e:
        print(f"Terjadi kesalahan saat menjalankan program: {e}")
        raise

Nama aplikasi kustom

Atur parameter app_name untuk menambahkan pengenal kustom ke header User-Agent. Nilai default: string kosong.

Nama aplikasi dikirimkan sebagai nilai header HTTP dan harus mematuhi standar HTTP.
# Inisialisasi instans bucket OSS.
bucket = oss2.Bucket(auth, endpoint, bucket_name, app_name="client_test", region=region)

Kode contoh

OSS Python SDK V1 menyediakan contoh kode untuk manajemen bucket, operasi objek, kontrol akses, dan transfer terenkripsi. Gunakan sebagai referensi atau integrasikan ke dalam aplikasi Anda.

Kode contoh GitHub

Kode contoh dokumentasi

bucket.py

bucket_cname.py

Petakan nama domain kustom (Python SDK V1)

bucket_cors.py

Berbagi sumber daya lintas origin (CORS) (Python SDK V1)

bucket_inventory.py

Inventaris (Python SDK V1)

bucket_logging.py

Logging (Python SDK V1)

bucket_meta_query.py

Kueri metadata bucket (Python SDK V1)

bucket_policy.py

Kebijakan

bucket_referer.py

Proteksi hotlink (Python SDK V1)

bucket_replication.py

Replikasi (Python SDK V1)

bucket_symlink.py

Kelola tautan simbolik (Python SDK V1)

bucket_tagging.py

Tagging bucket (Python SDK V1)

bucket_transfer_acceleration.py

Akselerasi transfer (Python SDK V1)

bucket_versioning.py

Kelola pengendalian versi (Python SDK V1)

bucket_website.py

Hosting situs statis

bucket_worm.py

Kebijakan retensi

download.py

image.py

Pemrosesan gambar (Python SDK V1)

object_basic.py

object_callback.py

Callback upload (Python SDK V1)

object_check.py

Pemeriksaan integritas data (Python SDK V1)

object_crypto.py

Enkripsi sisi klien (Python SDK V1)

object_extra.py

Atur metadata yang ditentukan pengguna

object_forbid_overwrite.py

Cegah penimpaan objek (Python SDK V1)

object_operation.py

object_post.py

Pasca-unggah

object_progress.py

object_request_payment.py

Pembayaran oleh peminta (Python SDK V1)

object_restore.py

Pulihkan objek (Python SDK V1)

server_side_encryption.py

Enkripsi sisi server (Python SDK V1)

object_storage_type.py

Ubah kelas penyimpanan objek (Python SDK V1)

sts.py

Akses dengan token STS (Python SDK V1)

object_tagging.py

select_csv.py

Kueri objek (Python SDK V1)

traffic_limit.py

Batasi laju transfer koneksi (Python SDK V1)

upload.py

Kueri informasi titik akhir

Kueri informasi titik akhir untuk semua wilayah yang tersedia atau wilayah tertentu, termasuk titik akhir publik (IPv4), internal, dan akselerasi transfer.

Catatan

Python SDK versi 2.18.0 dan yang lebih baru mendukung kueri informasi titik akhir.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual Anda, seperti ap-southeast-1.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# Contoh kode untuk mengkueri informasi titik akhir menggunakan OSS Python SDK

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    print("=== Mengkueri informasi titik akhir untuk semua wilayah yang didukung ===\n")
    
    # Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengatur variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Tentukan titik akhir untuk wilayah tempat bucket Anda berada.
    endpoint = "<endpoint>"
    
    # Tentukan wilayah yang sesuai dengan titik akhir. Parameter ini wajib saat menggunakan Signature V4.
    region = "<region-id>"
    
    # Inisialisasi instans Service OSS.
    service = oss2.Service(auth, endpoint, region=region)
    
    try:
        # Kueri informasi titik akhir untuk semua wilayah yang didukung.
        result = service.describe_regions()
        
        # Iterasi melalui informasi wilayah.
        for r in result.regions:
            print(f"Wilayah: {r.region}")
            print(f"  Titik Akhir Publik (IPv4): {r.internet_endpoint}")
            print(f"  Titik Akhir Internal (Jaringan Klasik atau VPC): {r.internal_endpoint}")
            print(f"  Titik Akhir Akselerasi Transfer: {r.accelerate_endpoint}")
            print("-" * 80)
        
        # Cetak statistik.
        print(f"\nDitemukan informasi titik akhir untuk {len(result.regions)} wilayah.")
            
    except oss2.exceptions.OssError as e:
        print(f"Kesalahan OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        raise

if __name__ == "__main__":
    # Titik masuk program.
    try:
        main()
    except Exception as e:
        print(f"Terjadi kesalahan selama eksekusi: {e}")
        raise

Untuk mengkueri informasi titik akhir untuk wilayah tertentu, tentukan ID wilayah spesifik OSS dalam metode describe_regions.

result = service.describe_regions("oss-<region-id>")

Konfigurasi kredensial

OSS mendukung beberapa metode inisialisasi kredensial. Pilih salah satu berdasarkan kebutuhan autentikasi Anda.

Anda harus menggunakan versi 0.3.5 atau lebih baru dari alibabacloud-credentials. Menggunakan versi yang lebih lama akan menghasilkan error.

Pilih jenis kredensial

Metode inisialisasi

Skenario

Pra-konfigurasi

Jenis kredensial

Validitas

Rotasi atau Penyegaran

Gunakan Access Key (AK) pengguna RAM

Untuk aplikasi di lingkungan aman yang memerlukan akses jangka panjang ke layanan cloud tanpa rotasi kredensial yang sering.

Ya

Access Key (AK)

Jangka panjang

Rotasi manual

Gunakan kredensial akses sementara dari Security Token Service (STS)

Untuk aplikasi di lingkungan tidak tepercaya yang memerlukan kredensial dengan masa berlaku terbatas dan izin spesifik.

Ya

Token STS

Sementara

Refresh manual

Gunakan ARN peran RAM

Untuk aplikasi yang memerlukan akses berwenang ke layanan cloud, seperti akses lintas akun.

Ya

Token STS

Sementara

Auto-refresh

Gunakan peran RAM instans ECS

Untuk aplikasi yang berjalan di instans Alibaba Cloud Elastic Compute Service (ECS), instans Elastic Container Instance (ECI), atau node pekerja Container Service for Kubernetes (ACK).

Tidak

Token STS

Sementara

Auto-refresh

Gunakan ARN peran OIDC

Untuk aplikasi tidak tepercaya yang berjalan di node pekerja Alibaba Cloud Container Service for Kubernetes (ACK).

Tidak

Token STS

Sementara

Auto-refresh

Gunakan kredensial dari konteks Function Compute (FC)

Untuk fungsi yang berjalan di Alibaba Cloud Function Compute (FC).

Tidak

Token STS

Sementara

Tidak perlu refresh

Gunakan URI kredensial

Untuk aplikasi yang perlu mendapatkan kredensial dari sistem eksternal.

Tidak

Token STS

Sementara

Auto-refresh

Gunakan Access Key (AK) yang diputar-otomatis

Untuk aplikasi yang dideploy di lingkungan dengan risiko kebocoran Access Key (AK) dan memerlukan rotasi kredensial yang sering untuk akses jangka panjang ke layanan cloud.

Tidak

Access Key (AK)

Jangka panjang

Putar-otomatis

Gunakan penyedia kredensial kustom

Jika metode di atas tidak memenuhi kebutuhan Anda, Anda dapat mendefinisikan metode kustom untuk mendapatkan kredensial.

Kustom

Kustom

Kustom

Kustom

AK Pengguna RAM

Cocok untuk lingkungan yang aman dan stabil yang memerlukan akses OSS jangka panjang tanpa rotasi kredensial yang sering. Inisialisasi penyedia kredensial dengan AccessKey (AK) pengguna RAM. Ini memerlukan pemeliharaan AK secara manual, yang menimbulkan risiko keamanan.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Jika AK-nya bocor, sistem Anda berisiko. Gunakan AK pengguna RAM dengan izin minimum yang diperlukan.

  • Untuk membuat AK untuk pengguna RAM, lihat Buat AccessKey. ID AccessKey dan Secret AccessKey hanya ditampilkan saat pembuatan. Jika Anda lupa, buat yang baru.

Variabel lingkungan

  1. Konfigurasikan variabel lingkungan menggunakan Access Key (AK) pengguna RAM.

    Linux

    1. Jalankan perintah berikut di antarmuka baris perintah untuk menambahkan pengaturan 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
    2. Jalankan perintah berikut untuk menerapkan perubahan.

      source ~/.bashrc
    3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. Jalankan perintah berikut di terminal untuk melihat jenis shell default.

      echo $SHELL
    2. Lakukan operasi berikut berdasarkan jenis shell default.

      Zsh

      1. Jalankan perintah berikut untuk menambahkan pengaturan 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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

      Bash

      1. Jalankan perintah berikut untuk menambahkan pengaturan 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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      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 memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. Mulai ulang atau refresh IDE, CLI, dan lingkungan runtime lainnya setelah memodifikasi variabel lingkungan untuk memuat nilai baru.

  3. Gunakan variabel lingkungan untuk menyediakan kredensial.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    # OSS Python SDK V1: Contoh kode untuk inisialisasi klien
    
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    def main():
    
        # Muat kredensial akses dari variabel lingkungan. Anda harus mengatur OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
        auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
        # Atur wilayah layanan OSS.
        region = "<region-id>"
        # Atur titik akhir.
        endpoint = "<endpoint>"
        # Atur nama bucket.
        bucket_name = "example-bucket-hz"
    
        # Inisialisasi instans Bucket OSS.
        bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
        
        # Cantumkan objek dalam bucket.
        print("=== Daftar objek dalam bucket ===")
        try:
            # Gunakan metode list_objects untuk mencantumkan objek.
            result = bucket.list_objects()
            
            # Iterasi melalui daftar objek dan cetak hanya key objek-nya.
            for obj in result.object_list:
                print(obj.key)
            
            # Cetak statistik.
            print(f"\nTotal objek yang dicantumkan: {len(result.object_list)}")
            if result.is_truncated:
                print("Catatan: Hasil dipotong. Objek lain tidak dicantumkan.")
                
        except oss2.exceptions.OssError as e:
            print(f"Kesalahan OSS: {e}")
            raise
        except Exception as e:
            print(f"Terjadi kesalahan: {e}")
            raise
    
    if __name__ == "__main__":
        # Titik masuk program.
        try:
            main()
        except Exception as e:
            print(f"Terjadi kesalahan selama eksekusi: {e}")
            raise
    

Kredensial statis

Kode contoh berikut menunjukkan cara menyematkan kredensial langsung di aplikasi Anda.

Penting

Jangan menyematkan kredensial di aplikasi di lingkungan produksi. Metode ini hanya untuk tujuan pengujian.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# OSS Python SDK V1: Contoh kode untuk inisialisasi klien

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    # Tentukan ID AccessKey dan Secret AccessKey pengguna RAM.
    access_key_id = 'yourAccessKeyID'
    access_key_secret = 'yourAccessKeySecret'
    # Konfigurasikan kredensial akses menggunakan Access Key (AK) pengguna RAM.
    auth = oss2.AuthV4(access_key_id, access_key_secret)
    # Atur wilayah layanan OSS.
    region = "<region-id>"
    # Atur titik akhir.
    endpoint = "<endpoint>"
    # Atur nama bucket.
    bucket_name = "example-bucket-hz"

    # Inisialisasi instans Bucket OSS.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Cantumkan objek dalam bucket.
    print("=== Daftar objek dalam bucket ===")
    try:
        # Gunakan metode list_objects untuk mencantumkan objek.
        result = bucket.list_objects()
        
        # Iterasi melalui daftar objek dan cetak hanya key objek-nya.
        for obj in result.object_list:
            print(obj.key)
        
        # Cetak statistik.
        print(f"\nTotal objek yang dicantumkan: {len(result.object_list)}")
        if result.is_truncated:
            print("Catatan: Hasil dipotong. Objek lain tidak dicantumkan.")
            
    except oss2.exceptions.OssError as e:
        print(f"Kesalahan OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi kesalahan: {e}")
        raise

if __name__ == "__main__":
    # Titik masuk program.
    try:
        main()
    except Exception as e:
        print(f"Terjadi kesalahan selama eksekusi: {e}")
        raise

Kredensial sementara STS

Cocok untuk aplikasi yang memerlukan akses OSS sementara. Inisialisasi penyedia kredensial dengan kredensial sementara (ID AccessKey, Secret AccessKey, dan token keamanan) dari STS. Anda harus merefresh token STS secara manual sebelum masa berlakunya habis.

Penting

Variabel lingkungan

  1. Atur variabel lingkungan menggunakan kredensial akses sementara.

    macOS, Linux, dan Unix

    Penting
    • Gunakan kredensial akses sementara (ID Access Key, Secret Access Key, dan token keamanan) yang diperoleh dari STS, bukan Access Key (AK) pengguna RAM.

    • ID Access Key yang diperoleh dari STS diawali dengan "STS.", misalnya, "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

    Penting
    • Gunakan kredensial akses sementara (ID Access Key, Secret Access Key, dan token keamanan) yang diperoleh dari STS, bukan Access Key (AK) pengguna RAM.

    • ID Access Key yang diperoleh dari STS diawali dengan "STS.", misalnya, "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. Sediakan kredensial menggunakan variabel lingkungan.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Konfigurasikan kredensial akses dengan menggunakan AK STS, SK, dan Token Keamanan dari variabel lingkungan.
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Gunakan objek bucket untuk operasi selanjutnya...

Kredensial statis

Anda dapat menyematkan kredensial langsung di aplikasi dan secara eksplisit mengatur kunci akses sementara.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
# -*- coding: utf-8 -*-
import oss2

# Tentukan ID AccessKey sementara dan Secret AccessKey yang diperoleh dari STS, bukan ID AccessKey dan Secret AccessKey akun Alibaba Cloud Anda.
# Perhatikan bahwa ID Access Key yang diperoleh dari STS diawali dengan "STS."
sts_access_key_id = 'STS.****************'
sts_access_key_secret = 'yourAccessKeySecret'
# Tentukan token keamanan yang diperoleh dari STS.
security_token = 'yourSecurityToken'

# yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
endpoint = '<endpoint>'

# yourBucketName menentukan nama bucket.
bucket_name = 'yourBucketName'

# Tentukan wilayah tempat bucket berada.
region = '<region-id>'

# Inisialisasi instance StsAuth. Perhatikan bahwa mengatur auth_version ke "v4" mengaktifkan signature V4 OSS.
auth = oss2.StsAuth(sts_access_key_id,
                    sts_access_key_secret,
                    security_token,
                    auth_version="v4")

# Inisialisasi bucket menggunakan instance StsAuth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
# jika tidak, akan terjadi error.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)

# Gunakan objek bucket untuk operasi selanjutnya...

ARN peran RAM

Cocok untuk akses lintas akun. Inisialisasi penyedia kredensial dengan ARN peran RAM. Alat kredensial secara otomatis merefresh token STS dengan memanggil AssumeRole sebelum masa berlakunya habis. Anda dapat mengatur parameter policy untuk membatasi izin lebih lanjut.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas semua sumber daya. Jika AK-nya bocor, sistem Anda berisiko. Gunakan AK pengguna RAM dengan izin minimum yang diperlukan.

  • Untuk membuat AK untuk pengguna RAM, lihat Buat AccessKey. ID AccessKey dan Secret AccessKey hanya ditampilkan saat pembuatan. Jika Anda lupa, buat yang baru.

  • Untuk mendapatkan ARN peran RAM, lihat Buat peran RAM.

  1. Tambahkan dependensi kredensial.

    pip install alibabacloud_credentials
  2. Konfigurasikan Access Key (AK) dan ARN peran RAM sebagai kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- 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 Access Key (ID AccessKey dan Secret AccessKey) pengguna RAM dari 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',
        # ARN peran RAM yang akan diasumsikan. Contoh: acs:ram::123456789012****:role/adminrole. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
        role_arn='<RoleArn>',
        # Nama sesi peran. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        role_session_name='<RoleSessionName>',
        # Opsional. Kebijakan izin yang lebih restriktif. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy='<Policy>',
        # Opsional. Masa berlaku sesi peran.
        role_session_expiration=3600
    )
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Gunakan objek bucket untuk operasi selanjutnya...

Peran RAM instans ECS

Cocok untuk aplikasi di instans ECS, instans ECI, atau node pekerja Container Service for Kubernetes (ACK). Peran RAM instans ECS memungkinkan refresh otomatis token STS di instans ECS, instans ECI, atau node pekerja Container Service for Kubernetes (ACK) tanpa menyediakan AK atau token STS. Untuk mendapatkan peran, lihat Buat peran RAM. Untuk melampirkannya ke instans, lihat Peran RAM instans.

  1. Tambahkan dependensi kredensial.

    pip install alibabacloud_credentials
  2. Konfigurasikan peran RAM instans ECS sebagai kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- 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',      # Jenis kredensial. Nilai tetap: ecs_ram_role.
        role_name='<RoleName>'    # Nama peran RAM yang dilampirkan ke instans ECS. Opsional. Jika tidak diatur, akan diambil secara otomatis. Kami sangat menyarankan mengatur parameter ini untuk mengurangi permintaan.
    )
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Gunakan objek bucket untuk operasi selanjutnya...

ARN peran OIDC

Saat aplikasi tidak tepercaya berjalan di node pekerja ACK, gunakan RRSA untuk mencegahnya mendapatkan token STS peran RAM instans node. Kluster memasang file token OIDC service account per pod dan menyuntikkan konfigurasi ke variabel lingkungan. Alat kredensial menukar token OIDC menjadi token STS melalui AssumeRoleWithOIDC, tanpa memerlukan AK atau token STS. Konfigurasikan izin RAM untuk ServiceAccount guna mengimplementasikan isolasi izin pod dengan RRSA.

  1. Tambahkan dependensi kredensial.

    pip install alibabacloud_credentials
  2. Konfigurasikan peran OIDC sebagai kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- 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(
        # Jenis kredensial. Nilai tetap: oidc_role_arn.
        type='oidc_role_arn',
        # ARN peran RAM. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
        role_arn=os.environ.get('<RoleArn>'),
        # ARN penyedia OIDC. Anda dapat mengatur OidcProviderArn menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
        oidc_provider_arn=os.environ.get('<OidcProviderArn>'),
        # Jalur file token OIDC. Anda dapat mengatur OidcTokenFilePath menggunakan variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
        oidc_token_file_path=os.environ.get('<OidcTokenFilePath>'),
        # Nama sesi peran. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        role_session_name='<RoleSessionName>',
        # Opsional. Kebijakan izin yang lebih restriktif. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy='<Policy>',
        # Masa berlaku sesi.
        role_session_expiration=3600
    )
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Gunakan objek bucket untuk operasi selanjutnya...

Konteks Function Compute

Cocok untuk fungsi yang berjalan di FC. FC mengasumsikan peran layanan untuk mendapatkan token STS (berlaku 36 jam) dan meneruskannya melalui parameter Credentials konteks. Karena waktu eksekusi fungsi maksimum adalah 24 jam, token tidak kedaluwarsa selama eksekusi, sehingga tidak perlu refresh. Untuk memberikan izin FC mengakses OSS, lihat Gunakan peran fungsi untuk memberikan izin Function Compute mengakses layanan cloud lainnya.

Inisialisasi penyedia kredensial dengan kredensial dari konteks FC.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
# -*- 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 penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)

    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'

    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'

    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'

    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)

    # Gunakan objek bucket untuk operasi selanjutnya...

    return 'success'

URI kredensial

Cocok untuk aplikasi yang mendapatkan kredensial dari sistem eksternal. Alat kredensial mengambil token STS dari URI yang disediakan dan menangani refresh otomatis.

Penting
  • URI kredensial adalah alamat server tempat mendapatkan token STS.

  • Layanan backend yang menyediakan respons URI kredensial harus mengimplementasikan logika refresh otomatis token STS untuk memastikan aplikasi selalu mendapatkan kredensial yang valid.

  1. Untuk memastikan alat kredensial dapat mengurai dan menggunakan token STS dengan benar, respons URI harus mematuhi protokol berikut:

    • Kode status respons: 200

    • Struktur isi respons:

      {
          "Code": "Success",
          "AccessKeySecret": "AccessKeySecret",
          "AccessKeyId": "AccessKeyId",
          "Expiration": "2021-09-26T03:46:38Z",
          "SecurityToken": "SecurityToken"
      }
  2. Tambahkan dependensi kredensial.

    pip install alibabacloud_credentials
  3. Konfigurasikan URI kredensial sebagai kredensial akses.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- 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',
        # URI untuk kredensial, dalam format http://local_or_remote_uri/. Anda dapat mengatur CredentialsUri menggunakan variabel lingkungan ALIBABA_CLOUD_CREDENTIALS_URI.
        credentials_uri='<CredentialsUri>',
    )
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Gunakan objek bucket untuk operasi selanjutnya...

AK yang diputar-otomatis

Cocok untuk lingkungan di mana AK berisiko dikompromikan. Inisialisasi penyedia kredensial dengan ClientKey dari KMS, yang secara otomatis memutar AK pengguna RAM yang dikelola. KMS juga mendukung rotasi segera jika AK dikompromikan. Untuk mendapatkan ClientKey, lihat Buat Titik Akses Aplikasi.

  1. Tambahkan dependensi klien Secrets Manager.

    pip install aliyun-secret-manager-client
  2. Buat file konfigurasi bernama secretsmanager.properties.

    # Jenis kredensial akses. Nilai tetap: client_key
    credentials_type=client_key
    
    # Kata sandi dekripsi untuk ClientKey. Anda dapat membacanya dari variabel lingkungan atau file. Atur hanya satu.
    client_key_password_from_env_variable=<nama variabel lingkungan kata sandi kunci privat client key Anda>
    client_key_password_from_file_path=<jalur file kata sandi kunci privat client key Anda>
    
    # Jalur ke file kunci privat ClientKey.
    client_key_private_key_path=<jalur file kunci privat client key Anda>
    
    # Wilayah KMS terkait.
    cache_client_region_id=[{"regionId":"<regionId>"}]
  3. Gunakan file konfigurasi untuk menyediakan informasi kredensial.

    Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- 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 penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
    # jika tidak, akan terjadi error.
    bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
    
    # Gunakan objek bucket untuk operasi selanjutnya...

Penyedia kredensial kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat mendefinisikan penyedia kredensial kustom dengan mengimplementasikan antarmuka CredentialProvider. Jika implementasi Anda menggunakan token STS, Anda juga harus menangani refresh kredensial.

Sebelum menjalankan kode contoh, ganti placeholder seperti <region-id> dengan wilayah dan titik akhir aktual. Misalnya, ganti <region-id> dengan ap-southeast-1.
# -*- coding: utf-8 -*-
import oss2
from oss2 import CredentialsProvider
from oss2.credentials import Credentials

class CredentialProviderWrapper(CredentialsProvider):
    def get_credentials(self):
        # TODO
        # Implementasikan metode kustom Anda untuk mendapatkan kredensial akses.

        # Kembalikan kredensial jangka panjang: access_key_id, access_key_secret
        return Credentials('<access_key_id>', '<access_key_secrect>')

        # Kembalikan kredensial sementara: access_key_id, access_key_secret, token
        # Untuk kredensial sementara, Anda perlu merefresh berdasarkan waktu kedaluwarsanya.
        # return Credentials('<access_key_id>', '<access_key_secrect>', '<token>');

credentials_provider = CredentialProviderWrapper()

# Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
auth = oss2.ProviderAuthV4(credentials_provider)

# yourEndpoint menentukan titik akhir untuk wilayah tempat bucket berada.
endpoint = '<endpoint>'

# yourBucketName menentukan nama bucket.
bucket_name = 'yourBucketName'

# Tentukan wilayah tempat bucket berada.
region = '<region-id>'

# Inisialisasi bucket dengan menggunakan instance Auth. Perhatikan bahwa parameter region wajib saat menggunakan signature V4;
# jika tidak, akan terjadi error.
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)

# Gunakan objek bucket untuk operasi selanjutnya...

FAQ

Error: No module named _crcfunext?

Proses upload dan download menggunakan OSS Python SDK V1 lebih lambat dibanding alat lain, seperti ossutil atau SDK lainnya.

  • Penyebab:

    Pustaka _crcfunext.so gagal dihasilkan selama kompilasi crcmod karena sistem tidak memiliki file Python.h yang diperlukan. Pelajari lebih lanjut tentang crcmod di pengantar crcmod.

  • Solusi:

    Verifikasi bahwa mode ekstensi C untuk crcmod telah diinstal dengan benar.

    1. Jalankan perintah berikut untuk masuk ke lingkungan Python.

      python
    2. Jalankan perintah berikut untuk mengimpor modul ekstensi C _crcfunext dari modul crcmod.

      import crcmod._crcfunext

      Error berikut menunjukkan bahwa mode ekstensi C untuk pustaka crcmod gagal diinstal.

      Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      ImportError: No module named _crcfunext                                 
    3. Pilih solusi berdasarkan sistem operasi Anda.

      Windows

      1. Unduh crcmod-1.7.win32-py2.7.msi atau versi .msi lainnya.

        Catatan

        Versi 32-bit crcmod kompatibel dengan sistem Windows 32-bit dan 64-bit.

      2. Instal file .msi dan selama proses instalasi, tentukan jalur instalasi crcmod ke folder Lib\site-packages di direktori instalasi Python lokal Anda. Misalnya, D:\python\Lib\site-packages\.

      3. Setelah instalasi selesai, jalankan langkah verifikasi crcmod lagi.

      Linux

      Jika masalah ini terjadi di sistem Linux, lakukan langkah-langkah berikut:

      1. Jalankan perintah berikut untuk menguninstal crcmod.

        pip uninstall crcmod
      2. Instal python-devel. Lihat Persiapkan lingkungan.

      3. Jalankan perintah berikut untuk menginstal ulang crcmod.

        pip install crcmod

        Jika instalasi gagal lagi, uninstal crcmod dan jalankan perintah berikut untuk melihat informasi error detail.

        pip install crcmod -v

Error: No module named 'Crypto'?

  • Penyebab:

    Modul Crypto tidak ada di sistem, atau modul crypto (dengan huruf awal kecil) ada.

  • Solusi:

    Periksa modul Crypto di jalur instalasi Python lokal Anda, misalnya, D:\python3.9\Lib\site-packages.

    • Jika modul Crypto tidak ada, jalankan perintah berikut.

      python -m pip install --upgrade setuptools
    • Jika modul bernama crypto (dengan c kecil) ada, ubah namanya menjadi Crypto lalu mulai ulang program Anda.

Error: "not an internal or external command"?

Di Windows, jika Anda menerima pesan 'is not recognized as an internal or external command', tambahkan jalur instalasi Python dan pip (biasanya folder Scripts di direktori Python) ke variabel lingkungan Path. Mulai ulang komputer Anda agar perubahan diterapkan.

Instalasi OSS Python SDK V1 gagal

Jika instalasi gagal, uninstal dan coba lagi.

pip uninstall oss2            

Upgrade OSS Python SDK V1

Jalankan perintah berikut untuk mengupgrade SDK.

 pip install --upgrade oss2

Atasi error AccessDenied

Error AccessDenied menunjukkan izin tidak mencukupi. Atasi sebagai berikut:

  1. Pastikan Anda menggunakan ID AccessKey dan Secret AccessKey yang benar.

  2. Verifikasi bahwa pengguna RAM memiliki izin yang diperlukan untuk operasi bucket atau objek.

  3. Periksa kebijakan bucket: Pesan error yang berisi "Access denied by bucket policy" menunjukkan permintaan diblokir oleh kebijakan bucket.

Tingkatkan kecepatan transfer untuk akses intra-wilayah

Untuk transfer lebih cepat, akses OSS dari produk Alibaba Cloud (seperti ECS) di wilayah yang sama dengan bucket Anda, menggunakan titik akhir internal.

Lihat AccessKey dan kelola Secret AccessKey

  1. Untuk melihat AccessKey pengguna RAM: Masuk ke Konsol RAM dan pilih pengguna tertentu untuk melihat informasi AccessKey-nya.

  2. Secret AccessKey pengguna RAM hanya ditampilkan saat pembuatan. Jika Anda kehilangannya, buat AccessKey baru di Konsol RAM. Buat AccessKey.