タグを使用した AWS リソースへのアクセスの制御 - AWS Identity and Access Management

タグを使用した AWS リソースへのアクセスの制御

タグ付けをサポートしている AWS リソース (IAM リソースを含む) へのアクセスを制御するには、タグを使用します。IAM ユーザーとロールにタグ付けして、アクセスできるユーザートロールを制御することができます。IAM ユーザーとロールにタグ付けするには、「IAM リソースのタグ付け」を参照してください。さらに、以下の 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 に保存され、プリンシパルエンティティのアクセス許可を指定します。ポリシーのタイプと用途の詳細については、「IAM でのポリシーとアクセス許可」を参照してください。

AWS は、リクエストの各部分がポリシーで許可されている場合のみ、リクエストを許可します。図を表示して IAM インフラストラクチャの詳細について学習するには、「IAM の仕組みについて」を参照してください。IAM でリクエストを承認するかどうかの決定方法の詳細については、「ポリシーの評価論理」を参照してください。

タグは、リソースにアタッチするか、リクエストでタグ付けをサポートするサービスに渡すことができるため、このプロセスを複雑にする可能性があります。タグに基づいてアクセスを制御するには、ポリシーの条件要素でタグ情報を提供します。AWS サービスがタグを使用したアクセスの制御をサポートしているかどうか確認するには、「IAM と連携する AWS のサービス」を参照し、[タグに基づいた許可] 列が [はい] になっているサービスを探します。サービスの名前を選択すると、そのサービスの認証とアクセスコントロールに関するドキュメントが表示されます。

その後、そのリソースのタグに基づいてリソースへのアクセスを許可または拒否する 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 条件キーを使用しないでください。IAM ロールのタグを使用して、そのロールを渡すことができるユーザーへのアクセスを制御することはできません。ロールをサービスに渡すのに必要なアクセス許可の詳細については、「AWS のサービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。

この例では、次のような IAM ポリシーを作成する方法を示します。 は、Amazon EC2 インスタンスの開始または停止を許可します。これらのオペレーションは、インスタンスのタグ 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 というタグが付けられている必要があります。それ以外の場合、アクセスは拒否されます。条件キー名では大文字と小文字は区別されないため、タグキー OwnerOwnerowner に一致します。詳細については、「IAM JSON ポリシーの要素: Condition」を参照してください。

AWS リクエスト時のアクセスの制御

IAM ポリシーの条件を使用して、AWS リソースにタグ付けするリクエストで渡すことができるタグのキーと値のペアを制御することができます。

この例では、次のような IAM ポリシーを作成する方法を示します。 では、Amazon EC2 CreateTags アクションを使用してインスタンスにタグをアタッチできます。タグをアタッチできるのは、タグに 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 条件を使用して、ユーザーが適用できるタグキーを定義します。

この例では、次のような IAM ポリシーを作成する方法を示します。 では、Secrets Manager シークレットの作成とタグ付けが許可されますが、タグキー environment または cost-center のみを使用できます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "secretsmanager:CreateSecret", "secretsmanager:TagResource" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment", "cost-center" ] } } } }