IAM ポリシータグを使用して EC2 インスタンスまたは EBS ボリュームの作成方法を制限するにはどうすればよいですか?
AWS Identity and Access Management (IAM) ユーザーまたはグループのアクセスに対して、新しい Amazon Elastic Compute Cloud (Amazon EC2) インスタンスの起動を許可したいです。また、特定のタグを適用する場合にのみ、IAM ユーザーのアクセスに対して、新しい Amazon Elastic Block Store (Amazon EBS) ボリュームの作成を許可したいです。
簡単な説明
リソースを作成する API 呼び出しの一部として、EC2 インスタンスと EBS ボリュームのタグを指定します。この原則を使用して、IAM ポリシーに条件を適用することで、特定のリソースにタグ付けするよう IAM ユーザーに要求できます。次のポリシーの例では、ユーザーはセキュリティグループまたはキーペアの作成が許可されていないため、既存のセキュリティグループとキーペアを選択する必要があります。
次の IAM ポリシーの例により、ユーザーは次のことが行えます。
- 一致するタグキーと値を持つ EC2 インスタンスを起動する
- 少なくとも 1 つの一致するタグと値を持つ EC2 インスタンスを起動する
- 少なくとも 1 つの一致するタグキーを持つ EC2 インスタンスを起動する
- 指定されたタグのリストのみを持つ EC2 インスタンスを起動する
解決方法
一致するタグキーと値を持つ EC2 インスタンスを起動する
次のポリシーの例では、ユーザーが修飾子 ForAllValues を使用してポリシーで定義されているすべてのタグを適用する場合にのみ、EC2 インスタンスを起動して EBS ボリュームを作成できます。ユーザーがポリシーに含まれていないタグを適用すると、そのアクションは拒否されます。大文字と小文字の区別を強制するには、条件 aws:TagKeys を使用してください。
注: ポリシーの例の key1 と value1 を変更して、リソースに適用するタグと値を含めます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowToDescribeAll", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "AllowRunInstances", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:key-pair/*" ] }, { "Sid": "AllowRunInstancesWithRestrictions", "Effect": "Allow", "Action": [ "ec2:CreateVolume", "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ], "Condition": { "StringEquals": { "aws:RequestTag/key1": "value1", "aws:RequestTag/key2": "value2" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } } }, { "Sid": "AllowCreateTagsOnlyLaunching", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:network-interface/*" ], "Condition": { "StringEquals": { "ec2:CreateAction": [ "RunInstances", "CreateVolume" ] } } } ] }
重要: EC2 インスタンスを正常に起動するには、一致するタグキーと値をこのポリシーに含める必要があります。キーと値のペアが一致しない場合は、「起動失敗」エラーや同様の種類の API エラーメッセージが表示されます。
Example results
Key/Value | Result |
key1/value1 and key2/value2 | allow |
key1/value1 | deny |
key1/value2 | deny |
no keys and values | deny |
少なくとも 1 つの一致するタグと値を持つ EC2 インスタンスを起動する
次の例では、AllowRunInstancesWithRestrictions 条件ブロックを置き換えて、少なくとも 1 つのタグキーが key1、1 つの値が value1 である場合、ユーザーが EC2 インスタンスを起動して EBS ボリュームを作成できるようにします。RunInstances リクエストには、任意の数のタグを追加できます。
"Condition": { "StringEquals": { "aws:RequestTag/key1": "value1" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
Example results
Key/Value | Result |
key1/value1 and key2/value2 | allow |
key1/value1 | allow |
key1/value2 | deny |
no keys and values | deny |
少なくとも 1 つの一致するタグキーを持つ EC2 インスタンスを起動する
次のポリシーの例では、AllowRunInstancesWithRestrictions 条件ブロックを置き換えて、少なくとも 1 つのタグキーが key1 である場合、ユーザーが EC2 インスタンスを起動して EBS ボリュームを作成できるようにします。key1 タグには特定の値は不要で、RunInstances リクエストに任意の数のタグを追加できます。
"Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
Example results
Key/Value | Result |
key1/value1 and key2/value2 | allow |
key1/value1 | allow |
key1/value2 | allow |
no keys and values | deny |
指定されたタグのリストのみを持つ EC2 インスタンスを起動する
次のポリシーの例では、AllowRunInstancesWithRestrictions 条件ブロックを置き換えて、リクエストにタグキー key1 と key2 が提供されている場合にのみ、ユーザーが EC2 インスタンスを起動して EBS ボリュームを作成できるようにします。どちらのタグキーにも特定の値は不要で、RunInstances リクエストにタグを追加することはできません。
"Condition": { "StringLike": { "aws:RequestTag/key1": "*", "aws:RequestTag/key2": "*" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } }
注: StringLike 条件は、すべてのタグが確実に存在するようにするために必要です。
Example results
Key/Value | Result |
key1/AnyValue and key2/AnyValue | Allow |
key1/AnyValue | Deny |
key2/AnyValue | Deny |
No keys or values | Deny |
key1/AnyValue, key2/AnyValue, key3/AnyValue | Deny |
関連情報
関連するコンテンツ
- 質問済み 4年前lg...
- 質問済み 4ヶ月前lg...
- AWS公式更新しました 4ヶ月前
- AWS公式更新しました 3年前