バケットポリシーはリソースベースの承認ポリシーです。バケットオーナーは、バケットポリシーを使用して、他のユーザーに Object Storage Service (OSS) 内の特定のリソースへのアクセスを承認できます。このトピックでは、bucket-policy コマンドを実行して、バケットポリシーを追加、変更、クエリ、または削除する方法について説明します。
使用上の注意
バケットポリシーを追加または変更するには、
oss:PutBucketPolicy権限が必要です。バケットポリシーをクエリするには、oss:GetBucketPolicy権限が必要です。バケットポリシーを削除するには、oss:DeleteBucketPolicy権限が必要です。詳細については、「RAM ユーザーにカスタムポリシーをアタッチする」をご参照ください。ossutil 1.6.16 以降では、コマンドラインでバイナリ名として ossutil を直接使用できます。オペレーティングシステムに基づいてバイナリ名を更新する必要はありません。 ossutil 1.6.16 より前のバージョンでは、オペレーティングシステムに基づいてバイナリ名を更新する必要があります。詳細については、「ossutil コマンドリファレンス」をご参照ください。
バケットポリシーの詳細については、「バケットポリシー」をご参照ください。
バケットポリシーを追加または変更する
バケットポリシーを追加または変更する前に、ローカルコンピューターに JSON ファイルを作成し、その JSON ファイルにバケットポリシーを構成する必要があります。 1 つの JSON ファイルに複数のバケットポリシーを構成できます。ただし、バケットポリシーの合計サイズは 16 KB を超えることはできません。
バケットポリシーを追加または変更すると、ossutil は JSON ファイルからバケットポリシーを読み取り、指定されたバケットにポリシーを追加します。バケットポリシーを追加すると、既存のバケットポリシーは上書きされます。
コマンド構文
ossutil bucket-policy --method put oss://bucketname local_json_file次の表は、上記のパラメーターについて説明しています。
パラメーター
説明
bucketname
バケットポリシーを追加または変更するバケットの名前。
local_json_file
バケットポリシーを構成するローカル JSON ファイルの名前。
例
ローカルコンピューターに local_json_file という名前のファイルを作成し、さまざまなシナリオに基づいてさまざまなバケットポリシーを構成します。
次の例は、一般的なバケットポリシーの構成方法を示しています。
説明次の例は、Resource パラメーターで UID が
174649585760****であるバケットオーナーが、Principal パラメーターで UID が20214760404935****である 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_file
クエリされたバケットポリシーを格納するために使用されるローカル 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 シークレットを指定します。
たとえば、次のコマンドを実行して、中国 (杭州) リージョンにあり、別の Alibaba Cloud アカウントが所有する examplebucket という名前のバケットのバケットポリシーを構成できます。
ossutil bucket-policy --method put oss://examplebucket local_json_file -e oss-cn-hangzhou.aliyuncs.com -i yourAccessKeyID -k yourAccessKeySecret共通オプションの詳細については、「共通オプション」をご参照ください。