ファグナーが、
IAM タグを使用して
EC2 インスタンスの作成を制限する方法をご紹介します。

fagner_0518

IAM ユーザーまたはグループのアクセスが新しい Elastic Compute Cloud (Amazon EC2) インスタンスを起動し、特定のタグを適用する場合にのみ新しい Elastic Block Store (Amazon EBS) ボリュームを作成できるようにします。IAM ポリシー条件を使用して新しいリソースを作成するアクセスを制限する方法を教えてください。

EC2 インスタンスと EBS ボリュームのタグは、リソースを作成する API 呼び出しの一部として指定できます。この原則を用いると、IAM ポリシーに条件を適用することで、ユーザーに特定のリソースへのタグ付けを強制することができます。次のポリシー例では、ユーザーがセキュリティグループまたはキーペアを作成できないため、ユーザーは既存のセキュリティグループとキーペアを選択する必要があります。セキュリティグループの作成については、 最初の IAM ユーザーと管理者グループの作成を参照してください。

次の 3 つの IAM ポリシーの例では、ユーザーに以下のことが行えるようにしています。

  1. 一致するタグキーと値を持つ EC2 インスタンスを起動すること。
  2. 一致するタグと値が少なくとも 1 つある EC2 インスタンスを起動すること。
  3. 一致するタグキーが少なくとも 1 つある EC2 インスタンスを起動すること。

1.    タグキーと値が一致する EC2 インスタンスを起動する

次のポリシー例では、ユーザーが EC2 インスタンスを起動し、EBS ボリュームを作成できるのは、ユーザーが修飾子 ForAllValues を使用してポリシーに定義されているすべてのタグを適用した場合のみです 。ユーザーがポリシーに含まれていないタグを適用すると、アクションは拒否されます。大文字と小文字の区別を適用するには、条件 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/*"
            ],
            "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/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:CreateAction": "RunInstances"
                }
            }
        }
    ]
}

結果の例

キー / 値 結果
キー 1 / 値 1 と キー 2 / 値 2 許可
キー 1 / 値 1 と キー 2 / 値 2 拒否
キー 1 / 値 1 拒否
キー 1 / 値 2 拒否
キーも値もない 拒否

2.    一致するタグと値が少なくとも 1 つある EC2 インスタンスを起動する

最初のポリシーの例を使用して、次の条件 ForAnyValue を使用してユーザーが少なくとも 1 つの特定のタグを適用する場合、ステートメント ID(Sid) 「AllowRunInstancesWithRestrictions」を置き換えて、EC2 インスタンスを起動して EBS ボリュームを作成できるようにします

...
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/key1": "value1"
                },
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

結果の例

キー / 値 結果
キー 1 / 値 1 と キー 2 / 値 2 許可
キー 1 / 値 1 許可
キー 1 / 値 2 拒否
キーも値もない 拒否

3.    一致するタグキーが少なくとも 1 つある EC2 インスタンスを起動する

最初のポリシー例を使用して、ユーザーが少なくとも 1 つのキー 1 と呼ばれるタグキーを適用して、Sid "AllowRunInstancesWithRestrictions"を置き換えて、ユーザーがEC2インスタンスを起動し、EBS ボリュームを作成できるようにすることができます。次のポリシー例では、特定の値は必要ありません。

...
        {
            "Sid": "AllowRunInstancesWithRestrictions",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateVolume",
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:*:volume/*",
                "arn:aws:ec2:*:*:instance/*"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:TagKeys": [
                        "key1"
...

結果の例

キー / 値 結果
キー 1 / 値 1 と キー 2 / 値 2 許可
キー 1 / 値 1 許可
キー 1 / 値 2 許可
キーも値もない 拒否

注意: ポリシー例では、キー1値 1 を変更して、リソースに適用されるタグと値を含めます。


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2018 年 5 月 8 日