タグおよび AWS Organizations による属性ベースのアクセスコントロール - AWS Organizations

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

タグおよび AWS Organizations による属性ベースのアクセスコントロール

属性ベースのアクセスコントロールでは、AWS リソースと AWS アイデンティティの両方にアタッチされたタグなどの管理者によって管理される属性を使用して、それらのリソースへのアクセスをコントロールすることができます。例えば、ユーザーとリソースの両方に特定のタグの同じ値がアタッチされている場合には、ユーザーがリソースにアクセスできるように指定できます。

AWS Organizations のタグ付け可能なリソースには、AWS アカウント、組織ルート、組織単位 (OU)、またはポリシーがあります。Organizations リソースにタグをアタッチすると、そのタグを使用して、それらのリソースにアクセスできるユーザーを制御できます。これを行うには、アクションを許可する前に、特定のタグキーと値が存在するかどうかを確認するための Condition 要素を AWS Identity and Access Management (IAM) アクセス許可ポリシーステートメントに追加します。これにより、「キー X と値 Y を含むタグがアタッチされた OU のみの管理をユーザに許可する」または「ユーザにアタッチされたタグキー Z と同じ値を含むキー Z でタグ付けされた OU のみの管理をユーザに許可する」という効果的な IAM ポリシーを作成することができます。

IAM ポリシーのさまざまなタイプのタグリファレンスに基づいて Condition テストを行うことができます。

ポリシーによるアクセスコントロールでタグを使用する方法の詳細については、「リソースタグを使用した IAM ユーザーおよびロールへのアクセスのコントロール」を参照してください。IAM アクセス許可ポリシーの完全な構文については、「IAM JSON ポリシーリファレンス」を参照してください。

リクエストによって指定されたリソースにアタッチされたタグのチェック

AWS Management Console、AWS Command Line Interface (AWS CLI)、または AWS いずれかの SDK を使用してリクエストを行う場合は、そのリクエストによってアクセスするリソースを指定します。利用可能な特定のタイプのリソースの一覧表示、リソースの読み取り、リソースの書き込み、変更、更新のいずれかを行う場合は、アクセスするリソースをリクエストのパラメータとして指定します。これらのリクエストは、ユーザーとロールにアタッチする IAM アクセス許可ポリシーによって制御されます。これらのポリシーでは、リクエストされたリソースにアタッチされているタグを比較し、それらのタグのキーと値に応じてアクセスを許可または拒否できます。

リソースにアタッチされているタグを確認するには、タグキー名の前に aws:ResourceTag/ という文字列を付けて、Condition 要素内のタグを参照します。

例えば、以下のポリシー例では、リソースにキー department と値 security のタグがアタッチされない限り、ユーザーまたはロールはすべての AWS Organizations オペレーションを実行することができます。そのキーと値が存在する場合、ポリシーによって UntagResource オペレーションが明示的に拒否されます。

{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : "organizations:*", "Resource" : "*" }, { "Effect" : "Deny", "Action" : "organizations:UntagResource", "Resource" : "*", "Condition" : { "StringEquals" : { "aws:ResourceTag/department" : "security" } } } ] }

この要素の使用方法の詳細については、IAM ユーザーガイドの「リソースへのアクセスのコントロール」および「aws:ResourceTag」を参照してください。

リクエストを行う IAM ユーザーまたはロールにアタッチされているタグを確認する

リクエストを行うユーザー (プリンシパル) が実行できるオペレーションを、そのユーザーの IAM ユーザーまたはロールにアタッチされたタグに応じて制御できます。これを行うには、aws:PrincipalTag/key-name 条件キーを使用して、呼び出し元のユーザーまたはロールにアタッチする必要のあるタグと値を指定します。

次の例では、指定されたタグ (cost-center) が、オペレーションを呼び出すプリンシパルと、オペレーションによってアクセスされるリソースの両方に同じ値が含まれる場合にのみ、アクションを許可する方法について説明します。この例では、呼び出し元ユーザーは、インスタンスにユーザーと同じ cost-center 値がタグ付けされている場合にのみ、Amazon EC2 インスタンスを開始および停止できます。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "ec2:startInstances", "ec2:stopInstances" ], "Resource": "*", "Condition": {"StringEquals": {"ec2:ResourceTag/cost-center": "${aws:PrincipalTag/cost-center}"}} } }

この要素の使用方法の詳細については、IAM ユーザーガイドの「IAM プリンシパルのアクセスのコントロール」および「aws:PrincipalTag」を参照してください。

リクエストのパラメータとして含まれているタグをチェックする

いくつかのオペレーションでは、リクエストの一部としてタグを指定できます。例えば、リソースを作成する際に、新しいリソースにアタッチされるタグを指定できます。aws:TagKeys を使用する Condition 要素を指定し、特定のタグキーまたはキーのセットがリクエストに含まれているかどうかによって、オペレーションを許可または拒否できます。この比較演算子では、タグにどのような値が含まれていても問題ありません。指定されたキーのタグが存在するかどうかだけがチェックされます。

タグキーまたはキーのリストを確認するには、次の構文で Condition 要素を指定します。

"aws:TagKeys": [ "tag-key-1", "tag-key-2", ... , "tag-key-n" ]

比較演算子の前に ForAllValues: を使用することで、リクエストに含まれるすべてのキーが、ポリシーで指定されたキーの 1 つと確実に一致しているかどうかを確認できます。例えば次のポリシー例では、指定した 3 つすべてのタグキーがリクエストに存在する場合にのみ、Organizations のすべてのオペレーションを許可します。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "organizations:*", "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": [ "department", "costcenter", "manager" ] } } } }

あるいは、ForAnyValue: を比較演算子の前に記述して使用し、リクエスト内の少なくとも 1 つのキーが、ポリシーで指定されたキーの 1 つと確実に一致しているかどうかを確認できます。例えば、次のポリシーでは、指定されたタグキーの少なくとも 1 つがリクエスト内に存在する場合にのみ、Organizations のオペレーションを許可します。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "organizations:*", "Resource": "*", "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": [ "stage", "region", "domain" ] } } } }

複数のオペレーションによって、リクエストのタグを指定できます。例えば、リソースを作成する際に、新しいリソースにアタッチされるタグを指定できます。ポリシー内のタグキーと値のペアと、リクエストに含まれるキーと値のペアを比較できます。これを行うには、タグのキー名の前に aws:RequestTag/key-name という文字列を付けて Condition 要素内のタグを参照し、含まれるべきタグの値を指定します。

例えば、次のポリシー例では、ユーザーまたはロールが AWS アカウント を作成するためのリクエストに costcenter タグが含まれていない場合、またはタグに 123 以外の値が指定されている場合に、そのリクエストが拒否されます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "organizations:CreateAccount", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/costcenter": "true" } } }, { "Effect": "Deny", "Action": "organizations:CreateAccount", "Resource": "*", "Condition": { "ForAnyValue:StringNotEquals": { "aws:RequestTag/costcenter": [ "1", "2", "3" ] } } } ] }

これらの要素を使用する方法の詳細については、IAM ユーザーガイドの「aws:TagKeys」および「aws:RequestTag」を参照してください。