S3 汎用バケットでタグを使用する
AWS タグは、リソースに関するメタデータを保持するキーと値のペアで、この場合は、Amazon S3 汎用バケットです。S3 バケットは、作成時にタグ付けしたり、既存のバケットのタグを管理したりできます。タグに関する一般情報については、「コスト配分または属性ベースのアクセス制御 (ABAC) のタグ付け」を参照してください。
注記
バケットでタグを使用することによる追加料金は、標準の S3 API リクエスト料金を超えて発生しません。詳細については、「Amazon S3 の料金
バケットでタグを使用する一般的な方法
S3 バケットのタグを以下に使用します。
-
コスト配分 – AWS Billing and Cost Management でバケットタグ別にストレージコストを追跡します。詳細については、「Using tags for cost allocation」を参照してください。
-
属性ベースのアクセス制御 (ABAC) – アクセス許可をスケールし、タグに基づいて S3 バケットへのアクセスを許可します。詳細については、「Using tags for ABAC」を参照してください。
注記
汎用バケットの場合、ABAC はデフォルトでは有効になっていません。汎用バケットの ABAC を有効にするには、「汎用バケットでの ABAC の有効化」を参照してください。アクセスポイントやディレクトリバケットなどの Amazon S3 リソースの場合、ABAC はデフォルトで有効になっています。コスト配分とアクセス制御の両方に同じタグを使用できます。
S3 汎用バケットの ABAC
Amazon S3 汎用バケットは、タグを使用した属性ベースのアクセス制御 (ABAC) をサポートしています。AWS Organizations、IAM、S3 バケットポリシーでタグベースの条件キーを使用します。エンタープライズの場合、Amazon S3 の ABAC は複数の AWS アカウントにわたる認可をサポートしています。
IAM ポリシーでは、次のグローバル条件キーを使用して、バケットのタグに基づいて S3 バケットへのアクセスを制御できます。
-
aws:ResourceTag/key-name-
この条件キーを使用して、ポリシーで指定したタグキーバリューのペアと、リソースにアタッチされているキーバリューのペアを比較します。S3 は、バケットで ABAC を有効にした後にのみ、この条件キーを評価します。たとえば、リソースに値
Deptの付いたタグキーMarketingがアタッチされている場合にのみ、そのリソースへのアクセスを許可するように要求することができます。詳細については、「AWS のリソースに対するアクセスの制御」を参照してください。
-
-
aws:RequestTag/key-name-
この条件キーを使用して、リクエストで渡されたタグキーバリューのペアと、ポリシーで指定したタグペアを比較します。たとえば、リクエストに「
Dept」タグキーが含まれ、「Accounting」という値が含まれているかどうかを確認できます。詳細については、「AWS リクエスト時のアクセスの制御」を参照してください。この条件キーを使用して、TagResourceおよびCreateBucketAPI オペレーション中に渡すことができるタグのキーと値のペアを制限できます。
-
-
aws:TagKeys-
この条件キーを使用して、リクエスト内のタグキーとポリシーで指定したキーを比較します。ポリシーでタグを使用してアクセスを制御する場合は、
aws:TagKeys条件キーを使用して、許可されるタグキーを定義することをお勧めします。サンプルポリシーおよび詳細については、「タグキーに基づいたアクセスの制御」を参照してください。
-
-
s3:BucketTag/tag-key-
この条件キーを使用して、タグを使用してバケット内の特定のデータに対するアクセス許可を付与します。この条件キーは、バケットで ABAC が有効になっている場合にのみ適用されます。アクセスポイントを使用してバケットにアクセスする場合、
aws:ResourceTag/tag-key条件キーは、アクセスポイントとバケットの両方に対して承認する際に、バケットのタグを参照します。s3:BucketTag/tag-keyは、承認対象のバケットのタグのみを参照します。
-
注記
タグを使用してバケットを作成する場合、aws:ResourceTag および s3:BucketTag 条件キーを使用してバケットにアクセスするためのタグベースの条件は、バケットで ABAC を有効にした後にのみ適用されることに注意してください。詳細については汎用バケットでの ABAC の有効化を参照してください。
バケットの ABAC ポリシーの例
Amazon S3 バケットの次の ABAC ポリシーの例を参照してください。
1.1 - 特定のタグを持つバケットを作成または変更するための IAM ポリシー
この IAM ポリシーでは、このポリシーを持つユーザーまたはロールは、バケットの作成リクエストでタグキー project とタグ値 Trinity を使用してバケットにタグを付ける場合にのみ、S3 バケットを作成できます。また、TagResource リクエストにタグのキーと値のペア project:Trinity が含まれている限り、既存の S3 バケットのタグを追加または変更できます。このポリシーは、バケットまたはそのオブジェクトに対する読み取り、書き込み、または削除のアクセス許可を付与しません。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateBucketWithTags", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/project": [ "Trinity" ] } } } ] }
1.2 - オペレーションを制限するバケットポリシー
このバケットポリシーでは、バケットの project タグの値がプリンシパルの project タグの値と一致する場合にのみ、IAM プリンシパル (ユーザーとロール) のバケットに対する s3:ListBucket、s3:GetObject、および s3:PutObject アクションが拒否されます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyObjectOperations", "Effect": "Deny", "Principal": "*", "Action": ["s3:ListBucket", "s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::aws-s3-demo/*", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }
1.3 - 既存リソースのタグを変更するための IAM ポリシー
この IAM ポリシーでは、IAM プリンシパル (ユーザーまたはロール) は、バケットの project タグの値がプリンシパルの project タグの値と一致する場合にのみ、バケットのタグを変更できます。条件キー aws:TagKeys で指定された project、environment、owner、および cost-center の 4 つのタグのみが、これらのバケットに対して許可されます。これにより、タグガバナンスの適用、不正なタグ変更の防止、およびバケット間でのタグ付けスキーマの一貫性の維持が可能になります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceTaggingRulesOnModification", "Effect": "Allow", "Action": [ "s3:TagResource", "s3:CreateBucket" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "project", "environment", "owner", "cost-center" ] } } } ] }
1.4 - s3:BucketTag 条件キーを使用する
この IAM ポリシーでは、条件ステートメントは、バケットにタグキー Environment とタグ値 Production がある場合にのみ、aws-s3-demo バケットのデータへのアクセスを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessViaSpecificBucket", "Effect": "Allow", "Action": "*", "Resource": ["arn:aws:s3:::aws-s3-demo","arn:aws:s3:::aws-s3-demo/*"], "Condition": { "StringEquals": { "s3:BucketTag/Environment": "Production" } } } ] }
汎用バケットのタグの管理
Amazon S3コンソール、AWS コマンドラインインターフェイス (CLI)、AWS SDK、または S3 API、TagResource、UntagResource、ListTagsForResource を使用して、S3 バケットのタグを追加または管理できます。詳細については、以下を参照してください。