IAM ポリシータグを使用して EC2 インスタンスまたは EBS ボリュームを作成し、アクセス方法を制限する方法を教えてください。
新しい Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動するために、AWS Identity and Access Management (IAM) での ID アクセスを許可したいと考えています。また、IAM ID が特定のタグを適用したときに、新しい Amazon Elastic Block Store (Amazon EBS) ボリュームを作成できるようにしたいと考えています。
簡単な説明
リソースを作成する API コールの一部として、EC2 インスタンスと Amazon EBS ボリュームにタグを指定します。IAM ポリシーに条件を適用して、IAM ユーザーに特定のリソースへのタグ付けを要求します。
次のポリシー例では、ユーザーはセキュリティグループまたはキーペアを作成できないため、ユーザーは既存のセキュリティグループとキーペアを選択する必要があります。
次の IAM ポリシーの例では、ユーザーは次のように設定されたインスタンスを起動できます。
- タグキーと値のマッチング
- 少なくとも 1 つの一致するタグと値
- 1 つ以上の一致するタグキー
- 指定されたタグのリストのみ
IAM ポリシー例では、タグキーと値が一致するインスタンスとボリュームをユーザーが管理することもできます。
注: ポリシー例を使用する際に、サンプルに含まれる値を実際の値に置き換えてください。
解決策
タグに基づいて EC2 インスタンスと EBS ボリュームの作成を制限する
次のポリシー例では、ユーザーがインスタンスを起動し、タグに基づいてボリュームを作成できます。
タグキーと値が一致する EC2 インスタンスを起動する
次のポリシー例では、RequestTag という条件がタグの適用を制御します。ポリシーに含まれていないタグをユーザーが適用すると、アクションが拒否されます。大文字と小文字の区別を強制するには、aws:TagKeys 条件を使用します。
{ "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 インスタンスを正常に起動するには、一致するタグキーと値を上記のポリシーに含める必要があります。キーと値のペアが一致しない場合、Launch Failed エラーまたは、類似した API エラーメッセージが表示されます。
結果の例
キー/値 | 結果 |
key1/value1 と key2/value2 | allow |
key1/value1 | deny |
key1/value2 | deny |
キーと値なし | deny |
一致するタグキーが 1 つ以上ある EC2 インスタンスを起動する
次のポリシー例では、key1 という名前のタグキーが 1 つ以上ある場合に、AllowRunInstancesWithRestrictions 条件ブロックを置き換えます。key1 のタグには特定の値は必要ありません。RunInstances リクエストにタグを追加できます。
"Condition": { "StringEquals": { "aws:RequestTag/key1": "value1" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "key1" ] } }
結果の例
キー/値 | 結果 |
key1/value1 と key2/value2 | allow |
key1/value1 | allow |
key1/value2 | allow |
キーと値なし | deny |
指定されたタグのリストのみを含む EC2 インスタンスを起動する
次のポリシー例では、リクエストにタグキー key1 と key2 が指定されている場合に、AllowRunInstancesWithRestrictions 条件ブロックを置き換えます。どちらのタグキーにも特定の値は必要ありません。また、RunInstances リクエストにタグを追加することはできません。
"Condition": { "StringLike": { "aws:RequestTag/key1": "*", "aws:RequestTag/key2": "*" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "key1", "key2" ] } }
注: 上記のポリシーでは、値に複数文字一致のワイルドカード (*) を含められるようにするために、StringLike 条件が必要です。
結果の例
キー/値 | 結果 |
key1/任意の値、key2/任意の値 | Allow |
key1/任意の値 | Deny |
key2/任意の値 | Deny |
キーまたは値なし | Deny |
key1/任意の値、key2/任意の値、key3/任意の値 | Deny |
タグキーと値に基づいて EC2 インスタンスと EBS ボリューム管理を制限する
次のポリシー例では、タグキーと値に基づき、インスタンスとボリュームのユーザー管理を制限しています。
一致するタグキーと値がある EC2 インスタンスを管理する
次のポリシー例では、IAM ID へのアクセスを EC2 インスタンスの起動、停止、再起動のみに制限しています。インスタンスには、タグ値 Bob を含む Owner キータグが必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances" ], "Resource": [ "arn:aws:ec2:*:111122223333:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Owner": "Bob" } } } ] }
注: Owner は実際のタグキーに、Bob は実際の IAM ユーザーに、リソース ARN はお使いのリソース ARN に置き換えます。
詳細については、「IAM ID のアクセスを特定の Amazon EC2 リソースに制限することはできますか」を参照してください。
一致するタグキーと値がある EBS ボリュームを管理する
次のポリシー例では、IAM ID で EBS ボリュームをデタッチまたは削除できます。DeleteVolume API アクションには、ボリュームにタグ値 Mary を含む Owner タグキーが必要です。DetachVolume API アクションには、インスタンスとボリュームの両方に同じタグキー Owner とタグ値 Mary が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": [ "ec2:DetachVolume", "ec2:DeleteVolume" ], "Resource": [ "arn:aws:ec2:*:111122223333:volume/*", "arn:aws:ec2:*:111122223333:instance/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Owner": "Mary" } } } ] }
注: Owner は実際のタグキーに、Mary は実際の IAM ユーザーに、リソース ARN はお使いのリソース ARN に置き換えます。
関連情報
関連するコンテンツ
- 質問済み 3ヶ月前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 1年前
- AWS公式更新しました 1ヶ月前