AWS Identity and Access Management
ユーザーガイド

タグを使用したアクセス制御

タグを使用してアクセスを制御する前に、AWS がアクセスを許可する方法を理解する必要があります。AWS はリソースの集合で構成されています。IAM ユーザーはリソースです。Amazon S3 バケットはリソースです。AWS API、AWS CLI、または AWS マネジメントコンソール を使用してオペレーション (ユーザーの作成など) を実行する場合、このオペレーションに対するリクエストを送信します。リクエストでは、アクション、リソース、プリンシパルエンティティ (ユーザーまたはロール)、プリンシパルアカウント、および必要なリクエスト情報を指定します。これらのすべての情報により、コンテキストが提供されます。

次に、AWS はユーザー (プリンシパルエンティティ) が認証され (サインイン済み)、指定されたリソースで指定されたアクションの実行が許可されている (アクセス許可がある) ことを確認します。認可時、AWS は、リクエストのコンテキストに該当するすべてのポリシーをチェックします。通常、ポリシーは JSON ドキュメントとして AWS に保存され、プリンシパルエンティティのアクセス許可を指定します。ポリシーのタイプと用途の詳細については、「ポリシーとアクセス許可」を参照してください。

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

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

IAM ポリシーを作成するときは、アクセスを制御するタグ条件キーを使用して、以下のいずれかの操作を実行できます。

  • リソース – それらのリソースのタグに基づいて、AWS サービスリソースへのアクセスを制御します。これを行うには、ResourceTag/key-name 条件キーを使用して、リソースにアタッチされたタグに基づいてリソースへのアクセスを許可するかどうか決定します。

  • リクエスト – IAM リクエストに渡すことができるタグを制御します。これを行うには、aws:RequestTag/key-name 条件キーを使用して、リソースに対して追加、変更、または削除できるタグとキー値のペアを指定します。

  • タグキーaws:TagKeys 条件キーを使用して、リソースまたはリクエストで特定のタグキーを使用できるかどうかを制御します。

JSON を使用するか、既存の管理ポリシーをインポートして、IAM ポリシーを視覚的に作成できます。詳細については、「IAM ポリシーの作成」を参照してください。

リソースへのアクセスのコントロール

IAM ポリシーの条件を使用して、タグに基づいて AWS リソースへのアクセスを制御できます。

次のようなポリシーを作成する方法を示します。この例では、 は、インスタンスのタグ Owner がそのユーザーのユーザー名の値を含む場合に限り、Amazon EC2 インスタンスの起動または停止を許可します。このポリシーでは、このアクションをコンソールで実行するために必要なアクセス権限も付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances" ], "Resource": "arn:aws:ec2:*:*:instance/*", "Condition": { "StringEquals": {"ec2: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」を参照してください。

リクエストへのアクセスの制御

IAM ポリシーで条件を使用して、AWS リソースに対して追加、変更、削除できるタグを制御できます。

次のようなポリシーを作成する方法を示します。この例では、 では、タグに environment キーおよび preprod または production の値が含まれている場合のみ、Amazon EC2 CreateTags アクションを使用してインスタンスにタグをアタッチできます。ベストプラクティスとして、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 インスタンスに foo=bar1 および Foo=bar2 タグを付けるなどです。ポリシー条件のキー名では、大文字と小文字は区別されません。つまり、ポリシーの条件要素で "ec2:ResourceTag:TagKey1": "Value1" で指定した場合、その条件は TagKey1 または tagkey1 という名前のリソースタグキーに一致しますが、その両方には一致しません。大文字小文字のみが異なるキーを使用したタグの重複を防ぐには、aws:TagKeys 条件を使用して、ユーザーが適用できるタグキーを定義します。

次のようなポリシーを作成する方法を示します。この例では、 では、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" ] } } } }