バケットポリシーは設定したバケットおよびバケット内のオブジェクトに対して機能します。バケットポリシーによってCAMサブアカウント、その他のルートアカウント、また匿名のユーザーに対しても、バケットおよびバケット内のオブジェクトの操作権限を付与することができます。
注意:Tencent Cloudのルートアカウントは、そのアカウント下のリソース(バケットを含む)に対する最大の権限を有しています。バケットポリシーではほとんどすべての操作を制限できますが、ルートアカウントは常にPUT Bucket Policy操作の権限を有しており、ルートアカウントがこの操作を呼び出す際、バケットポリシーのチェックは行われません。
バケットポリシー(Bucket Policy)はJSON言語を使用して記述し、匿名IDまたはTencent CloudのあらゆるCAMアカウントに対し、バケット、バケット操作、オブジェクトまたはオブジェクト操作の権限を付与できます。Tencent Cloud COSのバケットポリシーは、そのバケット内のほとんどすべての操作の管理に用いることができます。ACLでは記述できないアクセスポリシーを、バケットポリシーを使用して管理することをお勧めします。
注意:バケット作成およびバケットリスト取得という2つのサービスレベルの操作権限は、CAMコンソールで設定する必要があります。
そのCOSバケットに誰がアクセス可能かをお知りになりたい場合は、バケットポリシーの使用をお勧めします。バケットを検索し、バケットポリシーをチェックすることで、アクセス可能な人が誰かを知ることができます。次のようなケースで推奨されます。
バケットポリシーはJSON言語を使用して記述します。構文は、プリンシパル(principal)、エフェクト(effect)、アクション(action)、リソース(resource)、条件(condition)などの基本要素を含めたアクセスポリシー言語の統一ルールに従います。詳細については、アクセスポリシーの言語概要をご参照ください。
このうち、バケットポリシーのリソース範囲はそのバケット内に限定されますが、バケット全体、指定されたディレクトリ、指定されたオブジェクトに対する権限を付与することができます。
注意:バケットポリシーを追加する際は、必ず業務の必要性に応じて、最小権限の原則に従って権限を付与してください。他のユーザーに対し、すべてのリソース
(resource:*)
またはすべてのアクション(action:*)
の権限を直接与えてしまうと、権限が大きすぎるためにデータセキュリティ上のリスクが生じる場合があります。
説明:
- COSコンソールを使用してバケットポリシーを設定する場合、ユーザーが持つバケットに関連する権限を付与する必要があります。例えば、バケットタグの取得やバケットリストアップの権限などです。
- バケットポリシーのサイズ制限は20KBです。
例:サブアカウントが持つバケットの特定のディレクトリの全権限を付与します。設定情報は次のとおりです。
設定項目 | 設定値 |
---|---|
エフェクト | 許可 |
プリンシパル | サブアカウント、サブアカウントのUIN。このサブアカウントは現在のルートアカウント下のサブアカウントである必要があります。例:100000000011 |
リソース | 特定のディレクトリのプレフィックス。例:folder/sub-folder/* |
アクション | すべての操作 |
条件 | なし |
コンソールは、グラフィカル設定とポリシー設定という2種類の方式でのバケットポリシーの追加と管理をサポートしています。
ターゲットバケットの権限管理に進み、Policy権限設定 > グラフィック設定を選択し、ポリシーの追加をクリックして、ポップアップウィンドウでポリシーの設定を行います。
COSは複数のポリシーテンプレートをご提供しており、様々な被付与者、リソース範囲の組み合わせを選択することで、お客様がバケットポリシーの設定を迅速に行えるようサポートします。テンプレートがニーズに合わない場合はこのステップをスキップするか、またはステップ2:ポリシーの設定で権限付与操作を追加または削除することができます。
*
と表示されます。権限を付与したいアクションのグループです。COSはお客様が選択した被付与者およびリソース範囲に基づき、推奨するポリシーテンプレートをご提供します。テンプレートがニーズに合わない場合はこのステップをスキップするか、または次のステップの「ポリシーの設定」で権限付与操作を追加または削除することができます。
テンプレートの説明は次の表をご参照ください。
被付与者 | リソース範囲 | ポリシーテンプレート | 説明 |
---|---|---|---|
すべての組み合わせ | カスタムポリシー | 任意の被付与者、リソース範囲の組み合わせの場合、このテンプレートを選択するとプリセットポリシーのご提供は行われません。次のステップのポリシー設定で、ご自身でポリシーを直接追加することができます。 | |
すべてのユーザー(匿名アクセス可能) | バケット全体 | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | 匿名ユーザーの場合、COSはファイル読み取り(ダウンロードなど)、ファイル書き込み(アップロード、変更など)の推奨テンプレートをご提供します。 COSの推奨テンプレートには、バケット内の全オブジェクトのリストアップ、読み取り/書き込み権限、バケット設定などのその他の機密性の高い権限は含まれず、他の余分な権限を開放しないようにすることで、データの安全性を高めています。 必要に応じて、後のステップでご自身で動作権限を追加または削除することができます。 |
読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) | |||
指定ディレクトリ | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | ||
読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) | |||
指定ユーザー | バケット全体 | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | 指定ユーザーとバケット全体の組み合わせの場合、COSは最も多くの推奨テンプレートをご提供します。ファイル読み取り、書き込みおよびファイルリストアップのほか、次のような機密性の高い権限のテンプレートも含まれ、これらは信頼できるユーザーへの使用に適しています。 |
読み取り専用オブジェクト(オブジェクトリストのリストアップを含む) | |||
読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) | |||
読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含む) | |||
バケットおよびオブジェクトの読み取り/書き込みACL | |||
バケット一般設定項目 | |||
バケットの機密性の高い設定項目 | |||
指定ディレクトリ | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | 指定ユーザーと指定ディレクトリの組み合わせの場合、COSはファイル読み取り(ダウンロードなど)、ファイル書き込み(アップロード、変更など)以外にも、オブジェクトリストのリストアップ権限を含む推奨テンプレートをご提供します。 指定したユーザー向けに指定したフォルダのファイルの読み取り、書き込み、リストアップ権限を開放したい場合は、この組み合わせを選択することをお勧めします。 必要に応じて、後のステップでご自身で動作権限を追加または削除することができます。 | |
読み取り専用オブジェクト(オブジェクトリストのリストアップを含む) | |||
読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) | |||
読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含む) |
ステップ1で選択した被付与者、指定ディレクトリおよびテンプレートの組み合わせに対し、COSはポリシー設定において対応する操作、被付与者、リソースなどを自動的に追加します。お客様が指定ユーザー、指定ディレクトリを選択された場合は、ポリシー設定の際に具体的なユーザーUINとディレクトリを指定する必要があります。
説明:ディレクトリに対する権限付与の場合、入力するリソースパスの後に
/*
を付ける必要があることにご注意ください。例えば、ディレクトリのtest権限の場合、test/*
と入力する必要があります。
COSがご提供する推奨テンプレートがニーズに合わない場合は、お客様ご自身でポリシーの内容を調整し、被付与者、リソースおよびアクションを追加または削除することもできます。下図に示します。
設定項目の説明は次のとおりです。
*
)、ルートアカウント、サブアカウント、クラウドサービスを含む被付与者を追加、削除できます。
グラフィカル設定を使用する場合を除き、バケットポリシーに精通しているユーザーは、ターゲットバケットの権限管理 > Policy権限設定 > ポリシー設定で、直接JSON言語を使用してポリシーを作成することができます。
バケットポリシーを作成後は、APIまたはSDKによってバケットポリシーを追加することもできます。下図に示します。
次のポリシーの記述例は、ルートアカウントID 100000000001(APPIDは1250000000)下のサブアカウントID 100000000011に対し、北京リージョンのバケットのexamplebucket-bj下のディレクトリfolder/sub-folder
内のオブジェクトについて、すべての操作の権限を許可するものです。
{
"Statement": [
{
"Principal": {
"qcs": [
"qcs::cam::uin/100000000001:uin/100000000011"
]
},
"Effect": "Allow",
"Action": [
"name/cos:*"
],
"Resource": [
"qcs::cos:ap-beijing:uid/1250000000:examplebucket-bj-1250000000/folder/sub-folder/*"
]
}
],
"version": "2.0"
}
COSではコンソール、API、SDKなどの複数の方式でバケットポリシーを追加することができます。コンソールはグラフィカル設定と一般的な権限付与テンプレートをサポートしており、ポリシー言語に不慣れな場合でもすぐにポリシーを追加できるようになっています。
操作方法 | 説明 | |
---|---|---|
コンソール | 直感的で使いやすいWebページ | |
API | RESTful APIで直接COSをリクエスト | |
SDK | JavaScript | 豊富なSDK demoをご用意し、各種開発言語をサポートします。 |
Node.js | ||
小程序 |
注意:バケットポリシーを追加する際は、必ず業務の必要性に応じて、最小権限の原則に従って権限を付与してください。他のユーザーに対し、すべてのリソース
(resource:*)
またはすべてのアクション(action:*)
の権限を直接与えてしまうと、権限が大きすぎるためにデータセキュリティ上のリスクが生じる場合があります。
次に、サブネット、プリンシパル、VPC IDを制限するバケットポリシーの例についてご説明します。
サブネットの10.1.1.0/24ネットワークセグメントからのリクエストおよびvpcidがaqp5jrc1のリクエストを制限します。構文の例は次のとおりです。
{
"Statement": [
{
"Action": [
"name/cos:*"
],
"Condition": {
"ip_equal": {
"qcs:ip": [
"10.1.1.0/24"
]
},
"string_equal": {
"vpc:requester_vpc": [
"vpc-aqp5jrc1"
]
}
},
"Effect": "deny",
"Principal": {
"qcs": [
"qcs::cam::anyone:anyone"
]
},
"Resource": [
"qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*"
]
}
],
"version": "2.0"
}
vpcidがaqp5jrc1のリクエスト、特定のプリンシパルおよび特定のバケットのリクエストを制限します。構文の例は次のとおりです。
{
"Statement": [
{
"Action": [
"name/cos:*"
],
"Condition": {
"string_equal": {
"vpc:requester_vpc": [
"vpc-aqp5jrc1"
]
}
},
"Effect": "allow",
"Principal": {
"qcs": [
"qcs::cam::uin/100000000001:uin/100000000002"
]
},
"Resource": [
"qcs::cos:ap-beijing:uid/1250000000:examplebucket-1250000000/*"
]
}
],
"version": "2.0"
}
この記事はお役に立ちましたか?