バケットポリシーは、バケットにアタッチされるリソースベースのアクセスの制御ポリシーです。JSON フォーマットを使用して、特定の条件 (Condition) が満たされた場合にプリンシパル (Principal) がターゲットリソース (Resource) に対して実行できる操作 (Action) を指定する、詳細なアクセスルールを定義します。クロスアカウント認証、匿名アクセス、ネットワークソースに基づく制限など、複雑なアクセス制限を実現するためのコアメカニズムとして、バケットポリシーは詳細な権限管理を提供します。
仕組み
バケットポリシーは、リソースベースの権限付与モデルを使用します。権限の評価は、拒否優先の原則に従います。Object Storage Service (OSS) がアクセスリクエストを受信すると、システムはバケットポリシーや Resource Access Management (RAM) ポリシーを含む、関連するすべてのポリシーを評価します。いずれかのポリシーに明示的な拒否ルールが存在する場合、そのリクエストは即座にブロックされ、すべての許可ポリシーに優先します。
ポリシーがバケットのオーナーに与える影響:
権限付与対象ユーザーがワイルドカード文字 (*) に設定され、かつポリシーに Condition が含まれていない場合、バケットポリシーはバケットのオーナー以外のユーザーにのみ適用されます。
権限付与対象ユーザーがワイルドカード文字 (*) に設定され、かつポリシーに Condition が含まれている場合、バケットポリシーはバケットのオーナー (ルートアカウント) を含むすべてのユーザーに適用されます。
複数のバケットポリシールールの組み合わせ:
同じユーザーに対して複数のバケットポリシールールを設定した場合、そのユーザーの権限はすべてのポリシールールの組み合わせとなります。これらのポリシーのいずれかに拒否権限が含まれている場合、拒否権限が優先されます。
バケット権限付与ポリシーの設定
OSS では、グラフィカルインターフェイスと構文エディターの 2 つの方法でポリシーを設定できます。これらの方法は、それぞれ異なる設定シナリオに適しています。
グラフィカルインターフェイス:この方法は直感的な操作を提供します。フォームを使用して一般的な権限付与シナリオのポリシーを設定できるため、プロセスが簡素化されます。
構文エディター:この方法では、JSON フォーマットを使用して完全なポリシーを記述します。すべての高度な機能と複雑な条件の組み合わせをサポートし、最大限の設定の柔軟性を提供します。
グラフィカルポリシー方式
バケットリストに移動し、対象のバケットをクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
GUI で追加 を選択し、新規権限 をクリックします。
設定項目
説明
関連リソース
バケット全体 または 指定されたリソース に権限を付与するかどうかを選択します。
リソースパス
関連リソース を バケット全体 に設定した場合、リソースパス は
bucket-name/*となります。関連リソース を 指定されたリソース に設定した場合、権限を付与するリソースのフォルダまたは個別のオブジェクトを入力します。複数のレコードを追加できます。
ユーザー
権限を付与するオブジェクトを指定します。
すべてのアカウント (*):権限付与対象は、匿名ビジターを含むすべての人です。
RAM ユーザー:現在の Alibaba Cloud アカウント配下の RAM ユーザーを選択します。
現在のログインアカウントは、Alibaba Cloud アカウント、またはこのバケットの管理権限と RAM コンソールでの
ListUsers権限を持つ RAM ユーザーである必要があります。そうでない場合、現在のアカウントの RAM ユーザーリストを表示できません。その他のアカウント:権限を付与する他のアカウントまたは RAM ユーザーの UID、あるいは
arn:stsで始まる一時的な権限付与対象ユーザー (例:arn:sts::1798************:assumed-role/role-name/session-name) を入力します。複数のユーザーに権限を付与できます。1行に1ユーザーずつ入力してください。権限付与対象が RAM ロールの場合、そのアカウントは OSS コンソール経由で権限が付与されたリソースにアクセスできません。アクセスは、ossutil コマンドラインインターフェイス、SDK、または API などのツールを使用して行う必要があります。
許可された操作
シンプル設定:権限付与する操作の一般的な組み合わせを選択します。オプションには、読み取り専用 (ListObject を除く)、読み取り専用 (ListObject を除く)、[読み書き]、フルコントロール、アクセス拒否 があります。
説明OSS-HDFS サービスユーザーが
.dlsdata/フォルダおよびその中の任意のオブジェクトにアクセスできるようにするため、OSS-HDFS が有効になっているバケットのバケットポリシーを設定する際は、権限付与する操作を アクセス拒否 に設定しないでください。詳細設定:権限付与の 効果 (許可する または 拒否) と、権限付与する [操作] をカスタマイズします。
条件 (任意)
権限付与が有効になる条件を設定します。
アクセス方法:オプションには [HTTPS] と [HTTP] があります。オプションを選択すると、ポリシーは選択した方法を使用するアクセスリクエストに対してのみ有効になります。
IP =:IP アドレスのリストを入力します。このオプションを選択すると、ポリシーは指定した IP アドレスからのアクセスリクエストに対してのみ有効になります。
IP ≠:IP アドレスのリストを入力します。このオプションを選択すると、ポリシーは指定した IP アドレス以外からのアクセスリクエストに対してのみ有効になります。
VPC =:現在のアカウントの VPC を選択するか、別のアカウントの VPC を入力します。このオプションを選択すると、ポリシーは指定した VPC からのアクセスリクエストに対してのみ有効になります。
VPC ≠:現在のアカウントの VPC を選択するか、別のアカウントの VPC を入力します。このオプションを選択すると、ポリシーは指定した VPC 以外からのアクセスリクエストに対してのみ有効になります。
複数の条件を設定した場合、ポリシーが有効になるにはすべての条件を満たす必要があります (AND 関係)。
権限付与の設定を確認した後、[OK] をクリックしてバケットポリシーを適用します。
構文ベースのポリシー方式
バケットリストに移動し、対象のバケットをクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
構文で追加 を選択し、[編集] をクリックします。エディターに、JSON フォーマットで権限付与ポリシーを入力します。
ポリシー例:このポリシー例では、アクセスリクエストが VPC ネットワーク
vpc-t4nlw426y44rd3iq4xxxxからのものでない場合に、ユーザー20214760404935xxxxによるexample-bucketに対するすべての操作を拒否します。{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": "oss:*", "Principal": [ "20214760404935xxxx" ], "Resource": [ "acs:oss:*:174649585760xxxx:example-bucket", "acs:oss:*:174649585760xxxx:example-bucket/*" ], "Condition": { "StringNotEquals": { "acs:SourceVpc": "vpc-t4nlw426y44rd3iq4xxxx" } } } ] }完全な権限付与ポリシーには、Version と Statement が含まれます。
Version:アクセスポリシーのバージョンです。値は
1に固定されており、変更できません。Statement:ポリシーステートメントの本体です。1つ以上の特定の権限付与または拒否ルールが含まれます。各権限付与ステートメントには、Effect、Action、Principal、Resource、および Condition が含まれます。
ポリシー要素
説明
ポリシー例での意味
Effect
ポリシーの効果です。有効な値は
AllowとDenyです。リクエストを拒否します。
Action
リソースに対して実行する特定の操作です。ワイルドカード文字
*がサポートされています。すべての OSS 操作 (
oss:*) を拒否します。Principal
ポリシーが適用されるエンティティです。ユーザー、アカウント、ロールなどが該当します。
Principal フィールドが空のリスト (
Principal:[]) として設定されている場合、その動作はすべてのアカウント (Principal:["*"]) に設定されている場合と同じです。ポリシーは RAM ユーザー
20214760404935xxxxにのみ適用されます。Resource
ポリシーが適用されるリソースの範囲です。
ポリシーは
example-bucket自体と、その中のすべてのオブジェクトに適用されます。Condition
ポリシーが有効になる条件です。
複数の条件を設定した場合、ポリシーが有効になるにはすべての条件を満たす必要があります (AND 関係)。
この拒否ポリシーは、リクエストのソース VPC が
vpc-t4nlw426y44rd3iq4xxxxでない場合にのみ有効になります。権限付与要素の完全なリストについては、「OSS 権限付与の構文と要素」をご参照ください。
権限付与ポリシーを確認した後、[保存] をクリックし、画面の指示に従います。
ベクターバケットの権限付与ポリシーの設定
ベクターバケットは現在、構文エディターを使用したバケットポリシーの設定のみをサポートしています。
ベクターバケットリストに移動し、対象のベクターバケットをクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
[編集] をクリックします。エディターに、JSON フォーマットで権限付与ポリシーを入力します。
ポリシー例:このポリシー例では、ユーザー
20816353761158****に、vector-bucket-example内のインデックステーブルindextestのベクトルデータを読み書きする権限を付与します。{ "Version": "1", "Statement": [{ "Effect": "Allow", "Action": [ "oss:PutVectors", "oss:GetVectors" ], "Principal": [ "20816353761158****" ], "Resource": [ "acs:ossvector:*:*:vector-bucket-example/indextest" ] }] }完全な権限付与ポリシーには、Version と Statement が含まれます。
Version:アクセスポリシーのバージョンです。値は
1に固定されており、変更できません。Statement:ポリシーステートメントの本体です。1つ以上の特定の権限付与または拒否ルールが含まれます。各権限付与ステートメントには、Effect、Action、Principal、Resource、および Condition が含まれます。
ポリシー要素
説明
ポリシー例での意味
Effect
ポリシーの効果です。有効な値は
AllowとDenyです。リクエストを許可します。
Action
リソースに対して実行する特定の操作です。ワイルドカード文字
*がサポートされています。ベクトルデータの読み書き。
Principal
ポリシーが適用されるエンティティです。ユーザー、アカウント、ロールなどが該当します。
Principal フィールドが空のリスト (
Principal:[]) として設定されている場合、その動作はすべてのアカウント (Principal:["*"]) に設定されている場合と同じです。ポリシーは RAM ユーザー
20816353761158****にのみ適用されます。Resource
ポリシーが適用されるリソースの範囲です。
ポリシーは
vector-bucket-exampleのインデックステーブルindextestに適用されます。Condition
ポリシーが有効になる条件です。
複数の条件を設定した場合、ポリシーが有効になるにはすべての条件を満たす必要があります (AND 関係)。
なし。
権限付与要素の完全なリストについては、「OSS 権限付与の構文と要素」をご参照ください。
権限付与ポリシーを確認した後、[保存] をクリックし、画面の指示に従います。
一般的な権限付与シナリオ
以下のシナリオは、実際のビジネスにおけるバケットポリシーの典型的な適用例を示しています。これらのシナリオは、権限付与、アクセス制限、セキュリティコントロールなど、さまざまなニーズをカバーしています。各シナリオには、要件に応じて変更できる完全なポリシー設定例が提供されています。
シナリオ 1:指定した RAM ユーザーへの読み書き権限の付与
特定のチームメンバーやパートナーにバケット内のファイルのアップロード、ダウンロード、管理を許可する必要がある場合、バケットポリシーを使用して対応する RAM ユーザーに権限を付与できます。以下のポリシー例では、対象のバケット (example-bucket) に対する読み書き権限を、指定した RAM ユーザー (UID 27737962156157xxxx および 20214760404935xxxx) に付与します。
以下のポリシーは RAM ユーザーにバケットをリスト表示する権限を付与しないため、指定した RAM ユーザーは バケットリストページですべてのバケットを表示したり、バケットをクリックして開いたりすることはできません。指定した RAM ユーザーは、コンソールの左側のナビゲーションウィンドウで から対象のバケットを追加することでアクセスできます。
{
"Version":"1",
"Statement":[
{
"Effect":"Allow",
"Action":[
"oss:GetObject",
"oss:PutObject",
"oss:GetObjectAcl",
"oss:PutObjectAcl",
"oss:AbortMultipartUpload",
"oss:ListParts",
"oss:RestoreObject",
"oss:GetVodPlaylist",
"oss:PostVodPlaylist",
"oss:PublishRtmpStream",
"oss:ListObjectVersions",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl",
"oss:RestoreObjectVersion"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"oss:ListObjects"
],
"Principal":[
"27737962156157xxxx",
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"*"
]
}
}
}
]
}シナリオ 2:指定したフォルダに対する読み取り専用権限を特定の RAM ユーザーに付与
バケット内の特定のプロジェクトファイルを変更から保護しつつ、関連するプロジェクトメンバーに読み取りを許可する必要がある場合、対応する RAM ユーザーに読み取り専用権限を付与できます。以下のポリシー例では、対象のバケット (example-bucket) 内の指定したフォルダ (プレフィックス hangzhou/2020 および shanghai/2015) に対する読み取り専用権限を、指定した RAM ユーザー (UID 20214760404935xxxx) に付与します。
以下のポリシーは RAM ユーザーにバケットをリスト表示する権限を付与しないため、指定した RAM ユーザーは バケットリストページですべてのバケットを表示したり、バケットをクリックして開いたりすることはできません。指定した RAM ユーザーは、コンソールの左側のナビゲーションウィンドウで から対象のバケットを追加することでアクセスできます。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:GetObject",
"oss:GetObjectAcl",
"oss:GetObjectVersion",
"oss:GetObjectVersionAcl"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/hangzhou/2020/*",
"acs:oss:*:174649585760xxxx:example-bucket/shanghai/2015/*"
]
},
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Condition":{
"StringLike":{
"oss:Prefix":[
"hangzhou/2020/*",
"shanghai/2015/*"
]
}
},
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}シナリオ 3:指定した RAM ユーザーにバケットの表示とファイルのリスト表示権限を付与
特定のチームメンバーやパートナーにバケットに関するすべての情報を表示し、そのファイルをリスト表示することを許可する必要がある場合、バケットポリシーを使用して対応する権限を RAM ユーザーに付与できます。以下のポリシー例では、指定した RAM ユーザーに、対象のバケット (example-bucket) に関するすべての情報を表示し、その中のファイルをリスト表示する権限を付与します。
以下のポリシーは RAM ユーザーにバケットをリスト表示する権限を付与しないため、指定した RAM ユーザーは バケットリストページですべてのバケットを表示したり、バケットをクリックして開いたりすることはできません。指定した RAM ユーザーは、コンソールの左側のナビゲーションウィンドウで から対象のバケットを追加することでアクセスできます。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"20214760404935xxxx"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}シナリオ 4:指定した RAM ロールにファイルの読み取り権限を付与
RAM ユーザーやアプリケーションにバケットファイルへの一時的なアクセスを許可する必要がある場合、RAM ロールを作成し、必要な権限を付与できます。RAM ユーザーやアプリケーションはそのロールを偽装して一時的なアクセス認証情報を取得し、バケットファイルを読み取ります。以下のポリシー例では、1つの RAM ロール配下のすべてのセッションと、別の RAM ロール配下の特定のセッションに、バケット example-bucket 内のすべてのファイルを読み取る権限を付与します。
RAM ロールに権限を付与する場合、Principal は arn:sts::<uid>:assumed-role/<role-name>/<session-name> のフォーマットに従う必要があります。<role-name> と <session-name> の値は、大文字と小文字を区別します。
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetObject"
],
"Effect": "Allow",
"Principal": [
"arn:sts::10323xxxxx72056:assumed-role/role-name/session-name",
"arn:sts::10323xxxxx72056:assumed-role/role2-name/*"
],
"Resource": [
"acs:oss:*:10323xxxxx72056:example-bucket/*"
]
}
]
}シナリオ 5:すべてのビジターにすべてのファイルのリスト表示権限を付与
バケットが公開リソースの共有に使用され、すべてのビジターにファイル名は表示させたいが、実際のファイルコンテンツへのアクセスは許可したくない場合、Principal をワイルドカード文字 (*) に設定し、すべてのファイルをリスト表示する権限を付与できます。以下のポリシー例では、すべてのビジターに、対象のバケット (example-bucket) 内のすべてのファイルをリスト表示する権限を付与します。
{
"Version":"1",
"Statement":[
{
"Action":[
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Effect":"Allow",
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket"
]
}
]
}シナリオ 6:パブリックネットワークからのアクセスを制限
特定のバケットへのパブリックネットワークからのアクセスを禁止する必要がある場合、acs:SourceVpc 条件キーを使用してバケットポリシーに拒否ステートメントを作成できます。このステートメントは、VPC からのものではないリクエストをブロックします。なぜなら、パブリックネットワークからのリクエストには一致する VPC ネットワークプレフィックスがないためです。以下のポリシー例では、VPC ネットワーク外のすべてのビジターによる対象のバケット (example-bucket) へのアクセスを拒否します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "oss:*",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*",
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition": {
"StringNotLike": {
"acs:SourceVpc": [
"vpc-*"
]
}
}
}
]
}シナリオ 7:指定した VPC へのアクセスを制限
バケットへのアクセスを指定した VPC に制限する必要がある場合、acs:SourceVpc 条件キーを使用してバケットポリシーに拒否ステートメントを作成できます。このステートメントは、他の VPC やパブリックネットワークからのリクエストをブロックします。なぜなら、それらは指定された VPC ID 条件を満たさないためです。以下のポリシー例では、指定した VPC (ID t4nlw426y44rd3iq4xxxx) 外のすべてのビジターによる対象のバケット (example-bucket) 内のファイルの読み取りを拒否します。
以下の拒否ステートメントの Principal はワイルドカード文字 (
*) であり、Condition が含まれているため、拒否ステートメントはバケットのオーナーを含むすべてのビジターに適用されます。以下の拒否ステートメントはアクセスを制限するためにのみ使用され、いかなるアクセス権限も付与しません。権限付与対象エンティティにアクセス権限が付与されていない場合は、必要な権限を付与するための許可ステートメントも追加する必要があります。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}シナリオ 8:指定したパブリック IP アドレスへのアクセスを制限
バケットへのアクセスを指定したパブリック IP アドレスに制限する必要がある場合、acs:SourceIp 条件キーを使用してバケットポリシーに拒否ステートメントを作成します。このステートメントは、他のパブリック IP アドレスや VPC からのリクエストをブロックします。なぜなら、それらは指定された IP アドレス条件を満たさないためです。以下のポリシー例では、パブリック IP アドレス 203.0.113.5 からのビジターを除くすべてのビジターによる example-bucket からの読み取りを拒否します。
以下の拒否ステートメントの Principal はワイルドカード文字 (
*) であり、Condition が含まれているため、拒否ステートメントはバケットのオーナーを含むすべてのビジターに適用されます。以下の拒否ステートメントはアクセスを制限するためにのみ使用され、いかなるアクセス権限も付与しません。権限付与対象エンティティにアクセス権限が付与されていない場合は、必要な権限を付与するための許可ステートメントも追加する必要があります。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
}
]
}シナリオ 9:指定した VPC 内の特定の CIDR ブロックへのアクセスを制限
バケットへのアクセスを指定した VPC 内の特定の CIDR ブロックに制限する必要がある場合、2つの拒否ステートメントを作成する必要があります:
acs:SourceVpc条件キーを使用して、他の VPC やパブリックネットワークからのリクエストをブロックする拒否ステートメントを作成します。acs:SourceIpとacs:SourceVpc条件キーを使用して、VPC 内の指定した CIDR ブロック外からのリクエストをブロックする拒否ステートメントを作成します。
これら2つの拒否ステートメントをバケットポリシーに追加すると、いずれかの条件を満たすリクエストは拒否されます。以下のポリシー例では、指定した VPC (ID t4nlw426y44rd3iq4xxxx) の指定した CIDR ブロック (192.168.0.0/16) 外のすべてのビジターによる対象のバケット (example-bucket) 内のファイルの読み取りを拒否します。
以下の拒否ステートメントの Principal はワイルドカード文字 (
*) であり、Condition が含まれているため、拒否ステートメントはバケットのオーナーを含むすべてのビジターに適用されます。以下の拒否ステートメントはアクセスを制限するためにのみ使用され、いかなるアクセス権限も付与しません。権限付与対象エンティティにアクセス権限が付与されていない場合は、必要な権限を付与するための許可ステートメントも追加する必要があります。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"192.168.0.0/16"
]
}
}
}
]
}シナリオ 10:指定したパブリック IP アドレスまたは指定した VPC へのアクセスを制限
バケットへのアクセスを指定したパブリック IP アドレスまたは指定した VPC に制限する必要がある場合、2つの拒否ステートメントを作成する必要があります:
acs:SourceIp条件キーを使用して他のパブリック IP アドレスからのリクエストをブロックする拒否ステートメント。このステートメントは、StringNotLike条件オペレーターとacs:SourceVpc条件キーを使用して、任意の VPC からのリクエストをブロックしないようにします。acs:SourceVpc条件キーを使用して、他の VPC からのリクエストをブロックする拒否ポリシーステートメントを作成できます。同じステートメントで、StringLike条件オペレーターとacs:SourceVpcキーを使用して、指定したパブリック IP アドレスからのリクエストを除外します。これにより、これらのパブリック IP アドレスからのリクエストが、指定した VPC からのものではないという理由で誤って拒否されるのを防ぎます。
これら2つの拒否ステートメントをバケットポリシーに追加すると、いずれかの条件を満たすリクエストは拒否されます。以下のポリシー例では、指定したパブリック IP アドレス (203.0.113.5) または指定した VPC (ID t4nlw426y44rd3iq4xxxx) 外のすべてのビジターによる対象のバケット (example-bucket) 内のファイルの読み取りを拒否します。
以下の拒否ステートメントの Principal はワイルドカード文字 (
*) であり、Condition が含まれているため、拒否ステートメントはバケットのオーナーを含むすべてのビジターに適用されます。以下の拒否ステートメントはアクセスを制限するためにのみ使用され、いかなるアクセス権限も付与しません。権限付与対象エンティティにアクセス権限が付与されていない場合は、必要な権限を付与するための許可ステートメントも追加する必要があります。
{
"Version":"1",
"Statement":[
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringNotLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"NotIpAddress":{
"acs:SourceIp":[
"203.0.113.5"
]
}
}
},
{
"Effect":"Deny",
"Action":[
"oss:GetObject"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition":{
"StringLike":{
"acs:SourceVpc":[
"vpc-*"
]
},
"StringNotEquals":{
"acs:SourceVpc":[
"vpc-t4nlw426y44rd3iq4xxxx"
]
}
}
}
]
}シナリオ 11:IP ブラックリストの設定
特定の IP アドレスからのバケットおよびそのオブジェクトへのアクセスを拒否する必要がある場合、IP ブラックリストポリシーを使用できます。バケットポリシーに拒否ポリシーを設定することで、指定した IP アドレスまたは CIDR ブロックからのすべてのアクセスリクエストをブロックできます。
以下の拒否ステートメントの Principal はワイルドカード文字 (
*) であり、Condition が含まれているため、拒否ステートメントはバケットのオーナーを含むすべてのビジターに適用されます。複数の IP アドレスと CIDR ブロックを同時に設定できます。カンマで区切ってください。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": "oss:*",
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:174649585760xxxx:example-bucket/*",
"acs:oss:*:174649585760xxxx:example-bucket"
],
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"101.***.***.100"
]
}
}
}
]
}シナリオ 12:API 呼び出しに一時的なアクセス認証情報を要求
API 呼び出しに一時的なアクセス認証情報の使用を要求するには、acs:AccessId 条件キーを使用してバケットポリシーに拒否ステートメントを作成できます。このステートメントは、Alibaba Cloud アカウントや RAM ユーザーの長期的な AccessKey ペアなど、一時的でない認証情報を使用するアクセス方法をブロックします。一時的でない認証情報を使用したアクセス試行は、拒否ルールをトリガーします。以下のポリシー例では、一時的なアクセス認証情報 (TMP. または STS. で始まる) を使用するビジターを除くすべてのビジターによる対象のバケット (example-bucket) の表示とそのファイルのリスト表示を拒否します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action":[
"oss:Get*",
"oss:ListObjects",
"oss:ListObjectVersions"
],
"Principal":[
"*"
],
"Resource":[
"acs:oss:*:174649585760xxxx:example-bucket/*"
],
"Condition": {
"StringNotLike": {
"acs:AccessId": [
"TMP.*",
"STS.*"
]
}
}
}
]
}シナリオ 13:バケットとオブジェクトの ACL を公開に設定することを禁止
バケットとオブジェクトの ACL を公開に設定することを禁止する必要がある場合、2つの拒否ステートメントを作成する必要があります:
oss:x-oss-acl条件キーを使用して、バケット ACL がprivate以外の権限に設定されるのを防ぐ拒否ステートメントを作成します。公開読み取りまたは公開読み書き権限を設定しようとすると、権限が非公開ではないため、拒否ルールがトリガーされます。oss:x-oss-object-acl条件キーを使用して、オブジェクト ACL がprivateおよびdefault以外の権限に設定されるのを防ぐ拒否ステートメントを作成します。
これら2つの拒否ステートメントをバケットポリシーに追加すると、いずれかの条件を満たすリクエストは拒否されます。以下のポリシー例では、対象のバケット (example-bucket) に公開アクセス権限を設定する操作を拒否します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:PutBucketAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:example-bucket"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-acl": "private"
}
}
},
{
"Effect": "Deny",
"Action": [
"oss:PutObjectAcl"
],
"Principal": [
"*"
],
"Resource": [
"acs:oss:*:*:example-bucket/*"
],
"Condition": {
"StringNotEquals": {
"oss:x-oss-object-acl": [
"private",
"default"
]
}
}
}
]
}開発とツールの統合
コンソールでの手動設定に加えて、グラフィカルツール、コマンドラインツール、SDK を使用してバケットポリシーを設定することもできます。
グラフィカルツール ossbrowser の使用
ossbrowser はバケットレベルのポリシー操作をサポートし、コンソールと同様の視覚的な体験を提供します。ossbrowser をインストールしてログインし、画面の指示に従ってバケットポリシーを設定します。
コマンドラインインターフェイス ossutil の使用
put-bucket-policy コマンドを実行して、権限付与ポリシーを設定できます。
説明ベクターバケットの権限付与ポリシーを設定するには、
ossutil vectors-api put-bucket-policyコマンドを使用します。SDK の使用
Java SDK、Python SDK、Go SDK、およびNode.js SDK などのさまざまなプログラミング言語を使用して、ポリシーを設定できます。サポートされている SDK の詳細については、「SDK リファレンス」をご参照ください。
API の直接呼び出し
PutBucketPolicy 操作を呼び出して、バケットの権限付与ポリシーを設定できます。
クォータと制限
ポリシーサイズ:1つのバケットに複数のバケットポリシーを追加できます。すべてのポリシーの合計サイズは 16 KB を超えることはできません。
フィールド長:バケットポリシーの各フィールドの長さは 4,095 バイトを超えることはできません。