全部產品
Search
文件中心

Object Storage Service:OSS Python SDK V2

更新時間:May 20, 2026

Github | OSS Python SDK V2開發人員指南|OSS Python SDK V2 Docs

快速接入

環境準備

要求 Python 3.8 及以上版本。

可以通過 Python -version 命令查看 Python 版本。如果當前環境沒有 Python 或版本低於 Python 3.8,請下載並安裝Python。

安裝SDK

  • 執行以下命令安裝OSS Python SDK V2程式碼封裝。請根據需求選擇合適的OSS Python SDK V2版本,推薦使用最新的版本,確保本文中的程式碼範例可以正常運行。

    pip install alibabacloud-oss-v2
  • 使用以下代碼引入OSS Python SDK V2包。

    import alibabacloud_oss_v2 as oss

配置訪問憑證

使用 RAM 使用者的 AccessKey 配置訪問憑證。

  1. 在 RAM 控制台,建立使用永久 AccessKey 訪問的 RAM 使用者,儲存 AccessKey,然後為該使用者授予 AliyunOSSFullAccess 許可權。

  2. 使用 RAM 使用者 AccessKey 配置環境變數。

    Linux

    1. 在命令列介面執行以下命令來將環境變數設定追加到~/.bashrc 檔案中。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 執行以下命令使變更生效。

        source ~/.bashrc
      2. 執行以下命令檢查環境變數是否生效。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. 在終端中執行以下命令,查看預設Shell類型。

      echo $SHELL
      1. 根據預設Shell類型進行操作。

        Zsh

        1. 執行以下命令來將環境變數設定追加到 ~/.zshrc 檔案中。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 執行以下命令使變更生效。

          source ~/.zshrc
        3. 執行以下命令檢查環境變數是否生效。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 執行以下命令來將環境變數設定追加到 ~/.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. 執行以下命令使變更生效。

          source ~/.bash_profile
        3. 執行以下命令檢查環境變數是否生效。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. 在CMD中運行以下命令。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 運行以下命令,檢查環境變數是否生效。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. 在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)
      1. 運行以下命令,檢查環境變數是否生效。

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

初始化用戶端

重要

根據策略調整,為提升OSS服務的合規性和安全性,自2025年3月20日起,新開通OSS服務的使用者在中國內地地區的Bucket將無法通過預設外網網域名稱調用資料操作類API(如上傳、下載檔案),需通過自訂網域名(CNAME)方式訪問OSS服務。使用HTTPS協議訪問(如控制台)時,還需為自訂網域名配置SSL認證。

運行範例程式碼前,請將代碼中的 <region-id>等預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。

同步 OSSClient

import alibabacloud_oss_v2 as oss

def main():
    """
    Python SDK V2 用戶端初始化配置說明:

    1. 簽名版本:Python SDK V2 預設使用 V4 簽名,提供更高的安全性
    2. Region配置:初始化 Client 時,必須指定阿里雲 Region ID 作為請求地區標識
    3. Endpoint配置:
       - 可通過Endpoint參數自訂服務要求的訪問網域名稱
       - 當不指定 Endpoint 時,將根據 Region 自動構造公網訪問網域名稱
    4. 協議配置:
       - SDK 預設使用 HTTPS 協議構造訪問網域名稱
       - 如需使用 HTTP 協議,在指定網域名稱時明確指定
    """

    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方式一:只填寫Region(推薦)
    # 必須指定Region ID,SDK會根據Region自動構造HTTPS訪問網域名稱
    cfg.region = '<region-id>' 

    # # 方式二:同時填寫Region和Endpoint
    # # 必須指定Region ID
    # cfg.region = '<region-id>'
    # # 填寫Bucket所在地區對應的外網Endpoint
    # cfg.endpoint = '<endpoint>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 定義要上傳的字串內容
    text_string = "Hello, OSS!"
    data = text_string.encode('utf-8')  # 將字串編碼為UTF-8位元組串

    # 執行上傳對象的請求,指定儲存空間名稱、對象名稱和資料內容
    result = client.put_object(oss.PutObjectRequest(
        bucket="Your Bucket Name",
        key="Your Object Key",
        body=data,
    ))

    # 輸出請求的結果狀態代碼、請求ID、ETag,用於檢查請求是否成功
    print(f'status code: {result.status_code}\n'
          f'request id: {result.request_id}\n'
          f'etag: {result.etag}'
    )

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

非同步 OSSClient

使用非同步 OSSClient 需要:

  • alibabacloud-oss-v2:>= 1.2.0

  • 安裝 aiohttp:pip install aiohttp

import asyncio
import alibabacloud_oss_v2 as oss
import alibabacloud_oss_v2.aio as oss_aio

async def main():
    """
    Python SDK V2 非同步用戶端初始化配置說明:

    1. 簽名版本:Python SDK V2 預設使用 V4 簽名,提供更高的安全性

    2. Region配置:初始化 AsyncClient 時,必須指定阿里雲 Region ID 作為請求地區標識

    3. Endpoint配置:
       - 可通過Endpoint參數自訂服務要求的訪問網域名稱
       - 當不指定 Endpoint 時,將根據 Region 自動構造公網訪問網域名稱

    4. 協議配置:
       - SDK 預設使用 HTTPS 協議構造訪問網域名稱
       - 如需使用 HTTP 協議,在指定網域名稱時明確指定
    
    5. 非同步特性:
       - 匯入非同步模組:import alibabacloud_oss_v2.aio as oss_aio
       - 建立非同步用戶端:oss_aio.AsyncClient(cfg)
       - 所有操作需要使用 await 關鍵字
       - 需要在 finally 塊中調用 await client.close() 關閉串連
       - 需要安裝 aiohttp 依賴:pip install aiohttp
    """

    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方式一:只填寫Region(推薦)
    # 必須指定Region ID,SDK會根據Region自動構造HTTPS訪問網域名稱
    cfg.region = '<region-id>'

    # # 方式二:同時填寫Region和Endpoint
    # # 必須指定Region ID
    # cfg.region = '<region-id>'
    # # 填寫Bucket所在地區對應的外網Endpoint
    # cfg.endpoint = '<endpoint>'

    # 使用配置好的資訊建立OSS非同步用戶端
    client = oss_aio.AsyncClient(cfg)

    try:
        # 定義要上傳的字串內容
        text_string = "Hello, OSS!"
        data = text_string.encode('utf-8')  # 將字串編碼為UTF-8位元組串

        # 執行非同步上傳對象的請求,指定儲存空間名稱、對象名稱和資料內容
        # 注意:使用 await 關鍵字等待非同步作業完成
        result = await client.put_object(
            oss.PutObjectRequest(
                bucket="Your Bucket Name",
                key="Your Object Key",
                body=data,
            )
        )

        # 輸出請求的結果狀態代碼、請求ID、ETag,用於檢查請求是否成功
        print(f'status code: {result.status_code}\n'
              f'request id: {result.request_id}\n'
              f'etag: {result.etag}'
        )

    except Exception as e:
        print(f'上傳失敗: {e}')

    finally:
        # 關閉非同步用戶端串連(重要:避免資源泄漏)
        await client.close()

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    # 使用 asyncio.run() 運行非同步主函數
    asyncio.run(main())

運行後將會輸出上傳檔案成功的結果:

status code: 200
request id: 6875F95738B0ED3030F086A0
etag: "56AAD346F0899BFE8BDD02C06BBE511E"

用戶端配置

用戶端支援哪些配置?

參數名

說明

樣本

region

(必選)請求發送的地區, 必選

oss.config.Config(region="<region-id>")

credentials_provider

(必選)設定訪問憑證

oss.config.Config(credentials_provider=provider)

endpoint

訪問網域名稱

oss.config.Config(endpoint="oss-<region-id>.aliyuncs.com")

http_client

HTTP用戶端

oss.config.Config(http_client=customClient)

retry_max_attempts

HTTP請求時的最大嘗試次數, 預設值為 3

oss.config.Config(retry_max_attempts=5)

retryer

HTTP請求時的重試實現

oss.config.Config(retryer=customRetryer)

connect_timeout

建立串連的逾時時間, 預設值為 10 秒

oss.config.Config(connect_timeout=20)

readwrite_timeout

應用讀寫資料的逾時時間, 預設值為 20 秒

oss.config.Config(readwrite_timeout=30)

insecure_skip_verify

是否跳過SSL認證校正,預設檢查SSL認證

oss.config.Config(insecure_skip_verify=true)

enabled_redirect

是否開啟HTTP重新導向, 預設不開啟

oss.config.Config(enabled_redirect=true)

proxy_host

設定Proxy 伺服器

oss.config.Config(proxy_host="http://user:passswd@proxy.example-***.com")

signature_version

簽名版本,預設值為v4

oss.config.Config(signature_version="v1")

disable_ssl

不使用https請求,預設使用https

oss.config.Config(disable_ssl=true)

use_path_style

使用路徑請求風格,即次層網域請求風格,預設為bucket託管網域名稱

oss.config.Config(use_path_style=true)

use_cname

是否使用自訂網域名訪問,預設不使用

oss.config.Config(use_cname=true)

use_dualstack_endpoint

是否使用雙棧網域名稱訪問,預設不使用

oss.config.Config(use_dualstack_endpoint=true)

use_accelerate_endpoint

是否使用傳輸加速網域名稱訪問,預設不使用

oss.config.Config(use_accelerate_endpoint=true)

use_internal_endpoint

是否使用內網網域名稱訪問,預設不使用

oss.config.Config(use_internal_endpoint=true)

disable_upload_crc64_check

上傳時關閉CRC64校正,預設開啟CRC64校正

oss.config.Config(disable_upload_crc64_check=true)

disable_download_crc64_check

下載時關閉CRC64校正,預設開啟CRC64校正

oss.config.Config(disable_download_crc64_check=true)

additional_headers

指定額外的簽章要求頭,V4簽名下有效

oss.config.Config(additional_headers=["content-length"])

user_agent

指定額外的User-Agent資訊

oss.config.Config(user_agent="user identifier")

使用自訂網域名

使用OSS預設網域名稱訪問時,可能會出現檔案禁止訪問、檔案無法預覽等問題;通過通過自訂網域名訪問OSS,不僅支援瀏覽器直接預覽檔案,還可結合CDN加速分發。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 請填寫您的自訂網域名。例如www.example-***.com
    cfg.endpoint = 'https://www.example-***.com'

    # 請注意,設定true開啟CNAME選項,否則無法使用自訂網域名
    cfg.use_cname = True

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

逾時控制

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss
from typing import Dict, Any

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入預設的配置資訊
    cfg = oss.config.load_default()

    # 設定建立串連的逾時時間, 預設值 10秒
    cfg.connect_timeout = 30

    # 設定應用讀寫資料的逾時時間, 預設值 20秒
    cfg.readwrite_timeout = 30

    # 設定憑證提供者
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

重試策略

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    """
    SDK 重試策略配置說明:

    預設重試策略:
    當沒有配置重試策略時,SDK 使用 StandardRetryer() 作為用戶端的預設實現,其預設配置如下:
    - max_attempts:設定最大嘗試次數。預設為3次
    - max_backoff:設定最大退避時間(單位:秒)。預設為20秒
    - base_delay:設定基礎延遲時間(單位:秒)。預設為0.2秒
    - backoff_delayer:設定退避演算法。預設使用FullJitter退避演算法
      計算公式為:[0.0, 1.0) * min(2^attempts * baseDelay, maxBackoff)
    - error_retryables:可重試的錯誤類型,請參閱https://gosspublic.alicdn.com/sdk-doc/alibabacloud-oss-python-sdk-v2/latest/_modules/alibabacloud_oss_v2/retry/error_retryable.html

    當發生可重試錯誤時,將使用其提供的配置來延遲並隨後重試該請求。
    請求的總體延遲會隨著重試次數而增加,如果預設配置不滿足您的情境需求時,
    可配置重試參數或者修改重試實現。
    """

    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入預設的配置資訊
    cfg = oss.config.load_default()

    # 配置重試策略樣本:

    # 1. 自訂最大重試次數(預設為3次,這裡設定為5次)
    cfg.retryer = oss.retry.StandardRetryer(max_attempts=5)

    # 2. 自訂退避延遲時間
    # 調整基礎延遲時間 base_delay 為0.5秒(預設0.2秒),最大退避時間 max_backoff 為25秒(預設20秒)
    # cfg.retryer = oss.retry.StandardRetryer(max_backoff=25, base_delay=0.5)

    # 3. 自訂退避演算法
    # 使用固定時間退避演算法替代預設的FullJitter演算法,每次延遲2秒
    # cfg.retryer = oss.retry.StandardRetryer(backoff_delayer=oss.retry.FixedDelayBackoff(2))

    # 4. 禁用重試策略
    # 如需禁用所有重試嘗試時,可以使用retry.NopRetryer實現
    # cfg.retryer = oss.retry.NopRetryer()

    # 設定憑證提供者
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

設定串連池大小

在http_client中指定max_connections參數即可配置串連池大小。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# OSS Python SDK V2 串連池配置樣本

import alibabacloud_oss_v2 as oss

def main():

    # 從環境變數中載入訪問憑證(需要設定OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET)
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    config = oss.config.load_default()
    config.credentials_provider = credentials_provider

    # 設定OSS服務地區
    config.region = "<region-id>"

    # ============ 自訂HTTPClient配置 ============
    # 建立HTTP用戶端配置參數字典
    http_client_config = {}
    
    # 設定串連池大小為100,預設為20
    http_client_config["max_connections"] = 100
    
    # 使用自訂配置建立HTTP用戶端
    http_client = oss.transport.RequestsHttpClient(**http_client_config)
    
    # 將自訂的HTTP用戶端設定到設定物件中
    config.http_client = http_client
    # ============================================
    
    # 初始化OSS用戶端執行個體
    client = oss.Client(config)

    # 配置Bucket和檔案資訊
    bucket = "example-bucket"             # Bucket名稱
    key = "dest.jpg"                      # OSS中的檔案路徑
    file_path = "dest.jpg"                # 本地儲存路徑

    # 將OSS中的檔案下載到本地指定路徑
    client.get_object_to_file(oss.GetObjectRequest(bucket, key), file_path)
    print(f"檔案下載完成: {key} -> {file_path}")
    print(f"串連池大小已設定為: {http_client_config['max_connections']}")

if __name__ == "__main__":
    # 程式進入點
    try:
        main()
    except Exception as e:
        print(f"運行過程中發生錯誤: {e}")
        raise

HTTP/HTTPS 協議

使用 cfg.disable_ssl = True 設定不使用HTTPS協議。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 設定不使用https請求
    cfg.disable_ssl = True

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

Proxy 伺服器

企業安全性原則通常限制直接存取公網,配置Proxy 伺服器訪問 OSS。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 設定user_agent
    cfg.user_agent = 'aliyun-sdk-python'

    # 設定Proxy 伺服器
    cfg.proxy_host = 'http://user:passswd@proxy.example-***.com'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用內網網域名稱

使用內網網域名稱訪問同地區的OSS資源,可以降低流量成本並提高訪問速度。

運行範例程式碼前,請將代碼中的 <region-id>等預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方式一: 填寫Region並設定use_internal_endpoint為true
    # 填寫Bucket所在地區
    cfg.region = '<region-id>'
    cfg.use_internal_endpoint = True

    # # 方式二: 直接填寫Region和Endpoint
    # # 填寫Bucket所在地區
    # cfg.region = '<region-id>'
    # # 填寫Bucket所在地區對應的內網Endpoint
    # cfg.endpoint = '<endpoint>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用傳輸加速網域名稱

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 方式一: 填寫Region並設定use_accelerate_endpoint為true
    # 填寫Bucket所在地區
    cfg.region = '<region-id>'
    cfg.use_accelerate_endpoint = True

    # # 方式二: 直接填寫Region和傳輸加速Endpoint
    # # 填寫Bucket所在地區
    # cfg.region = '<region-id>'
    # # 填寫Bucket所在地區對應的傳輸加速Endpoint
    # cfg.endpoint = 'https://oss-accelerate.aliyuncs.com'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用專有域

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 請填寫您的專有域。例如:https://service.corp.example.com
    cfg.endpoint = 'https://service.corp.example.com'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

自訂HTTPClient

當常用配置參數無法滿足情境需求時,您可以使用cfg.http_client替換預設的 HTTP 用戶端。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss
from typing import Dict, Any

def main():
    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 載入預設的配置資訊
    cfg = oss.config.load_default()

    # 設定HTTP用戶端的參數
    kwargs: Dict[str, Any] = {}

    # 設定session
    # kwargs["session"] = requests.Session()

    # 設定adapter
    # kwargs["adapter"] = HTTPAdapter()

    # 是否跳過認證檢查,預設不跳過
    # kwargs["insecure_skip_verify"] = False

    # 是否開啟啟HTTP重新導向,預設不啟用
    # kwargs["enabled_redirect"] = False

    # 設定Proxy 伺服器
    # kwargs["proxy_host"] = config.proxy_host

    # 設定塊大小
    # kwargs["block_size"] = 16 * 1024

    # 連線逾時, 預設值 10秒
    kwargs["connect_timeout"] = 30

    # 應用讀寫資料的逾時時間, 預設值 20秒
    kwargs["readwrite_timeout"] = 30

    # 最大串連數,預設值 20
    kwargs["max_connections"] = 1024

    # 建立HTTP用戶端,並傳入HTTP用戶端參數
    cfg.http_client = oss.transport.RequestsHttpClient(**kwargs)

    # 設定憑證提供者
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

訪問憑證配置

OSS 提供多種憑證初始化方式。請根據您的認證和授權需求選擇合適的初始化方式。

如何選擇訪問憑證?

憑證提供者初始化方式

適用情境

是否需要提供前置的AK或STS Token

底層實現基於的憑證

憑證有效期間

憑證輪轉或重新整理方式

使用RAM使用者的AK

部署運行在安全、穩定且不易受外部攻擊的環境的應用程式,無需頻繁輪轉憑證就可以長期訪問雲端服務

是

AK

長期

手動輪轉

使用STS臨時訪問憑證

部署運行在不可信的環境的應用程式,希望能控制訪問的有效期間、許可權

是

STS Token

臨時

手動重新整理

使用RAMRoleARN

需要授權訪問雲端服務,例如跨阿里雲帳號訪問雲端服務的應用程式

是

STS Token

臨時

自動重新整理

使用ECSRAMRole

部署運行在阿里雲的ECS執行個體、ECI執行個體、Container ServiceKubernetes版的Worker節點中的應用程式

否

STS Token

臨時

自動重新整理

使用OIDCRoleARN

部署運行在阿里雲的Container ServiceKubernetes版的Worker節點中的不可信應用程式

否

STS Token

臨時

自動重新整理

使用自訂訪問憑證

如果以上憑證配置方式都不滿足要求時,您可以自訂擷取憑證的方式

自訂

自訂

自訂

自訂

使用RAM使用者的AK

如果您的應用程式部署運行在安全、穩定且不易受外部攻擊的環境中,需要長期訪問您的OSS,且不能頻繁輪轉憑證時,您可以使用阿里雲主帳號或RAM使用者的AK(Access Key ID、Access Key Secret)初始化憑證提供者。需要注意的是,該方式需要您手動維護一個AK,存在安全性風險和維護複雜度增加的風險。

警告
  • 阿里雲帳號擁有資源的全部許可權,AK一旦泄露,會給系統帶來巨大風險,不建議使用。推薦使用最小化授權的RAM使用者的AK。

  • 如需建立RAM使用者的AK,請直接存取建立AccessKey。RAM使用者的Access Key ID、Access Key Secret資訊僅在建立時顯示,請及時儲存,如若遺忘請考慮建立新的AK進行輪換。

環境變數

  1. 使用RAM使用者AccessKey配置環境變數。

    Linux

    1. 在命令列介面執行以下命令來將環境變數設定追加到~/.bashrc 檔案中。

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
      1. 執行以下命令使變更生效。

        source ~/.bashrc
      2. 執行以下命令檢查環境變數是否生效。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

    macOS

    1. 在終端中執行以下命令,查看預設Shell類型。

      echo $SHELL
      1. 根據預設Shell類型進行操作。

        Zsh

        1. 執行以下命令來將環境變數設定追加到 ~/.zshrc 檔案中。

          echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
          echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
        2. 執行以下命令使變更生效。

          source ~/.zshrc
        3. 執行以下命令檢查環境變數是否生效。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

        Bash

        1. 執行以下命令來將環境變數設定追加到 ~/.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. 執行以下命令使變更生效。

          source ~/.bash_profile
        3. 執行以下命令檢查環境變數是否生效。

          echo $OSS_ACCESS_KEY_ID
          echo $OSS_ACCESS_KEY_SECRET

    Windows

    CMD

    1. 在CMD中運行以下命令。

      setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
      setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
      1. 運行以下命令,檢查環境變數是否生效。

        echo %OSS_ACCESS_KEY_ID%
        echo %OSS_ACCESS_KEY_SECRET%

    PowerShell

    1. 在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)
      1. 運行以下命令,檢查環境變數是否生效。

        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
        [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  2. 參考上述方式修改系統內容變數後,請重啟或重新整理您的編譯運行環境,包括IDE、命令列介面、其他傳統型應用程式及後台服務,以確保最新的系統內容變數成功載入。

  3. 使用環境變數來傳遞憑證資訊。

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    import alibabacloud_oss_v2 as oss
    
    def main():
        # 從環境變數中載入憑證資訊,用於身分識別驗證
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # 載入SDK的預設配置,並設定憑證提供者
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 填寫Bucket所在地區
        cfg.region = '<region-id>'
    
        # 使用配置好的資訊建立OSS用戶端
        client = oss.Client(cfg)
    
        # 使用建立好的client執行後續操作...
    
    # 當此指令碼被直接運行時,調用main函數
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數

靜態憑證

以下範例程式碼展示了如何對訪問憑據直接進行寫入程式碼,顯式設定要使用的存取金鑰。

警告

請勿將訪問憑據嵌入到生產環境的應用程式中,此方法僅用於測試目的。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 建立靜態憑證提供者,顯式設定存取金鑰和密鑰密碼,請替換為您的RAM使用者的AccessKey ID和AccessKey Secret
    credentials_provider = oss.credentials.StaticCredentialsProvider(
        access_key_id="RAM AccessKey ID",
        access_key_secret="RAM AccessKey Secret"
    )

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用STS臨時訪問憑證

如果您的應用程式需要臨時訪問OSS,您可以使用通過STS服務擷取的臨時身份憑證(Access Key ID、Access Key Secret和Security Token)初始化憑證提供者。需要注意的是,該方式需要您手動維護一個STS Token,存在安全性風險和維護複雜度增加的風險。此外,如果您需要多次臨時訪問OSS,您需要手動重新整理STS Token。

重要

環境變數

  1. 使用臨時身份憑證設定環境變數。

    Mac OS X/Linux/Unix

    警告
    • 請注意,此處使用的是通過STS服務擷取的臨時身份憑證(Access Key ID、Access Key Secret和Security Token),而非RAM使用者的Access Key和Access Key Secret。

    • 請注意區分STS服務擷取的Access Key ID以STS開頭,例如“STS.L4aBSCSJVMuKg5U1****”。

    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

    警告
    • 請注意,此處使用的是通過STS服務擷取的臨時身份憑證(Access Key ID、Access Key Secret和Security Token),而非RAM使用者的AK(Access Key ID、Access Key Secret)。

    • 請注意區分STS服務擷取的Access Key ID以STS開頭,例如“STS.L4aBSCSJVMuKg5U1****”。

    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. 通過環境變數來傳遞憑證資訊。

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    import alibabacloud_oss_v2 as oss
    
    def main():
        # 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # 載入SDK的預設配置,並設定憑證提供者
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 填寫Bucket所在地區
        cfg.region = '<region-id>'
    
        # 使用配置好的資訊建立OSS用戶端
        client = oss.Client(cfg)
    
        # 使用建立好的client執行後續操作...
    
    # 當此指令碼被直接運行時,調用main函數
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數

靜態憑證

以下範例程式碼展示了如何對訪問憑據直接進行寫入程式碼,顯式設定要使用的臨時存取金鑰。

警告

請勿將訪問憑據嵌入到生產環境的應用程式中,此方法僅用於測試目的。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

def main():
    # 填寫擷取的臨時存取金鑰AccessKey ID和AccessKey Secret,非阿里雲帳號AccessKey ID和AccessKey Secret。
    # 請注意區分STS服務擷取的Access Key ID是以STS開頭,。。
    sts_access_key_id = 'STS.****************'
    sts_access_key_secret = 'yourAccessKeySecret'
    # 填寫擷取的STS安全性權杖(SecurityToken)。
    sts_security_token = 'yourSecurityToken'

    # 建立靜態憑證提供者,顯式設定臨時存取金鑰AccessKey ID和AccessKey Secret,以及STS安全性權杖
    credentials_provider = oss.credentials.StaticCredentialsProvider(
        access_key_id=sts_access_key_id,
        access_key_secret=sts_access_key_secret,
        security_token=sts_security_token,
    )

    # 載入SDK的預設配置,並設定憑證提供者
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 填寫Bucket所在地區
    cfg.region = '<region-id>'

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 使用建立好的client執行後續操作...

# 當此指令碼被直接運行時,調用main函數
if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用RAMRoleARN

如果您的應用程式需要授權訪問OSS,例如跨阿里雲帳號訪問OSS,您可以使用RAMRoleARN初始化憑證提供者。該方式底層實現是STS Token。通過指定RAM角色的ARN(Alibabacloud Resource Name),Credentials工具會前往STS服務擷取STS Token,並在會話到期前調用AssumeRole介面申請新的STS Token。此外,您還可以通過為policy賦值來限制RAM角色到一個更小的許可權集合。

重要
  • 阿里雲帳號擁有資源的全部許可權,AK一旦泄露,會給系統帶來巨大風險,不建議使用。推薦使用最小化授權的RAM使用者的AK。

  • 如需建立RAM使用者的AK,請直接存取建立AccessKey。RAM使用者的Access Key ID、Access Key Secret資訊僅在建立時顯示,請及時儲存,如若遺忘請考慮建立新的AK進行輪換。

  • 如需擷取RAMRoleARN,請直接存取建立角色。

  1. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  2. 配置AK和RAMRoleARN作為訪問憑證。

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    # -*- coding: utf-8 -*-
    import os
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    import alibabacloud_oss_v2 as oss
    
    def main():
        config = Config(
            # 從環境變數中擷取RAM使用者的存取金鑰(AccessKey ID和AccessKey Secret)
            access_key_id=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
            access_key_secret=os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
            type='ram_role_arn',
            # 要扮演的RAM角色ARN,樣本值:acs:ram::123456789012****:role/adminrole,可以通過環境變數ALIBABA_CLOUD_ROLE_ARN設定RoleArn
            role_arn='<RoleArn>',
            # 角色會話名稱,可以通過環境變數ALIBABA_CLOUD_ROLE_SESSION_NAME設定RoleSessionName
            role_session_name='<RoleSessionName>',
            # 設定更小的權限原則,非必填。樣本值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
            policy='<Policy>',
            # 設定角色會話有效期間,單位為秒,預設值為3600秒(1小時),非必填
            role_session_expiration=3600
        )
    
        cred_client = Client(config)
    
        def get_credentials_wrapper():
            cred = cred_client.get_credential()
            return oss.credentials.Credentials(access_key_id=cred.access_key_id, access_key_secret=cred.access_key_secret, security_token=cred.security_token)
    
        # 建立憑證提供者,用於動態載入憑證
        credentials_provider = oss.credentials.CredentialsProviderFunc(func=get_credentials_wrapper)
    
        # 載入OSS SDK的預設配置
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 填寫Bucket所在地區
        cfg.region = '<region-id>'
    
        # 建立OSS用戶端執行個體
        client = oss.Client(cfg)
    
        # 使用client進行後續操作...
    
    # 當此指令碼被直接運行時,調用main函數
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用ECSRAMRole

如果您的應用程式運行在ECS執行個體、ECI執行個體、Container ServiceKubernetes版的Worker節點中,建議您使用ECSRAMRole初始化憑證提供者。該方式底層實現是STS Token。ECSRAMRole允許您將一個角色關聯到ECS執行個體、ECI執行個體或Container Service Kubernetes 版的Worker節點,實現在執行個體內部自動重新整理STS Token。該方式無需您提供一個AK或STS Token,消除了手動維護AK或STS Token的風險。如何擷取ECSRAMRole,請參見建立角色。

  1. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  2. 配置ECSRAMRole作為訪問憑證。

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    import alibabacloud_oss_v2 as oss
    
    def main():
        config = Config(
            type='ecs_ram_role',      # 訪問憑證類型。固定為ecs_ram_role。
            role_name='EcsRoleExample'    # 為ECS授予的RAM角色的名稱。選擇性參數。如果不設定,將自動檢索。強烈建議設定,以減少請求。
        )
    
        cred_client = Client(config)
    
        def get_credentials_wrapper():
            cred = cred_client.get_credential()
            return oss.credentials.Credentials(access_key_id=cred.access_key_id, access_key_secret=cred.access_key_secret, security_token=cred.security_token)
    
        # 建立憑證提供者,用於動態載入憑證
        credentials_provider = oss.credentials.CredentialsProviderFunc(func=get_credentials_wrapper)
    
        # 載入OSS SDK的預設配置
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 填寫Bucket所在地區
        cfg.region = '<region-id>'
    
        # 建立OSS用戶端執行個體
        client = oss.Client(cfg)
    
        # 使用client進行後續操作...
    
    # 當此指令碼被直接運行時,調用main函數
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用OIDCRoleARN

在Container ServiceKubernetes版中設定了Worker節點RAM角色後,對應節點內的Pod中的應用也就可以像ECS上部署的應用一樣,通過中繼資料服務(Meta Data Server)擷取關聯角色的STS Token。但如果容器叢集上部署的是不可信的應用(比如部署您的客戶提交的應用,代碼也沒有對您開放),您可能並不希望它們能通過中繼資料服務擷取Worker節點關聯執行個體RAM角色的STS Token。為了避免影響雲上資源的安全,同時又能讓這些不可信的應用安全地擷取所需的STS Token,實現應用層級的許可權最小化,您可以使用RRSA(RAM Roles for Service Account)功能。該方式底層實現是STS Token。阿里雲容器叢集會為不同的應用Pod建立和掛載相應的服務賬戶OIDC Token檔案,並將相關配置資訊注入到環境變數中,Credentials工具通過擷取環境變數的配置資訊,調用STS服務的AssumeRoleWithOIDC介面換取綁定角色的STS Token。該方式無需您提供一個AK或STS Token,消除了手動維護AK或STS Token的風險。詳情請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離。

  1. 添加alibabacloud_credentials依賴。

    pip install alibabacloud_credentials
  1. 配置OIDCRoleArn作為訪問憑證。

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    # -*- coding: utf-8 -*-
    import os
    from alibabacloud_credentials.client import Client
    from alibabacloud_credentials.models import Config
    import alibabacloud_oss_v2 as oss
    
    def main():
        config = Config(
            # 指定Credential類型,固定值為oidc_role_arn。
            type='oidc_role_arn',
            # RAM角色名稱ARN,可以通過環境變數ALIBABA_CLOUD_ROLE_ARN設定RoleArn
            role_arn=os.environ.get('<RoleArn>'),
            # OIDC供應商ARN,可以通過環境變數ALIBABA_CLOUD_OIDC_PROVIDER_ARN設定OidcProviderArn
            oidc_provider_arn=os.environ.get('<OidcProviderArn>'),
            # OIDC Token檔案路徑,可以通過環境變數ALIBABA_CLOUD_OIDC_TOKEN_FILE設定OidcTokenFilePath
            oidc_token_file_path=os.environ.get('<OidcTokenFilePath>'),
            # 角色會話名稱,可以通過環境變數ALIBABA_CLOUD_ROLE_SESSION_NAME設定RoleSessionName
            role_session_name='<RoleSessionName>',
            # 設定更小的權限原則,非必填。樣本值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
            policy='<Policy>',
            # 設定角色會話有效期間,單位為秒,預設值為3600秒(1小時),非必填
            role_session_expiration=3600
        )
    
        cred_client = Client(config)
    
        def get_credentials_wrapper():
            cred = cred_client.get_credential()
            return oss.credentials.Credentials(access_key_id=cred.access_key_id, access_key_secret=cred.access_key_secret, security_token=cred.security_token)
    
        # 建立憑證提供者,用於動態載入憑證
        credentials_provider = oss.credentials.CredentialsProviderFunc(func=get_credentials_wrapper)
    
        # 載入OSS SDK的預設配置
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 填寫Bucket所在地區
        cfg.region = '<region-id>'
    
        # 建立OSS用戶端執行個體
        client = oss.Client(cfg)
    
        # 使用client進行後續操作...
    
    # 當此指令碼被直接運行時,調用main函數
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數

使用自訂訪問憑證

當以上憑證配置方式不滿足要求時,您可以自訂擷取憑證的方式。SDK 支援多種實現方式。

  1. 通過credentials.CredentialsProviderFunc介面

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    import argparse
    import alibabacloud_oss_v2 as oss
    import os
    
    def main():
    
        def get_credentials_wrapper():
            # 返回長期憑證
            return oss.credentials.Credentials(access_key_id='access_key_id', access_key_secret='access_key_security')
            # 返回STS臨時憑證
            # return oss.credentials.Credentials(access_key_id='access_key_id', access_key_secret='access_key_security', security_token='security_token')
    
        credentials_provider = oss.credentials.CredentialsProviderFunc(func=get_credentials_wrapper)
    
       # 載入SDK的預設配置,並設定憑證提供者
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
        
        # 填寫Bucket所在地區
        cfg.region = "<region-id>"
    
        # 使用配置好的資訊建立OSS用戶端
        client = oss.Client(cfg)
    
        # 使用client進行後續操作...
    
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數
  2. 實現credentials.CredentialsProvider介面

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    # -*- coding: utf-8 -*-
    import alibabacloud_oss_v2 as oss
    
    class CredentialProviderWrapper(oss.credentials.CredentialsProvider):
        def get_credentials(self):
            # TODO
            # 自訂訪問憑證的擷取方法
    
            # 返回長期憑證access_key_id, access_key_secrect
            return oss.credentials.Credentials('<access_key_id>', '<access_key_secrect>')
    
            # 返回 STS臨時憑證access_key_id, access_key_secrect, token
            # 對於臨時憑證,需要根據到期時間,重新整理憑證。
            # return oss.credentials.Credentials('<access_key_id>', '<access_key_secrect>', '<token>');
    
    def main():
        # 建立憑證提供者,用於動態載入憑證
        credentials_provider = CredentialProviderWrapper()
    
        # 載入OSS SDK的預設配置
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 填寫Bucket所在地區
        cfg.region = '<region-id>'
    
        client = oss.Client(cfg)
    
        # 使用client進行後續操作...
    
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數

匿名訪問

如果您只需要訪問公用讀取許可權的OSS資源,可以使用匿名訪問方式,無需提供任何憑證。

運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
import alibabacloud_oss_v2 as oss

# 建立匿名憑證提供者
credentials_provider = oss.credentials.AnonymousCredentialsProvider()

# 配置用戶端
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# 填寫Bucket所在地區
cfg.region = '<region-id>'

# 建立OSS用戶端
client = oss.Client(cfg)

錯誤自助排查

使用OSS Python SDK V2訪問OSS出現錯誤時,OSS會返回HTTP Code、Message、RequestId、EC錯誤碼等資訊,其中EC碼對應一個具體的錯誤原因,您可以使用EC碼自助進行錯誤排查。

  1. 例如,當您使用以下代碼下載一個並不存在的檔案時。

    運行範例程式碼前,請將代碼中的 <region-id>預留位置替換為實際的地區和Endpoint,如 ap-southeast-1。
    import alibabacloud_oss_v2 as oss
    
    def main():
        # 從環境變數中載入憑證資訊,用於身分識別驗證
        credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
    
        # 載入SDK的預設配置,並設定憑證提供者
        cfg = oss.config.load_default()
        cfg.credentials_provider = credentials_provider
    
        # 設定配置中的地區資訊
        cfg.region = '<region-id>'
    
        # 使用配置好的資訊建立OSS用戶端
        client = oss.Client(cfg)
    
        # 執行擷取對象的請求,指定儲存空間名稱和對象名稱
        result = client.get_object(oss.GetObjectRequest(
            bucket="Your Bucket Name",  # 指定儲存空間名稱
            key="Your Object Key",  # 指定對象鍵名
        ))
    
        # 輸出擷取對象的結果資訊,用於檢查請求是否成功
        print(f'status code: {result.status_code},'
              f' request id: {result.request_id},'
        )
    
        # 使用上下文管理器確保資源釋放
        with result.body as body_stream:
            data = body_stream.read()
            print(f"檔案讀取完成,資料長度:{len(data)} bytes")
    
            path = "./get-object-sample.txt"
            with open(path, 'wb') as f:
                f.write(data)
            print(f"檔案下載完成,儲存至路徑:{path}")
    
    # 當此指令碼被直接運行時,調用main函數
    if __name__ == "__main__":
        main()  # 指令碼入口,當檔案被直接運行時調用main函數
  2. 返回樣本如下,返回結果中包含'EC': '0026-00000001',作為該錯誤原因的唯一標識。

    alibabacloud_oss_v2.exceptions.OperationError: operation error GetObject: Error returned by Service.
            Http Status Code: 404.
            Error Code: NoSuchKey.
            Request Id: 67CA9AD3ECB4DB3034E5A92D.
            Message: The specified key does not exist..
            EC: 0026-00000001.
            Timestamp: 2025-03-07 07:05:55+00:00.
            Request Endpoint: GET https://xxx.oss-cn-hangzhou.aliyuncs.com/asghdjfjdas.
  3. 通過以上錯誤請求樣本返回的EC錯誤碼尋找問題原因及對應解決方案的操作步驟如下。

    1. 開啟OpenAPI問題自助診斷平台。

    2. 在搜尋方塊中,輸入EC錯誤碼,例如0026-00000001,然後單擊診斷。

    3. 在搜尋結果中尋找問題原因及對應解決方案。搜尋後,診斷方案頁面將展示對應錯誤碼的問題描述(目標檔案不存在)、問題原因(如檔案上傳失敗、生命週期規則引發刪除、被使用者刪除或跨地區複製刪除等)、問題樣本以及解決方案(通過 HeadObject 介面驗證 Object 是否存在,通過 ListObjectVersions 檢查 VersionID,並檢查命名規範、生命週期規則、許可權使用者及跨地區複製配置等)。頁面底部相關文檔提供 NoSuchKey 和 NoSuchVersion 的參考連結。

範例程式碼

OSS Python SDK V2提供豐富的範例程式碼供參考或直接使用。

樣本內容

GitHub樣本檔案

建立儲存空間(Python SDK V2)

put_bucket.py

列舉儲存空間(Python SDK V2)

list_buckets.py

判斷儲存空間是否存在(Python SDK V2)

is_bucket_exist.py

擷取儲存空間的地區(Python SDK V2)

get_bucket_location.py

擷取儲存空間的資訊(Python SDK V2)

get_bucket_info.py

擷取儲存空間的儲存容量(Python SDK V2)

get_bucket_stat.py

刪除儲存空間(Python SDK V2)

delete_bucket.py

資源群組(Python SDK V2)

儲存空間標籤(Python SDK V2)

要求者付費模式(Python SDK V2)

查詢Endpoint資訊(Python SDK V2)

describe_regions.py

簡單上傳(Python SDK V2)

put_object.py

追加上傳(Python SDK V2)

append_object.py

分區上傳(Python SDK V2)

complete_multipart_upload.py

表單上傳(Python SDK V2)

post_object.py

使用預簽名URL上傳(Python SDK V2)

presigner_put_object.py

檔案上傳管理器(Python SDK V2)

upload_file.py

簡單下載(Python SDK V2)

get_object.py

範圍下載(Python SDK V2)

get_object.py

類檔案唯讀(Python SDK V2)

open_file.py

使用預簽名URL下載(Python SDK V2)

presigner_get_object.py

檔案下載管理員(Python SDK V2)

download_file.py

拷貝對象(Python SDK V2)

copy_object.py

分區拷貝(Python SDK V2)

upload_part_copy.py

檔案拷貝管理器(Python SDK V2)

copier.py

判斷檔案是否存在(Python SDK V2)

is_object_exist.py

列舉檔案(Python SDK V2)

list_objects_v2.py

刪除檔案(Python SDK V2)

解凍檔案(Python SDK V2)

管理檔案中繼資料(Python SDK V2)

轉換檔儲存類型(Python SDK V2)

copy_object.py

重新命名檔案(Python SDK V2)

copy_object.py

管理軟連結(Python SDK V2)

管理儲存空間的讀寫權限(Python SDK V2)

管理檔案存取權限(Python SDK V2)

Bucket Policy(Python SDK V2)

put_bucket_policy.py

管理版本控制(Python SDK V2)

put_bucket_version.py

防盜鏈(Python SDK V2)

跨域資源共用(Python SDK V2)

合規保留原則(Python SDK V2)

服務端加密(Python SDK V2)

用戶端加密(Python SDK V2)

資料複製(Python SDK V2)

put_bucket_replication.py

訪問跟蹤(Python SDK V2)

put_bucket_access_monitor.py

生命週期管理(Python SDK V2)

儲存空間清單(Python SDK V2)

日誌轉存(Python SDK V2)

歸檔直讀(Python SDK V2)

put_bucket_archive_direct_read.py

標量檢索(Python SDK V2)

向量索引(Python SDK V2)

綁定自訂網域名(Python SDK V2)

傳輸加速(Python SDK V2)

put_bucket_transfer_acceleration.py

同步處理(Python SDK V2)

process_object.py

非同步處理(Python SDK V2)

async_process_object.py

OSS全域阻止公用訪問(Python SDK V2)

put_public_access_block.py

Bucket層級阻止公用訪問(Python SDK V2)

put_bucket_public_access_block.py

存取點層級阻止公用訪問(Python SDK V2)

put_access_point_public_access_block.py

資源集區QoS管理(Python SDK V2)

-