全部產品
Search
文件中心

Object Storage Service:Bucket Policy(Python SDK V2)

更新時間:Jul 31, 2025

Bucket Policy是OSS提供的一種針對儲存空間(Bucket)的授權策略,使您可以精細化地授權或限制有身份的訪問者(阿里雲帳號、RAM使用者、RAM角色)或匿名訪問者對指定OSS資源的訪問。例如,您可以為其他阿里雲帳號的RAM使用者授予指定OSS資源的唯讀許可權。

注意事項

  • 在配置Bucket Policy之前,請確保您已瞭解該功能。詳情請參見Bucket Policy

  • 本文範例程式碼以華東1(杭州)的地區IDcn-hangzhou為例,預設使用外網Endpoint,如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 要設定Bucket Policy,您必須有oss:PutBucketPolicy許可權;要擷取Bucket Policy,您必須有oss:GetBucketPolicy許可權;要刪除Bucket Policy,您必須有oss:DeleteBucketPolicy許可權。具體操作,請參見為RAM使用者授予自訂的權限原則

方法定義

設定Bucket Policy

put_bucket_policy(request: PutBucketPolicyRequest, **kwargs) → PutBucketPolicyResult

擷取Bucket Policy

get_bucket_policy(request: GetBucketPolicyRequest, **kwargs) → GetBucketPolicyResult

刪除Bucket Policy

delete_bucket_policy(request: DeleteBucketPolicyRequest, **kwargs) → DeleteBucketPolicyResult

參數名

類型

說明

request

PutBucketPolicyRequest

佈建要求參數,具體請參見PutBucketPolicyRequest

GetBucketPolicyRequest

佈建要求參數,具體請參見GetBucketPolicyRequest

DeleteBucketPolicyRequest

佈建要求參數,具體請參見DeleteBucketPolicyRequest

傳回值列表

類型

說明

PutBucketPolicyResult

傳回值,具體請參見PutBucketPolicyResult

GetBucketPolicyResult

傳回值,具體請參見GetBucketPolicyResult

DeleteBucketPolicyResult

傳回值,具體請參見DeleteBucketPolicyResult

關於設定Bucket Policy方法的完整定義,請參見put_bucket_policy

關於擷取Bucket Policy方法的完整定義,請參見get_bucket_policy

關於刪除Bucket Policy方法的完整定義,請參見delete_bucket_policy

範例程式碼

設定Bucket Policy

您可以使用以下代碼設定Bucket Policy。

import argparse
import alibabacloud_oss_v2 as oss

# 建立一個命令列參數解析器用於擷取命令列參數
parser = argparse.ArgumentParser(description="put bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列參數
    args = parser.parse_args()

    # 從環境變數中載入訪問憑證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置
    cfg = oss.config.load_default()
    # 設定憑據提供者
    cfg.credentials_provider = credentials_provider
    # 設定地區
    cfg.region = args.region
    # 如果提供了endpoint,則設定endpoint到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # 以下樣本用於資源擁有者(即UID為174649585760xxxx的Bucket Owner)通過Bucket Policy授權指定使用者(UID為20214760404935xxxx的RAM使用者)擁有列舉examplebucket下所有檔案的許可權。
    policy_text = "{\"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"oss:GetObject\", \"oss:ListObjects\"], \"Principal\": [\"20214760404935xxxx\"], \"Resource\": [\"acs:oss:*:174649585760xxxx:examplebucket/*\"]}], \"Version\": \"1\"}"

    # 將policy應用到指定的儲存空間
    result = client.put_bucket_policy(oss.PutBucketPolicyRequest(
            bucket=args.bucket,
            body=policy_text,
    ))

    # 列印結果的狀態代碼和請求ID
    print(f'status code: {result.status_code}, request id: {result.request_id}')

if __name__ == "__main__":
    main()

擷取Bucket Policy

您可以使用以下代碼擷取Bucket Policy。

import argparse
import alibabacloud_oss_v2 as oss

# 建立一個命令列參數解析器
parser = argparse.ArgumentParser(description="get bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列參數
    args = parser.parse_args()

    # 從環境變數中載入訪問憑證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置
    cfg = oss.config.load_default()
    # 設定憑證提供者為從環境變數擷取的憑證
    cfg.credentials_provider = credentials_provider
    # 設定地區
    cfg.region = args.region
    # 如果提供了endpoint,則設定endpoint到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # 調用get_bucket_policy方法擷取指定儲存空間的策略
    result = client.get_bucket_policy(oss.GetBucketPolicyRequest(
            bucket=args.bucket,
    ))

    # 列印返回的狀態代碼、請求ID和響應體
    print(f'status code: {result.status_code},'
            f' request id: {result.request_id},'
            f' body: {result.body},'
    )

# 當指令碼作為主程式運行時,調用main函數
if __name__ == "__main__":
    main()

刪除Bucket Policy

您可以使用以下代碼刪除Bucket Policy。

import argparse
import alibabacloud_oss_v2 as oss

# 建立一個命令列參數解析器
parser = argparse.ArgumentParser(description="delete bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令列參數
    args = parser.parse_args()

    # 從環境變數中載入訪問憑證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK預設配置
    cfg = oss.config.load_default()
    # 設定憑證提供者為從環境變數擷取的憑證
    cfg.credentials_provider = credentials_provider
    # 設定地區
    cfg.region = args.region
    # 如果指定了endpoint,則設定endpoint到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

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

    # 調用刪除儲存空間policy的方法
    result = client.delete_bucket_policy(oss.DeleteBucketPolicyRequest(
            bucket=args.bucket,  # 指定要操作的儲存空間名
    ))

    # 列印請求的結果狀態代碼和請求ID
    print(f'status code: {result.status_code}, request id: {result.request_id}')

# 當指令碼作為主程式運行時執行main函數
if __name__ == "__main__":
    main()

相關文檔