COSバケットおよびバケット内のリソースにアクセスする際は権限承認を経てからアクセスする必要があります。Tencent Cloudの権限システムでは、リソースが所属するルートアカウントはデフォルトでバケットおよびバケット内のリソースに対しすべての管理権限を有します。CAMユーザー(その他のルートアカウント、コラボレーター、サブアカウント)および匿名ユーザーなどのその他のタイプのユーザーは、ルートアカウントによる権限承認を経てからでなければアクセスできません。
アカウントのアクセスポリシーには、ユーザーグループポリシー、ユーザーポリシー、バケットアクセス制御リスト(ACL)、バケットポリシー(Policy)などの異なるポリシータイプがあります。アクセスポリシーの評価においては、次のいくつかの重要な要素があります。
Tencent Cloud COSがリクエストを受信すると、最初にリクエスト送信者のIDを確認し、リクエスト送信者が関連の権限を有しているかどうかを検証します。検証のプロセスには、ユーザーポリシー、バケットアクセスポリシー、リソースベースのアクセス制御リストのチェックが含まれ、リクエストに対する認証を行います。
Tencent Cloud COSはリクエストを受信した際、最初にID認証を行い、ID認証の結果に基づいてリクエスト送信者のIDを分類します。IDのカテゴリーに応じて異なるアクションがとられる可能性があります。
Tencent Cloudの権限システムでは、アクセスポリシーの評価フローにおいて、全プロセスでポリシーのコンテキスト情報に基づいて権限の評価を行います。また同時に次のいくつかの基本原則があります。
説明:
- 明示的な拒否:ユーザーポリシー、ユーザーグループポリシー、バケットPolicyの中で特定のユーザーに対して明確なDenyポリシーが存在する場合。例えば、ルートアカウントがユーザーポリシーの中で、サブユーザーUIN 100000000011が
GET Object
操作を行うことを明確にDenyと設定している場合、そのサブユーザーはそのルートアカウント下のオブジェクトリソースをダウンロードすることはできません。- 明示的な許可:ユーザーポリシー、ユーザーグループポリシー、バケットPolicy、バケットACLの中で、
grant-\*
によって特定のユーザーを明確に指定し、特定のユーザーに対し明確なAllowポリシーを設けます。- すべての人を拒否:バケットPolicyの中で、
Deny anyone
と明確に指定します。すべての人を拒否すると、任意の署名なしリクエストが拒否されます。署名付きリクエストに対してはIDベースのポリシーによる認証が行われます。- すべての人を許可:バケットPolicyの中で、
Allow anyone
と明確に指定するか、またはバケットACLの中でpublic-\*
と明確に指定します。- 有効な権限の範囲はIDベースのポリシーとリソースベースのポリシーを合わせたものとなります。1回の完全な認証において、COSは最初にユーザーのIDを解析し、ユーザーのIDに基づいて、そのユーザーがアクセス権限を持つリソースの権限チェックを行います。同時にリソースベースのポリシーに基づき、ユーザーを匿名ユーザーとみなして権限チェックを行います。2回のチェックのうち1回が成功するとアクセスが許可されます。
アクセスポリシーの評価根拠は次の図のとおりです。最初にリクエストの署名の有無に基づき、ユーザーが匿名ユーザーかどうかを評価します。ユーザーが匿名ユーザーであれば、「すべての人を拒否」または「すべての人を許可」のポリシーがないかどうかを評価し、これに基づいてアクセス許可またはアクセス拒否の判断を行います。ユーザーが正当なCAMユーザーまたはリソースを所有するルートアカウントの場合は、明示的な拒否、明示的な許可または「すべての人を許可」のポリシーがないかどうかを評価し、これに基づいてアクセス許可またはアクセス拒否の判断を行います。
ポリシーのコンテキスト情報とは、ポリシーに記録される権限の詳細を指します。最小権限の原則の下で、ユーザーはポリシーの中で次の情報を明確に指定する必要があります。
ポリシーの作成は一定のポリシー構文に従って行う必要があります。アクセスポリシーの言語概要を参照し、業務上の必要性に応じて作成することができます。ユーザーポリシーおよびバケットポリシーの作成例については、ユーザーポリシー構文の構造およびバケットポリシーの例をそれぞれご参照ください。
ルートアカウントUIN 100000000001がサブアカウントUIN 100000000011にユーザープリセットポリシーをバインドし、このサブアカウントにルートアカウント下のリソースを読み取り専用として許可したとします。このユーザーポリシーの詳細は次のとおりです。このユーザーポリシーはこのサブアカウントに対し、すべてのList
、Get
、Head
操作およびOptionsObject
操作の実行を許可しています。
{
"version": "2.0",
"statement": [
{
"action": [
"cos:List*",
"cos:Get*",
"cos:Head*",
"cos:OptionsObject"
],
"resource": "*",
"effect": "allow"
}
]
}
また、ルートアカウントはあるプライベート読み取り/書き込みバケットexamplebucket-1250000000
に次のバケットポリシーを追加しました。
{
"Statement": [
{
"Principal": {
"qcs": [
"qcs::cam::anyone:anyone"
]
},
"Effect": "Deny",
"Action": [
"name/cos:GetObject"
],
"Resource": [
"qcs::cos:ap-guangzhou:uid/100000000011:examplebucket-1250000000/*"
]
}
],
"version": "2.0"
}
このバケットポリシーはすべてのユーザーのオブジェクトダウンロード実行(GetObject
)の操作を明示的に拒否しています。このため、アクセスポリシー評価のフローにおいては、次が行われます。
GetObject
をリクエストした場合、このリクエストが表すユーザーのIDが対応するユーザーポリシーとマッチした場合、アクセスポリシーの評価検証は合格となります。GetObject
をリクエストした場合、システムによって匿名のリクエストと判断され、バケットポリシーによってアクセスが拒否されます。
この記事はお役に立ちましたか?