タグを使用した AWS リソースへのアクセスの制御
タグ付けをサポートしている AWS リソース (IAM リソースを含む) へのアクセスを制御するには、タグを使用します。IAM ユーザーとロールにタグ付けして、アクセスできるユーザートロールを制御することができます。IAM ユーザーとロールにタグ付けするには、「AWS Identity and Access Management リソースのタグ」を参照してください。さらに、以下の IAM リソースへのアクセスを制御できます。カスタマー管理ポリシー、IAM ID プロバイダー、インスタンスプロファイル、サーバー証明書、仮想 MFA デバイス。プリンシパルタグを持つ IAM ロールが、一致するタグを持つリソースにアクセスすることを許可するポリシーを作成およびテストするためのチュートリアルを表示するには、「IAM チュートリアル: タグに基づいて AWS リソースにアクセスするためのアクセス許可を定義する」を参照してください 。IAM ユーザーやロールにタグ付けせずに、他の AWS リソース (IAM リソースを含む) へのアクセスを制御するには、次のセクションの情報を使用します。
タグを使用して AWS リソースへのアクセスを制御する前に、AWS がアクセスを許可する方法を理解する必要があります。AWS はリソースの集合で構成されています。Amazon EC2 インスタンスはリソースです。Amazon S3 バケットはリソースです。AWS API、AWS CLI、または AWS Management Console を使用して、Amazon S3 でのバケットの作成などのオペレーションを実行できます。これを行う際、そのオペレーションのリクエストを送信します 。リクエストでは、アクション、リソース、プリンシパルエンティティ (ユーザーまたはロール)、プリンシパルアカウント、および必要なリクエスト情報を指定します。これらのすべての情報により、コンテキストが提供されます。
次に、AWS はユーザー (プリンシパルエンティティ) が認証され (サインイン済み)、指定されたリソースで指定されたアクションの実行が許可されている (アクセス許可がある) ことを確認します。認可時、AWS は、リクエストのコンテキストに該当するすべてのポリシーをチェックします。通常、ポリシーは JSON ドキュメントとして AWS に保存され、プリンシパルエンティティのアクセス許可を指定します。ポリシーのタイプと用途の詳細については、「AWS Identity and Access Management でのポリシーとアクセス許可」を参照してください。
AWS は、リクエストの各部分がポリシーで許可されている場合のみ、リクエストを許可します。図を表示して IAM インフラストラクチャの詳細について学習するには、「IAM の仕組み」を参照してください。IAM でリクエストの許可を決定する方法の詳細については、「ポリシーの評価論理」を参照してください。
タグは、このプロセスにおけるもう 1 つの考慮事項です。これらは、リソースにアタッチするか、タグ付けをサポートするサービスへのリクエストで渡すことができるからです。タグに基づいてアクセスを制御するには、ポリシーの条件要素でタグ情報を提供します。AWS サービスがタグを使用したアクセスの制御をサポートしているかどうか確認するには、「IAM と連携する AWS のサービス」を参照し、「ABAC」列に「はい」と表示されているサービスを探します。サービスの名前を選択すると、そのサービスの認証とアクセスコントロールに関するドキュメントが表示されます。
その後、そのリソースのタグに基づいてリソースへのアクセスを許可または拒否する IAM ポリシーを作成できます。そのポリシーでは、タグ条件キーを使用して以下のいずれかへのアクセスを制御できます。
-
リソース – それらのリソースのタグに基づいて、AWS サービスリソースへのアクセスを制御します。これを行うには、ResourceTag/
key-name
条件キーを使用して、リソースにアタッチされたタグに基づいてリソースへのアクセスを許可するかどうか決定します。 -
リクエスト – リクエストで渡すことができるタグを制御します。これを行うには、aws:RequestTag
/key-name
条件キーを使用して、AWS リソースのタグ付けを行うリクエストで渡すことができるタグキーバリューのペアを指定します。 -
認証プロセスの一部 – aws:TagKeys 条件キーを使用して、特定のタグキーがリクエストに存在することができるかどうかを制御します。
JSON を使用するか、既存の管理ポリシーをインポートして、IAM ポリシーを視覚的に作成できます。詳細については、「カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する」を参照してください。
注記
一部のサービスでは、リソースを作成するアクションを使用するアクセス許可があれば、リソースを作成する際にタグを指定することができます。
AWS のリソースへのアクセスの制御
IAM ポリシーで条件を使用して、そのリソースのタグに基づき、AWS リソースへのアクセスを制御できます。これを行うには、グローバルの aws:ResourceTag/
条件キー、またはサービス固有のキーを使用します。一部のサービスでは、このキーのサービス固有のバージョンのみがサポートされ、グローバルバージョンはサポートされていません。tag-key
警告
ロールをタグ付けした後に、iam:PassRole
アクションでポリシー内の ResourceTag
条件キーを使用してロールを渡せるユーザーを制御しないようにしてください。このアプローチでは信頼できる結果は得られません。ロールをサービスに渡すのに必要なアクセス許可の詳細については、「AWS サービスにロールを渡すアクセス許可をユーザーに付与する」を参照してください。
この例では、Amazon EC2 インスタンスの起動または停止を許可する ID ベースのポリシーを作成する方法を示します。これらのオペレーションは、インスタンスのタグ Owner
がそのユーザーのユーザー名の値を含む場合に限り、許可されます。このポリシーは、プログラムおよびコンソールアクセスのアクセス許可を定義します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": {"aws:ResourceTag/Owner": "${aws:username}"} } }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" } ] }
このポリシーはアカウントの IAM ユーザーにアタッチできます。richard-roe
というユーザーが Amazon EC2 インスタンスを起動しようとした場合、そのインスタンスには Owner=richard-roe
または owner=richard-roe
というタグが付けられている必要があります。それ以外の場合、アクセスは拒否されます。条件キー名では大文字と小文字は区別されないため、タグキー Owner
は Owner
と owner
に一致します。詳細については、「IAM JSON ポリシー要素Condition」を参照してください。
この例は、リソース ARN で team
プリンシパルタグを使用する ID ベースポリシーを作成する方法を示しています。このポリシーでは、Amazon Simple Queue Service キューを削除する許可が付与されますが、キュー名がチーム名で始まり、-queue
が続く場合に限られます。例えば、qa
が team
プリンシパルタグのチーム名なら qa-queue
です。
{ "Version": "2012-10-17", "Statement": { "Sid": "AllQueueActions", "Effect": "Allow", "Action": "sqs:DeleteQueue", "Resource": "arn:aws:sqs:us-east-2::${aws:PrincipalTag/
team
}-queue" } }
AWS リクエスト時のアクセスの制御
IAM ポリシーで条件を使用すると、リクエストでどのようなタグのキー値ペアを渡して、AWS リソースにタグを適用するかを制御できます。
この例では、Amazon EC2 CreateTags
アクションを使用してタグをインスタンスにアタッチできるようにする、ID ベースのポリシーを作成する方法を示しています。タグをアタッチできるのは、タグに environment
キーと preprod
または production
の値が含まれている場合だけです。必要に応じて、ForAllValues
修飾子を aws:TagKeys
条件キーとともに使用して、リクエストでキー environment
のみが許可されることを示します。これにより、environment
の代わりに誤って Environment
を使用するなど、ユーザーが他のキーを含めることがなくなります。
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/
environment
": [ "preprod
", "production
" ] }, "ForAllValues:StringEquals": {"aws:TagKeys": "environment
"} } } }
タグキーに基づいたアクセスの制御
IAM ポリシーで条件を使用して、リクエストで特定のタグキーを使用できるかどうか制御できます。
ベストプラクティスとして、ポリシーでタグを使用してアクセスを制御する場合、aws:TagKeys 条件キーを使用することをお勧めします。タグをサポートする AWS のサービスでは、大文字小文字のみが異なる複数のタグキー名を作成できる可能性があります。たとえば、Amazon EC2 インスタンスに stack=production
および Stack=test
タグを付けるなどです。ポリシー条件のキー名では、大文字と小文字は区別されません。つまり、ポリシーの条件要素で "aws:ResourceTag/TagKey1": "Value1"
で指定した場合、その条件は TagKey1
または tagkey1
という名前のリソースタグキーに一致しますが、その両方には一致しません。大文字小文字のみが異なるキーを使用したタグの重複を防ぐには、aws:TagKeys
条件を使用して、ユーザーが適用できるタグキーを定義するか、AWS Organizations で利用できるタグポリシーを使用します。詳細については、「Organizations ユーザーガイド」の「タグポリシー」を参照してください。
この例では、Secrets Manager のシークレットの作成とタグ付けを許可する IDベースのポリシーを作成する方法を示していますが、タグキー environment
または cost-center
のみを使用します。Null
条件を使用すると、リクエストにタグがない場合に条件が false
と評価されます。
{ "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "Null": { "aws:TagKeys": "false" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] } } }