All Products
Search
Document Center

Object Storage Service:OSS Python SDK V1

Last Updated:Oct 23, 2026

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

Mulai cepat

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

Siapkan 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 yang lebih baru.

Instal python-devel

OSS Python SDK V1 menggunakan library crcmod untuk checksum CRC. Ekstensi C-nya memerlukan header Python.h dari python-devel. Tanpa komponen ini, SDK akan kembali ke validasi CRC Python murni, yang secara signifikan lebih lambat untuk proses upload dan download.

Windows

Pada Windows, file header yang diperlukan sudah disertakan dalam instalasi Python default. Anda tidak perlu menginstal python-devel secara terpisah.

macOS

Pada macOS, file header yang diperlukan sudah disertakan dalam instalasi Python default. 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 terinstal secara default bersama Python 2.7.9 atau yang lebih baru, maupun Python 3.4 atau yang lebih baru.

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

    pip install oss2                   

Instal dari source

  1. Unduh versi terbaru SDK dari GitHub, dekompres paket, lalu navigasi ke direktori tersebut. Pastikan direktori 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                   

Konfigurasikan kredensial akses

Konfigurasikan kredensial akses menggunakan Pasangan Kunci Akses RAM user.

  1. Di Konsol RAM, buat RAM user dengan Permanent AccessKey Pair. Simpan Pasangan Kunci Akses dan berikan izin AliyunOSSFullAccess kepada pengguna tersebut.

  2. Gunakan Pasangan Kunci Akses RAM user untuk mengonfigurasi Variabel lingkungan.

    Linux

    1. Jalankan perintah berikut di command-line interface 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 client

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

  • Kelas oss2.Service digunakan untuk membuat daftar bucket. Kelas ini tidak mendukung akses melalui nama domain kustom.

  • Kelas oss2.Bucket digunakan untuk mengunggah, mengunduh, dan menghapus file, serta mengonfigurasi berbagai pengaturan bucket.

Penting

Karena 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 daratan Tiongkok. 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 mengaitkan Sertifikat SSL yang valid ke domain kustom Anda. Hal ini wajib untuk akses Konsol OSS, karena konsol mewajibkan HTTPS.

Inisialisasi instans bucket

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

# Contoh kode untuk inisialisasi client 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)
    
    # Buat daftar file dalam bucket.
    print("=== Daftar file dalam bucket ===")
    try:
        # Gunakan metode list_objects untuk membuat daftar file.
        result = bucket.list_objects()
        
        # Iterasi daftar file dan cetak hanya nama file.
        for obj in result.object_list:
            print(obj.key)
        
        # Cetak statistik.
        print(f"\nTotal file yang terdaftar: {len(result.object_list)}")
        if result.is_truncated:
            print("Catatan: Hasil terpotong. Masih ada file lainnya.")
            
    except oss2.exceptions.OssError as e:
        print(f"Error OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi error: {e}")
        raise

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

Inisialisasi instans service

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

# Contoh kode untuk inisialisasi 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)
    
    # Buat daftar semua bucket.
    print("=== Daftar semua bucket ===")
    try:
        # Gunakan BucketIterator untuk membuat daftar bucket.
        buckets = [b.name for b in oss2.BucketIterator(service)]
        
        # Iterasi daftar bucket dan cetak hanya nama bucket.
        for bucket in buckets:
            print(bucket)
        
        # Cetak statistik.
        print(f"\nTotal bucket yang terdaftar: {len(buckets)}")
            
    except oss2.exceptions.OssError as e:
        print(f"Error OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi error: {e}")
        raise

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

Konfigurasi client

Sesuaikan parameter seperti endpoint, timeout, dan ukuran connection pool saat menginisialisasi client OSS.

Gunakan nama domain internal

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

Ganti placeholder <region-id> dalam kode dengan wilayah yang sebenarnya, misalnya 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 endpoint ke domain Anda dan aktifkan is_cname=True.

Petakan nama domain kustom Anda ke bucket sebelum menggunakannya. Lihat 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 client. Nilai default: 60 detik.

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

Ukuran connection pool

Sesuaikan ukuran connection pool dengan parameter pool_size dari objek session.

# Atur ukuran connection pool. 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 session menggunakan SSLAdapter kustom.

Python SDK 2.18.1 dan versi 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 session 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

Disarankan agar CRC tetap aktif. Menonaktifkannya berarti OSS tidak dapat menjamin integritas data selama 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 menyarankan Anda untuk segera upgrade ke signature V4 guna memastikan layanan Anda tidak terganggu.

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

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

Contoh berikut menginisialisasi client dengan signature V1. Untuk inisialisasi signature V4, lihat Inisialisasi Client.

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

# Contoh kode inisialisasi client 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)
    
    # Buat daftar file dalam bucket.
    print("=== Daftar file dalam bucket ===")
    try:
        # Buat daftar file menggunakan metode list_objects().
        result = bucket.list_objects()
        
        # Iterasi daftar objek dan cetak kunci setiap objek.
        for obj in result.object_list:
            print(obj.key)
        
        # Cetak statistik.
        print(f"\nTotal file yang terdaftar: {len(result.object_list)}")
        if result.is_truncated:
            print("Catatan: Hasil terpotong. Masih ada file lainnya.")
            
    except oss2.exceptions.OssError as e:
        print(f"Error OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi error: {e}")
        raise

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

Nama aplikasi kustom

Atur parameter app_name untuk menambahkan pengenal kustom ke Header HTTP 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)

Contoh kode

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.

Contoh kode GitHub

Contoh kode dokumentasi

bucket.py

bucket_cname.py

Memetakan nama domain kustom (Python SDK V1)

bucket_cors.py

Cross-origin resource sharing (CORS) (Python SDK V1)

bucket_inventory.py

Inventory (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

Mengelola 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

Mengelola versioning (Python SDK V1)

bucket_website.py

Hosting website 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

Mengatur metadata yang ditentukan pengguna

object_forbid_overwrite.py

Mencegah penimpaan objek (Python SDK V1)

object_operation.py

object_post.py

Upload Post

object_progress.py

object_request_payment.py

Requester pays (Python SDK V1)

object_restore.py

Memulihkan objek (Python SDK V1)

server_side_encryption.py

Enkripsi sisi server (Python SDK V1)

object_storage_type.py

Mengubah 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

Membatasi laju transfer koneksi (Python SDK V1)

upload.py

Kueri informasi endpoint

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

Catatan

Python SDK 2.18.0 dan yang lebih baru mendukung kueri informasi endpoint.

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

# Contoh kode untuk kueri informasi endpoint menggunakan OSS Python SDK

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    print("=== Kueri informasi endpoint 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 endpoint untuk wilayah tempat bucket Anda berada.
    endpoint = "<endpoint>"
    
    # Tentukan wilayah yang sesuai dengan endpoint. Parameter ini wajib saat menggunakan Signature V4.
    region = "<region-id>"
    
    # Inisialisasi instans Service OSS.
    service = oss2.Service(auth, endpoint, region=region)
    
    try:
        # Kueri informasi endpoint untuk semua wilayah yang didukung.
        result = service.describe_regions()
        
        # Iterasi informasi wilayah.
        for r in result.regions:
            print(f"Wilayah: {r.region}")
            print(f"  Endpoint Publik (IPv4): {r.internet_endpoint}")
            print(f"  Endpoint Internal (Jaringan Klasik atau VPC): {r.internal_endpoint}")
            print(f"  Endpoint Akselerasi Transfer: {r.accelerate_endpoint}")
            print("-" * 80)
        
        # Cetak statistik.
        print(f"\nDitemukan informasi endpoint untuk {len(result.regions)} wilayah.")
            
    except oss2.exceptions.OssError as e:
        print(f"Error OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi error: {e}")
        raise

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

Untuk mengkueri informasi endpoint untuk wilayah tertentu, tentukan ID wilayah khusus 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 alibabacloud-credentials versi 0.3.5 atau yang lebih baru. Menggunakan versi sebelumnya akan menyebabkan error.

Pilih jenis kredensial

Metode inisialisasi

Skenario

Pra-konfigurasi

Jenis kredensial

Validitas

Rotasi atau pembaruan

Gunakan Access Key (AK) RAM user

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 RAM role

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

Ya

Token STS

Sementara

Auto-refresh

Gunakan RAM role instans ECS

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

Tidak

Token STS

Sementara

Auto-refresh

Gunakan ARN role OIDC

Untuk aplikasi tidak tepercaya yang berjalan pada 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 diterapkan 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 menentukan metode kustom untuk mendapatkan kredensial.

Kustom

Kustom

Kustom

Kustom

AK RAM user

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

Penting
  • Akun Alibaba Cloud memiliki izin penuh pada semua resource. Jika AK-nya bocor, sistem Anda berisiko. Gunakan AK RAM user dengan izin minimum yang diperlukan sebagai gantinya.

  • Untuk membuat AK bagi RAM user, lihat Membuat AccessKey. AccessKey ID dan AccessKey Secret hanya ditampilkan saat pembuatan. Jika Anda melupakannya, buat yang baru.

Variabel lingkungan

  1. Konfigurasikan Variabel lingkungan menggunakan Access Key (AK) RAM user.

    Linux

    1. Jalankan perintah berikut di command-line interface 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 contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. Misalnya, ganti <region-id> dengan ap-southeast-1.
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    # OSS Python SDK V1: Contoh kode untuk inisialisasi client
    
    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)
        
        # Buat daftar objek dalam bucket.
        print("=== Daftar objek dalam bucket ===")
        try:
            # Gunakan metode list_objects untuk membuat daftar objek.
            result = bucket.list_objects()
            
            # Iterasi daftar objek dan cetak hanya kunci objek.
            for obj in result.object_list:
                print(obj.key)
            
            # Cetak statistik.
            print(f"\nTotal objek yang terdaftar: {len(result.object_list)}")
            if result.is_truncated:
                print("Catatan: Hasil terpotong. Objek lainnya tidak terdaftar.")
                
        except oss2.exceptions.OssError as e:
            print(f"Error OSS: {e}")
            raise
        except Exception as e:
            print(f"Terjadi error: {e}")
            raise
    
    if __name__ == "__main__":
        # Titik masuk program.
        try:
            main()
        except Exception as e:
            print(f"Terjadi error saat eksekusi: {e}")
            raise
    

Kredensial statis

Contoh kode berikut menunjukkan cara menyematkan kredensial secara langsung (hard-code) dalam aplikasi Anda.

Penting

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

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

# OSS Python SDK V1: Contoh kode untuk inisialisasi client

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

def main():

    # Tentukan AccessKey ID dan AccessKey Secret dari RAM user.
    access_key_id = 'yourAccessKeyID'
    access_key_secret = 'yourAccessKeySecret'
    # Konfigurasikan kredensial akses menggunakan Access Key (AK) RAM user.
    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)
    
    # Buat daftar objek dalam bucket.
    print("=== Daftar objek dalam bucket ===")
    try:
        # Gunakan metode list_objects untuk membuat daftar objek.
        result = bucket.list_objects()
        
        # Iterasi daftar objek dan cetak hanya kunci objek.
        for obj in result.object_list:
            print(obj.key)
        
        # Cetak statistik.
        print(f"\nTotal objek yang terdaftar: {len(result.object_list)}")
        if result.is_truncated:
            print("Catatan: Hasil terpotong. Objek lainnya tidak terdaftar.")
            
    except oss2.exceptions.OssError as e:
        print(f"Error OSS: {e}")
        raise
    except Exception as e:
        print(f"Terjadi error: {e}")
        raise

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

Kredensial sementara STS

Cocok untuk aplikasi yang memerlukan akses OSS sementara. Inisialisasi penyedia kredensial dengan kredensial sementara (AccessKey ID, AccessKey Secret, dan token keamanan) dari STS. Anda harus me-refresh token STS secara manual sebelum kedaluwarsa.

Penting

Variabel lingkungan

  1. Atur Variabel lingkungan menggunakan kredensial akses sementara.

    macOS, Linux, dan Unix

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

    • Access Key ID yang diperoleh dari STS dimulai 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 (Access Key ID, Access Key Secret, dan token keamanan) yang diperoleh dari STS, bukan Access Key (AK) RAM user.

    • Access Key ID yang diperoleh dari STS dimulai 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 contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. Misalnya, ganti <region-id> dengan ap-southeast-1.
    # -*- coding: utf-8 -*-
    import oss2
    from oss2.credentials import EnvironmentVariableCredentialsProvider
    
    # yourEndpoint menentukan endpoint 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 menggunakan STS AK, SK, dan Security Token dari variabel lingkungan.
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
    
    # Inisialisasi bucket menggunakan instans 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 secara langsung (hard-code) dalam aplikasi Anda dan mengatur kunci akses sementara secara eksplisit.

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

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

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

# yourBucketName menentukan nama bucket.
bucket_name = 'yourBucketName'

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

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

# Inisialisasi bucket menggunakan instans 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 RAM role

Cocok untuk akses lintas akun. Inisialisasi penyedia kredensial dengan ARN RAM role. Alat kredensial secara otomatis me-refresh token STS dengan memanggil AssumeRole sebelum kedaluwarsa. Anda dapat mengatur parameter policy untuk membatasi izin lebih lanjut.

Penting
  • Akun Alibaba Cloud memiliki izin penuh pada semua resource. Jika AK-nya bocor, sistem Anda berisiko. Gunakan AK RAM user dengan izin minimum yang diperlukan sebagai gantinya.

  • Untuk membuat AK bagi RAM user, lihat Membuat AccessKey. AccessKey ID dan AccessKey Secret hanya ditampilkan saat pembuatan. Jika Anda melupakannya, buat yang baru.

  • Untuk mendapatkan ARN RAM role, lihat Membuat RAM role.

  1. Tambahkan dependensi kredensial.

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

    Sebelum menjalankan contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 (AccessKey ID dan AccessKey Secret) RAM user 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 dari RAM role 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 role. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        role_session_name='<RoleSessionName>',
        # Opsional. Kebijakan izin yang lebih ketat. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy='<Policy>',
        # Opsional. Periode validitas sesi role.
        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 endpoint untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket menggunakan instans 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...

RAM role instans ECS

Cocok untuk aplikasi pada Instans ECS, Instans ECI, atau node pekerja Container Service for Kubernetes (ACK). RAM role instans ECS memungkinkan refresh token STS otomatis pada Instans ECS, Instans ECI, atau node pekerja Container Service for Kubernetes (ACK) tanpa menyediakan AK atau token STS. Untuk mendapatkan role, lihat Membuat RAM role. Untuk menyambungkannya ke Instans, lihat RAM role Instans.

  1. Tambahkan dependensi kredensial.

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

    Sebelum menjalankan contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 RAM role yang disambungkan ke instans ECS. Opsional. Jika tidak diatur, akan diambil secara otomatis. Kami sangat menyarankan untuk mengatur parameter ini guna mengurangi permintaan.
    )
    
    cred = Client(config)
    
    credentials_provider = CredentialProviderWrapper(cred)
    
    # Perhatikan bahwa ProviderAuthV4 menunjukkan penggunaan signature V4.
    auth = oss2.ProviderAuthV4(credentials_provider)
    
    # yourEndpoint menentukan endpoint untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket menggunakan instans 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 role OIDC

Saat aplikasi tidak tepercaya berjalan pada node pekerja ACK, gunakan RRSA untuk mencegahnya mendapatkan token STS RAM role instans node. Kluster memasang file token OIDC akun layanan per pod dan menyuntikkan konfigurasi ke dalam Variabel lingkungan. Alat kredensial menukar token OIDC dengan token STS melalui AssumeRoleWithOIDC, tanpa memerlukan AK atau token STS. Lihat Konfigurasikan izin RAM untuk ServiceAccount guna menerapkan isolasi izin pod menggunakan RRSA.

  1. Tambahkan dependensi kredensial.

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

    Sebelum menjalankan contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 dari RAM role. Anda dapat mengatur RoleArn menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
        role_arn=os.environ.get('<RoleArn>'),
        # ARN dari 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 role. Anda dapat mengatur RoleSessionName menggunakan variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
        role_session_name='<RoleSessionName>',
        # Opsional. Kebijakan izin yang lebih ketat. Contoh: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
        policy='<Policy>',
        # Periode validitas 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 endpoint untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket menggunakan instans 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 selama 36 jam) dan meneruskannya melalui parameter Credentials konteks. Karena waktu eksekusi fungsi maksimum adalah 24 jam, token tidak akan kedaluwarsa selama eksekusi, sehingga tidak perlu refresh. Untuk memberikan izin FC guna mengakses OSS, lihat Menggunakan peran fungsi untuk memberikan izin Function Compute guna mengakses layanan cloud lainnya.

Inisialisasi penyedia kredensial dengan kredensial dari konteks FC.

Sebelum menjalankan contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 endpoint untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'

    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'

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

    # Inisialisasi bucket menggunakan instans 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 menerapkan logika refresh token STS otomatis 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 body 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 contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 endpoint untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket menggunakan instans 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 disalahgunakan. Inisialisasi penyedia kredensial dengan ClientKey dari KMS, yang secara otomatis memutar AK RAM user yang dikelola. KMS juga mendukung rotasi segera jika AK disalahgunakan. Untuk mendapatkan ClientKey, lihat Membuat 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 yang terkait.
    cache_client_region_id=[{"regionId":"<regionId>"}]
  3. Gunakan file konfigurasi untuk menyediakan informasi kredensial.

    Sebelum menjalankan contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 endpoint untuk wilayah tempat bucket berada.
    endpoint = '<endpoint>'
    
    # yourBucketName menentukan nama bucket.
    bucket_name = 'yourBucketName'
    
    # Tentukan wilayah tempat bucket berada.
    region = '<region-id>'
    
    # Inisialisasi bucket menggunakan instans 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 tidak ada metode konfigurasi kredensial di atas yang memenuhi kebutuhan Anda, Anda dapat menentukan penyedia kredensial kustom dengan mengimplementasikan antarmuka CredentialProvider. Jika implementasi Anda menggunakan token STS, Anda juga harus menangani refresh kredensial.

Sebelum menjalankan contoh kode, ganti placeholder seperti <region-id> dengan wilayah dan Titik akhir yang sebenarnya. 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 me-refreshnya berdasarkan waktu kedaluwarsa.
        # 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 endpoint untuk wilayah tempat bucket berada.
endpoint = '<endpoint>'

# yourBucketName menentukan nama bucket.
bucket_name = 'yourBucketName'

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

# Inisialisasi bucket menggunakan instans 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?

Upload dan download menggunakan OSS Python SDK V1 lebih lambat dibandingkan dengan alat lain, seperti ossutil atau SDK lainnya.

  • Penyebab:

    Library _crcfunext.so gagal dibuat selama kompilasi crcmod karena sistem kehilangan file Python.h yang diperlukan. Pelajari lebih lanjut tentang crcmod di pengantar crcmod.

  • Solusi:

    Verifikasi bahwa mode ekstensi C untuk crcmod telah terinstal 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 library 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 lain dari file .msi.

        Catatan

        Versi 32-bit dari crcmod kompatibel dengan sistem Windows 32-bit maupun 64-bit.

      2. Instal file .msi dan selama proses instalasi, tentukan jalur instalasi untuk 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 pada sistem Linux, lakukan langkah-langkah berikut:

      1. Jalankan perintah berikut untuk menguninstal crcmod.

        pip uninstall crcmod
      2. Instal python-devel. Lihat Siapkan 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 terperinci.

        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 keberadaan 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 huruf c kecil) ada, ubah namanya menjadi Crypto lalu mulai ulang program Anda.

Error: "not an internal or external command"?

Pada 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 berlaku.

Kegagalan instalasi OSS Python SDK V1

Jika instalasi gagal, uninstal dan coba lagi.

pip uninstall oss2            

Upgrade OSS Python SDK V1

Jalankan perintah berikut untuk meng-upgrade SDK.

 pip install --upgrade oss2

Mengatasi error AccessDenied

Error AccessDenied menunjukkan izin yang tidak memadai. Lakukan pemecahan masalah sebagai berikut:

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

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

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

Meningkatkan kecepatan transfer untuk akses intra-wilayah

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

Melihat AccessKey dan mengelola AccessKey Secret

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

  2. AccessKey Secret RAM user hanya ditampilkan saat pembuatan. Jika Anda kehilangannya, buat AccessKey baru di Konsol RAM. Lihat Membuat AccessKey.