バケットポリシーは、リソースベースの権限付与ポリシーです。 バケット所有者は、バケットポリシーを使用して、他のユーザーにObject Storage Service (OSS) の特定のリソースへのアクセスを許可できます。 このトピックでは、bucket-policyコマンドを実行してバケットポリシーを追加、変更、クエリ、または削除する方法について説明します。
使用上の注意
バケットポリシーを追加または変更するには、
oss:PutBucketPolicy
権限が必要です。 バケットポリシーをクエリするには、oss:GetBucketPolicy
権限が必要です。 バケットポリシーを削除するには、oss:DeleteBucketPolicy
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。ossutil 1.6.16以降の場合、コマンドラインでossutilをバイナリ名として直接使用できます。 オペレーティングシステムに基づいてバイナリ名を更新する必要はありません。 1.6.16より前のossutilの場合、オペレーティングシステムに基づいてバイナリ名を更新する必要があります。 詳細は、「ossutilコマンドリファレンス」をご参照ください。
バケットポリシーの詳細については、「バケットポリシー」をご参照ください。
バケットポリシーの追加または変更
バケットポリシーを追加または変更する前に、ローカルコンピューターにJSONファイルを作成し、JSONファイルでバケットポリシーを設定する必要があります。 1つのJSONファイルで複数のバケットポリシーを設定できます。 ただし、バケットポリシーの合計サイズは16 KBを超えることはできません。
バケットポリシーを追加または変更すると、ossutilはJSONファイルからバケットポリシーを読み取り、指定されたバケットにポリシーを追加します。 バケットポリシーを追加すると、既存のバケットポリシーが上書きされます。
コマンド構文
ossutil bucket-policy --method put oss://bucketname local_json_file
次の表に、上記のパラメーターを示します。
パラメーター
説明
bucketname
バケットポリシーを追加または変更するバケットの名前。
local_json_ファイル
バケットポリシーを設定するローカルJSONファイルの名前。
例
ローカルコンピューターにlocal_json_fileという名前のファイルを作成し、さまざまなシナリオに基づいてさまざまなバケットポリシーを設定します。
次の例は、共通のバケットポリシーを設定する方法を示しています。
説明次の例は、ResourceパラメーターでUIDが
174649585760xxxx
のバケット所有者がバケットポリシーを構成して、PrincipalパラメーターでUIDが202147604935xxxx
のRAMユーザーや匿名ユーザー*
など、RAMユーザーに異なる権限を付与する方法を示しています。指定されたIPアドレスからの匿名リクエストのみが、examplebucketという名前のバケット内のすべてのリソースにアクセスできるように指定します。
{ "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectAcl", "oss:ListObjects", "oss:RestoreObject", "oss:GetVodPlaylist", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Condition": { "IpAddress": { "acs:SourceIp": [ "10.10.10.10" ] } }, "Effect": "Allow", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/*" ] }, { "Action": [ "oss:ListObjects", "oss:GetObject" ], "Condition": { "StringLike": { "oss:Prefix": [ "*" ] }, "IpAddress": { "acs:SourceIp": [ "10.10.10.10" ] } }, "Effect": "Allow", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
examplebucketという名前のバケットの
hangzhou/2020
およびhangzhou/2015
ディレクトリに対するRAMユーザーの読み取り専用権限を付与します。{ "Statement": [ { "Action": [ "oss:GetObject", "oss:GetObjectAcl", "oss:ListObjects", "oss:RestoreObject", "oss:GetVodPlaylist", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Effect": "Allow", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*", "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*" ] }, { "Action": [ "oss:ListObjects", "oss:GetObject" ], "Condition": { "StringLike": { "oss:Prefix": [ "hangzhou/2020/*", "hangzhou/2015/*" ] } }, "Effect": "Allow", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
examplebucketという名前のバケットの
hangzhou/2021/
ディレクトリ内のすべてのオブジェクトへの匿名リクエストを拒否します。{ "Statement": [ { "Action": [ "oss:RestoreObject", "oss:ListObjects", "oss:AbortMultipartUpload", "oss:PutObjectAcl", "oss:GetObjectAcl", "oss:ListParts", "oss:DeleteObject", "oss:PutObject", "oss:GetObject", "oss:GetVodPlaylist", "oss:PostVodPlaylist", "oss:PublishRtmpStream", "oss:ListObjectVersions", "oss:GetObjectVersion", "oss:GetObjectVersionAcl", "oss:RestoreObjectVersion" ], "Effect": "Deny", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2021/*" ] }, { "Action": [ "oss:ListObjects", "oss:GetObject" ], "Condition": { "StringLike": { "oss:Prefix": [ "hangzhou/2021/*" ] } }, "Effect": "Deny", "Principal": [ "*" ], "Resource": [ "acs:oss:*:174649585760xxxx:examplebucket" ] } ], "Version": "1" }
examplebucketバケットにバケットポリシーを追加します。
ossutil bucket-policy --method put oss://examplebucket local_json_file
次の出力が表示された場合、バケットポリシーがexamplebucketバケットに追加されます。
1.125101(s) elapsed
バケットポリシーの照会
コマンド構文
ossutil bucket-policy --method get oss://bucketname local_json_file
パラメーター
説明
bucketname
バケットポリシーを照会するバケットの名前。
local_json_ファイル
照会されたバケットポリシーを格納するために使用されるローカルJSONファイル。 このパラメーターが指定されていない場合、クエリされたバケットポリシーはJSONファイルに保存されずに表示されます。
例
次のコマンドを実行して、examplebucketという名前のバケットポリシーを照会します。
ossutil bucket-policy --method get oss://examplebucket local_json_file
次の出力が表示されると、examplebucketのバケットポリシーが照会され、ローカルJSONファイルに書き込まれます。
0.212407(s) elapsed
バケットポリシーの削除
バケットポリシーを使用して他のユーザーにOSSリソースへのアクセスを許可する必要がなくなった場合は、設定済みのバケットポリシーを削除します。
コマンド構文
ossutil bucket-policy --method delete oss://bucketname
例
次のコマンドを実行して、examplebucketという名前のバケットのすべてのバケットポリシーを削除します。
ossutil bucket-policy --method delete oss://examplebucket
次の出力が表示されると、examplebucketのすべてのバケットポリシーが削除されます。
0.530750(s) elapsed
一般的なオプション
ossutilを使用して別のリージョンにあるバケットに切り替える場合は、-eオプションを追加して、バケットが配置されているリージョンのエンドポイントを指定します。 ossutilを使用して別のAlibaba Cloudアカウントに属するバケットに切り替える場合、-iオプションを追加して指定されたアカウントのAccessKey IDを指定し、-kオプションを追加して指定されたアカウントのAccessKey secretを指定します。
たとえば、次のコマンドを実行して、中国 (杭州) リージョンにあり、別のAlibaba Cloudアカウントが所有するexamplebucketという名前のバケットのバケットポリシーを設定できます。
ossutil bucket-policy --method put oss://examplebucket local_json_file -e oss-cn-hangzhou.aliyuncs.com -i LTAI4Fw2NbDUCV8zYUzAxxxx -k 67DLVBkH7EamOjy2W5RVAHUY9Hxxxx
共通オプションの詳細については、「共通オプション」をご参照ください。