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

fagner_0518

IAM ユーザーまたはグループのアクセスが新しい Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動し、新しい Amazon Elastic Block Store (Amazon EBS) ボリュームを作成できるようにしたいのですが、それらは特定のタグを適用する場合に限られます。AWS Identity and Access Management (IAM) ポリシー条件を使用してこれを行い、アクセスを制限して新しいリソースを作成するにはどうすればよいでしょうか?

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

次の 3 つの例の IAM ポリシーにより、ユーザーは次のことが行えます。

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

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

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

重要: EC2 インスタンスを正常に起動するには、一致するタグキーと値をこのポリシーに含める必要があります。キーと値のペアが一致しない場合は、「起動失敗」エラーや同様の種類の API エラーメッセージが表示されることがあります。

Example results

Key/Value Result
key1/value1 and key2/value2 allow
KEY1/value1 and key2/value2 deny
key1/value1 deny
key1/value2 deny
no keys and values deny

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

最初のポリシー例を使用して、ステートメント ID (Sid)「AllowRunInstancesWithRestrictions」を置き換えることで、ユーザーが EC2 インスタンスを起動できるようにすることができます。次に、ユーザーが次の条件 ForAnyValue を使用して特定のタグを少なくとも 1 つ適用したら、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"
...

Example results

Key/Value Result
key1/value1 and key2/value2 allow
key1/value1 allow
key1/value2 deny
no keys and values deny

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

最初のポリシー例を使用して、Sid「AllowRunInstancesWithRestrictions」を置き換えることで、ユーザーが EC2 インスタンスを起動できるようにすることができます。次に、ユーザーが key1 という名前のタグキーを少なくとも 1 つ適用したら、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"
...

Example results

Key/Value Result
key1/value1 and key2/value2 allow
key1/value1 allow
key1/value2 allow
no keys and values deny

注: ポリシー例の key1value1 を変更して、リソースに適用するタグと値を含めます。


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

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

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

公開日: 2018 年 5 月 8 日

更新日: 2019 年 2 月 8 日