すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:バケットポリシー (Python SDK V1)

最終更新日:Nov 29, 2025

バケットポリシーを使用すると、匿名ユーザーや、Alibaba Cloud アカウント、RAM ユーザー、RAM ロールなどの他のユーザーに対して、特定の Object Storage Service (OSS) リソースへのアクセスを許可または制限できます。例えば、別の Alibaba Cloud アカウントの RAM ユーザーに、特定の OSS リソースに対する読み取り専用権限を付与できます。

注意事項

  • バケットポリシーを設定する前に、この機能について理解していることを確認してください。詳細については、「バケットポリシー」をご参照ください。

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス認証情報は環境変数から取得します。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。

  • このトピックでは、OSSClient インスタンスは OSS エンドポイントを使用して作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。

  • バケットポリシーを設定するには、oss:PutBucketPolicy 権限が必要です。バケットポリシーを取得するには、oss:GetBucketPolicy 権限が必要です。バケットポリシーを削除するには、oss:DeleteBucketPolicy 権限が必要です。詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。

バケットポリシーの設定

次のコードは、バケットポリシーの設定方法を示しています。

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import json

# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Endpoint を、バケットが所在するリージョンの URL に設定します。例えば、中国 (杭州) リージョンの場合、Endpoint を https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Endpoint に対応するリージョン (cn-hangzhou など) を設定します。このパラメーターは v4 署名に必要です。
region = "cn-hangzhou"

# yourBucketName をご利用のバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# この例では、リソース所有者 (UID 174649585760xxxx のバケットオーナー) がバケットポリシーを使用して、Resource Access Management (RAM) ユーザー (UID 20214760404935xxxx) に examplebucket 内のすべてのファイルをリストする権限を付与します。
policy_text = '{"Statement": [{"Effect": "Allow", "Action": ["oss:GetObject", "oss:ListObjects"], "Principal": ["20214760404935xxxx"], "Resource": ["acs:oss:*:174649585760xxxx:examplebucket/*"]}], "Version": "1"}'

# 権限付与ポリシーをアップロードします。
bucket.put_bucket_policy(policy_text)

バケットポリシーの取得

次のコードは、バケットポリシーの取得方法を示しています。

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import json
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが所在するリージョンの Endpoint を指定します。例えば、バケットが中国 (杭州) リージョンにある場合、Endpoint を https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Endpoint に対応するリージョン (cn-hangzhou など) を指定します。注意:このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"

# yourBucketName をご利用のバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# バケットポリシーを取得します。
result = bucket.get_bucket_policy()
policy_json = json.loads(result.policy) 
print("Get policy text: ", policy_json)

バケットポリシーの削除

次のコードは、バケットポリシーの削除方法を示しています。

# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが所在するリージョンの Endpoint を設定します。例えば、バケットが中国 (杭州) リージョンにある場合、Endpoint を https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Endpoint に対応するリージョン (cn-hangzhou など) を設定します。注意:このパラメーターは V4 署名に必要です。
region = "cn-hangzhou"

# yourBucketName をご利用のバケット名に設定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# バケットポリシーを削除します。
result = bucket.delete_bucket_policy()
assert int(result.status)//100 == 2

関連ドキュメント

  • バケットポリシーの完全なコード例については、GitHub の例をご参照ください。

  • バケットポリシーを設定するための API リファレンスについては、「PutBucketPolicy」をご参照ください。

  • バケットポリシーを取得するための API リファレンスについては、「GetBucketPolicy」をご参照ください。

  • バケットポリシーを削除するための API リファレンスについては、「DeleteBucketPolicy」をご参照ください。