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
-
Instal pip. pip terinstal secara default bersama Python 2.7.9 atau yang lebih baru, maupun Python 3.4 atau yang lebih baru.
-
Untuk menginstal versi SDK terbaru, jalankan perintah berikut.
pip install oss2
Instal dari source
-
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.
-
Untuk menginstal SDK, jalankan perintah berikut.
python setup.py install
Konfigurasikan kredensial akses
Konfigurasikan kredensial akses menggunakan Pasangan Kunci Akses RAM user.
Di Konsol RAM, buat RAM user dengan Permanent AccessKey Pair. Simpan Pasangan Kunci Akses dan berikan izin
AliyunOSSFullAccesskepada pengguna tersebut.Gunakan Pasangan Kunci Akses RAM user untuk mengonfigurasi Variabel lingkungan.
Linux
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'" >> ~/.bashrcJalankan perintah berikut untuk menerapkan perubahan.
source ~/.bashrcJalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk melihat jenis shell default.
echo $SHELLLakukan operasi berikut berdasarkan jenis shell default.
Zsh
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'" >> ~/.zshrcJalankan perintah berikut untuk menerapkan perubahan.
source ~/.zshrcJalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
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_profileJalankan perintah berikut untuk menerapkan perubahan.
source ~/.bash_profileJalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di CMD.
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Jalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
Jalankan perintah berikut di PowerShell.
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)Jalankan perintah berikut untuk 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.Servicedigunakan untuk membuat daftar bucket. Kelas ini tidak mendukung akses melalui nama domain kustom. -
Kelas
oss2.Bucketdigunakan untuk mengunggah, mengunduh, dan menghapus file, serta mengonfigurasi berbagai pengaturan bucket.
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, misalnyaap-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, misalnyaap-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, misalnyaap-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.
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
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 |
Kueri informasi endpoint
Kueri informasi endpoint untuk semua wilayah yang tersedia atau wilayah tertentu, termasuk endpoint publik (IPv4), internal, dan akselerasi transfer.
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, misalnyaap-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.
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.
-
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
-
Konfigurasikan Variabel lingkungan menggunakan Access Key (AK) RAM user.
Linux
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'" >> ~/.bashrcJalankan perintah berikut untuk menerapkan perubahan.
source ~/.bashrcJalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk melihat jenis shell default.
echo $SHELLLakukan operasi berikut berdasarkan jenis shell default.
Zsh
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'" >> ~/.zshrcJalankan perintah berikut untuk menerapkan perubahan.
source ~/.zshrcJalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Bash
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_profileJalankan perintah berikut untuk menerapkan perubahan.
source ~/.bash_profileJalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo $OSS_ACCESS_KEY_ID echo $OSS_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di CMD.
setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Jalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
echo %OSS_ACCESS_KEY_ID% echo %OSS_ACCESS_KEY_SECRET%
PowerShell
Jalankan perintah berikut di PowerShell.
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)Jalankan perintah berikut untuk memverifikasi bahwa Variabel lingkungan telah dikonfigurasi.
[Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
-
Mulai ulang atau refresh IDE, CLI, dan lingkungan runtime lainnya setelah memodifikasi Variabel lingkungan untuk memuat nilai baru.
-
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>denganap-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.
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>denganap-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.
-
Untuk mendapatkan kredensial akses sementara dengan memanggil operasi API, lihat AssumeRole - Mendapatkan kredensial keamanan sementara untuk RAM role.
-
Untuk mendapatkan kredensial akses sementara menggunakan SDK, lihat Menggunakan kredensial sementara yang disediakan oleh STS untuk mengakses OSS.
-
Saat membuat token STS, Anda harus menetapkan waktu kedaluwarsa. Setelah token kedaluwarsa, token tersebut tidak dapat lagi digunakan.
-
Untuk daftar endpoint STS, lihat Endpoint layanan.
Variabel lingkungan
-
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> -
-
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>denganap-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>denganap-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.
-
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.
-
Tambahkan dependensi kredensial.
pip install alibabacloud_credentials -
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>denganap-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.
-
Tambahkan dependensi kredensial.
pip install alibabacloud_credentials -
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>denganap-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.
-
Tambahkan dependensi kredensial.
pip install alibabacloud_credentials -
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>denganap-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>denganap-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.
-
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.
-
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" }
-
-
Tambahkan dependensi kredensial.
pip install alibabacloud_credentials -
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>denganap-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.
-
Tambahkan dependensi klien Secrets Manager.
pip install aliyun-secret-manager-client -
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>"}] -
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>denganap-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>denganap-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.sogagal dibuat selama kompilasicrcmodkarena sistem kehilangan filePython.hyang diperlukan. Pelajari lebih lanjut tentangcrcmoddi pengantar crcmod. -
Solusi:
Verifikasi bahwa mode ekstensi C untuk
crcmodtelah terinstal dengan benar.-
Jalankan perintah berikut untuk masuk ke lingkungan Python.
python -
Jalankan perintah berikut untuk mengimpor modul ekstensi C
_crcfunextdari modulcrcmod.import crcmod._crcfunextError berikut menunjukkan bahwa mode ekstensi C untuk library
crcmodgagal diinstal.Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named _crcfunext -
Pilih solusi berdasarkan sistem operasi Anda.
Windows
-
Unduh crcmod-1.7.win32-py2.7.msi atau versi lain dari file .msi.
CatatanVersi 32-bit dari
crcmodkompatibel dengan sistem Windows 32-bit maupun 64-bit. -
Instal file .msi dan selama proses instalasi, tentukan jalur instalasi untuk crcmod ke folder
Lib\site-packagesdi direktori instalasi Python lokal Anda. Misalnya,D:\python\Lib\site-packages\. -
Setelah instalasi selesai, jalankan langkah verifikasi
crcmodlagi.
Linux
Jika masalah ini terjadi pada sistem Linux, lakukan langkah-langkah berikut:
-
Jalankan perintah berikut untuk menguninstal
crcmod.pip uninstall crcmod -
Instal
python-devel. Lihat Siapkan lingkungan. -
Jalankan perintah berikut untuk menginstal ulang
crcmod.pip install crcmodJika instalasi gagal lagi, uninstal
crcmoddan jalankan perintah berikut untuk melihat informasi error terperinci.pip install crcmod -v
-
-
Error: No module named 'Crypto'?
-
Penyebab:
Modul
Cryptotidak ada di sistem, atau modulcrypto(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 menjadiCryptolalu 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:
-
Pastikan Anda menggunakan AccessKey ID dan AccessKey Secret yang benar.
-
Verifikasi bahwa RAM user memiliki izin yang diperlukan untuk operasi bucket atau objek.
-
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
-
Untuk melihat AccessKey RAM user: Masuk ke Konsol RAM dan pilih pengguna tertentu untuk melihat informasi AccessKey mereka.
-
AccessKey Secret RAM user hanya ditampilkan saat pembuatan. Jika Anda kehilangannya, buat AccessKey baru di Konsol RAM. Lihat Membuat AccessKey.