バケットポリシーは設定したバケットおよびバケット内のオブジェクトに対して機能します。バケットポリシーによってCAMサブアカウント、その他のルートアカウント、また匿名のユーザーに対しても、バケットおよびバケット内のオブジェクトの操作権限を付与することができます。
概要
注意:
Tencent Cloudのルートアカウントは、そのアカウント下のリソース(バケットを含む)に対する最大の権限を有しています。バケットポリシーではほとんどすべての操作を制限できますが、ルートアカウントは常にPUT Bucket Policy操作の権限を有しており、ルートアカウントがこの操作を呼び出す際、バケットポリシーのチェックは行われません。
バケットポリシー(Bucket Policy)はJSON言語を使用して記述し、匿名IDまたはTencent CloudのあらゆるCAMアカウントに対し、バケット、バケット操作、オブジェクトまたはオブジェクト操作の権限を付与できます。Tencent Cloud COSのバケットポリシーは、そのバケット内のほとんどすべての操作の管理に用いることができます。ACLでは記述できないアクセスポリシーを、バケットポリシーを使用して管理することをお勧めします。 ユースケース
注意:
バケット作成およびバケットリスト取得という2つのサービスレベルの操作権限は、CAMコンソールで設定する必要があります。 そのCOSバケットに誰がアクセス可能かをお知りになりたい場合は、バケットポリシーの使用をお勧めします。バケットを検索し、バケットポリシーをチェックすることで、アクセス可能な人が誰かを知ることができます。次のようなケースで推奨されます。
特定のバケットについて権限を付与する
バケットポリシーがACLに比べてより柔軟である
ユーザーポリシーと異なり、バケットポリシーがクロスアカウント権限付与および匿名ユーザーへの権限付与をサポートしている
バケットポリシーの構成
バケットポリシーはJSON言語を使用して記述します。構文は、プリンシパル(principal)、エフェクト(effect)、アクション(action)、リソース(resource)、条件(condition)などの基本要素を含めたアクセスポリシー言語の統一ルールに従います。詳細については、アクセスポリシーの言語概要をご参照ください。
このうち、バケットポリシーのリソース範囲はそのバケット内に限定されますが、バケット全体、指定されたディレクトリ、指定されたオブジェクトに対する権限を付与することができます。 注意:
バケットポリシーを追加する際は、必ず業務の必要性に応じて、最小権限の原則に従って権限を付与してください。他のユーザーに対し、すべてのリソース(resource:*)またはすべてのアクション(action:*)の権限を直接与えてしまうと、権限が大きすぎるためにデータセキュリティ上のリスクが生じる場合があります。
コンソール設定の例
説明:
COSコンソールを使用してバケットポリシーを設定する場合、ユーザーが持つバケットに関連する権限を付与する必要があります。例えば、バケットタグの取得やバケットリストアップの権限などです。
バケットポリシーのサイズ制限は20KBです。
例:サブアカウントが持つバケットの特定のディレクトリの全権限を付与します。設定情報は次のとおりです。
|
| |
| サブアカウント、サブアカウントのUIN。このサブアカウントは現在のルートアカウント下のサブアカウントである必要があります。例:100000000011 |
| 特定のディレクトリのプレフィックス。例:folder/sub-folder/* |
| |
| |
グラフィカル設定
ターゲットバケットの権限管理に進み、Policy権限設定 > グラフィック設定を選択し、ポリシーの追加をクリックして、ポップアップウィンドウでポリシーの設定を行います。
ステップ1:テンプレートの選択(オプション)
COSは複数のポリシーテンプレートをご提供しており、様々な被付与者、リソース範囲の組み合わせを選択することで、お客様がバケットポリシーの設定を迅速に行えるようサポートします。テンプレートがニーズに合わない場合はこのステップをスキップするか、またはステップ2:ポリシーの設定で権限付与操作を追加または削除することができます。 被付与者
すべてのユーザー(匿名アクセス可):匿名ユーザーに操作権限を開放したい場合は、この項目を選択します。次のステップでポリシーを設定する際、すべてのユーザーが自動的に追加され、「*」と表示されます。
オブジェクトリストの取得(GetBucket)、バケット設定に関する権限などを匿名ユーザーに公開することはリスクが高いため、この項目を選択した場合、COSは対応するテンプレートを提供しません。必要な場合は、後続の「ポリシー設定」ステップでご自身で追加してください。
許可されたユーザーがすべてのユーザー(匿名アクセス可)として指定されている場合、オブジェクトへのリクエスト時に署名を付与する必要はなく、すべてのユーザーがリンクを通じてオブジェクトに直接アクセス可能となります。データ漏洩のリスクがあるため、慎重に設定してください。
すべてのユーザーを拒否を選択しても、匿名ユーザーのみを拒否し、CAMユーザーは拒否されません。サブアカウントを拒否したい場合は、バケットポリシーで指定ユーザーを選択し、該当するサブアカウントのUINを指定してください。
指定ユーザー:指定するサブアカウント、ルートアカウントまたはクラウドサービスに操作権限を開放したい場合は、この項目を選択します。次の手順でポリシーを設定する際に、具体的なアカウントUINを指定する必要があります。
説明:
権限を付与されたユーザーが指定のアカウントである場合、オブジェクトをリクエストする際には認証のために署名を付与する必要があります。署名の詳細については、リクエスト署名をご参照ください。 リソース範囲
バケット全体:バケットの設定項目に関連する権限を付与したい場合、またはリソース範囲としてバケット全体を指定したい場合は、この項目を選択します。次の手順でポリシーを設定する際に、バケット全体がリソースとして自動的に追加されます。
指定ディレクトリ:リソース範囲を指定のフォルダに限定したい場合は、この項目を選択します。次の手順でポリシーを設定する際に、具体的なディレクトリを指定する必要があります。この項目を選択した場合、COSはバケット設定に関連するポリシーテンプレートを提供しません。この種の権限はリソースとしてバケット全体を指定する必要があるためです。
テンプレート
権限を付与したいアクションのグループです。COSはお客様が選択した被付与者およびリソース範囲に基づき、推奨するポリシーテンプレートをご提供します。テンプレートがニーズに合わない場合はこのステップをスキップするか、または次のステップの「ポリシーの設定」で権限付与操作を追加または削除することができます。
カスタムポリシー(プリセット設定はご提供していません):テンプレートをご利用にならない場合はこの項目を選択し、次のステップの「ポリシーの設定」で、必要に応じてご自身でポリシーを追加できます。
その他のテンプレート:COSはお客様が選択した被付与者およびリソース範囲の組み合わせに基づき、それぞれに推奨するテンプレートをご提供します。必要なテンプレートにチェックを入れると、次のステップのポリシー設定で、COSが自動的に必要な操作を追加します。
テンプレートの説明は次の表をご参照ください。
|
すべての組み合わせ |
| カスタムポリシー | 任意の被付与者、リソース範囲の組み合わせの場合、このテンプレートを選択するとプリセットポリシーのご提供は行われません。次のステップのポリシー設定で、ご自身でポリシーを直接追加することができます。 |
すべてのユーザー(匿名アクセス可能) | バケット全体 | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | 匿名ユーザーの場合、COSはファイル読み取り(ダウンロードなど)、ファイル書き込み(アップロード、変更など)の推奨テンプレートをご提供します。COSの推奨テンプレートには、バケット内の全オブジェクトのリストアップ、読み取り/書き込み権限、バケット設定などのその他の機密性の高い権限は含まれず、他の余分な権限を開放しないようにすることで、データの安全性を高めています。必要に応じて、後のステップでご自身で動作権限を追加または削除することができます。 |
|
|
| 読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) |
|
| 指定ディレクトリ | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) |
|
|
| 読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) |
指定ユーザー | バケット全体 | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | 指定ユーザーとバケット全体の組み合わせの場合、COSは最も多くの推奨テンプレートをご提供します。ファイル読み取り、書き込みおよびファイルリストアップのほか、次のような機密性の高い権限のテンプレートも含まれ、これらは信頼できるユーザーへの使用に適しています。 読み取り/書き込みバケットおよびオブジェクトACL:バケット取得、変更ACL、オブジェクトACL。GetObjectACL、PutObjectACL、GetBucketACL、PutBucketACLを含む バケット一般設定項目:バケットタグ、クロスドメイン、back-to-originなどの機密性が高くない権限。 バケットの機密性の高い設定項目:バケットポリシー、バケットACL、バケット削除などにかかわる機密性の高い権限であり、慎重に使用する必要があります。 |
|
|
| 読み取り専用オブジェクト(オブジェクトリストのリストアップを含む) |
|
|
| 読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) |
|
|
| 読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含む) |
|
|
| バケットおよびオブジェクトの読み取り/書き込みACL |
|
|
| バケット一般設定項目 |
|
|
| バケットの機密性の高い設定項目 |
| 指定ディレクトリ | 読み取り専用オブジェクト(オブジェクトリストのリストアップを含まない) | 指定ユーザーと指定ディレクトリの組み合わせの場合、COSはファイル読み取り(ダウンロードなど)、ファイル書き込み(アップロード、変更など)以外にも、オブジェクトリストのリストアップ権限を含む推奨テンプレートをご提供します。指定したユーザー向けに指定したフォルダのファイルの読み取り、書き込み、リストアップ権限を開放したい場合は、この組み合わせを選択することをお勧めします。必要に応じて、後のステップでご自身で動作権限を追加または削除することができます。 |
|
|
| 読み取り専用オブジェクト(オブジェクトリストのリストアップを含む) |
|
|
| 読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含まない) |
|
|
| 読み取り/書き込みオブジェクト(オブジェクトリストのリストアップを含む) |
ステップ1で選択した被付与者、指定ディレクトリおよびテンプレートの組み合わせに対し、COSはポリシー設定において対応する操作、被付与者、リソースなどを自動的に追加します。お客様が指定ユーザー、指定ディレクトリを選択された場合は、ポリシー設定の際に具体的なユーザーUINとディレクトリを指定する必要があります。
説明:
ディレクトリに対する権限付与の場合、入力するリソースパスの後に/*を付ける必要があることにご注意ください。例えば、ディレクトリのtest権限の場合、test/*と入力する必要があります。
COSがご提供する推奨テンプレートがニーズに合わない場合は、お客様ご自身でポリシーの内容を調整し、被付与者、リソースおよびアクションを追加または削除することもできます。下図に示します。
設定項目の説明は次のとおりです。
エフェクト:許可または拒否を選択できます。ポリシー構文の「allow」と「deny」に対応します。
ユーザー:すべてのユーザー(*)、ルートアカウント、サブアカウント、クラウドサービスを含む被付与者を追加、削除できます。
注意:
条件内のIPとVPC IDは、同一のポリシー内に同時に設定することはできません。ポリシーを分けて追加してください。
エフェクトが拒否の場合、すべてのユーザーの適用範囲は匿名ユーザーのみに限定されます。匿名ユーザーはバケットへアクセスできなくなりますので、操作は、慎重に行ってください。
リソース:バケット全体または指定ディレクトリのリソースを追加できます。
アクション:権限付与が必要な操作を追加、削除します。
条件:ユーザーのアクセスIPの制限など、権限付与の際の指定条件です。その他の条件に関する詳細については、条件キーの説明と使用例をご参照ください。 注意:
条件内のIPとVPC IDは、同一のポリシー内に同時に設定することはできません。ポリシーを分けて追加してください。
ご利用のCVMとCOSバケットが異なるリージョンにある場合、またはCVM以外からアクセスする場合、条件としてIPを選択し、パブリックIPアドレスを入力してください。ご利用のCVMとCOSバケットが同一リージョンにある場合は、条件としてVPC IDを選択し、VPC IDを入力してください。
ポリシー文法
グラフィカル設定を使用する場合を除き、直接JSON言語を使用してポリシーを作成することができます。
バケットポリシーを作成したら、保存をクリックします。下図の通りです。また、API または SDK を通じてバケットポリシーを追加することもできます。 JSONポリシーの例
次のポリシーの記述例は、ルートアカウント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ページ |
|
| RESTful APIで直接COSをリクエスト |
SDK | | 豊富なSDKデモを提供しており、様々な開発言語に対応しています。 |
| | |
| | |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
その他のバケットポリシーの例
注意:
バケットポリシーを追加する際は、必ず業務の必要性に応じて、最小権限の原則に従って権限を付与してください。他のユーザーに対し、すべてのリソース(resource:*)またはすべてのアクション(action:*)の権限を直接与えてしまうと、権限が大きすぎるためにデータセキュリティ上のリスクが生じる場合があります。
次に、サブネット、プリンシパル、VPC IDを制限するバケットポリシーの例についてご説明します。
事例1
匿名ユーザー( qcs::cam::anyone:anyone)からの、サブネット10.1.1.0/24およびvpcidがaqp5jrc1のリクエストを拒否する例は以下の通りです。
注意:
この拒否ポリシーは匿名ユーザーのみに対して有効です。CAMユーザー(サブアカウント、メインアカウント)を制限したい場合は、principalフィールドに該当アカウントのArnを明示的に指定する必要があります。
{
"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"
}
事例2
サブアカウント(qcs::cam::uin/100000000001:uin/100000000002)がアクセス元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"
}