IAM ポリシータグを使用して EC2 インスタンスまたは EBS ボリュームの作成方法を制限するにはどうすればよいですか?

所要時間3分
0

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 を使用してください。

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

{
  "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/ValueResult
key1/value1 and key2/value2allow
key1/value1deny
key1/value2deny
no keys and valuesdeny

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

次の例では、AllowRunInstancesWithRestrictions 条件ブロックを置き換えて、少なくとも 1 つのタグキーが key1、1 つの値が value1 である場合、ユーザーが EC2 インスタンスを起動して EBS ボリュームを作成できるようにします。RunInstances リクエストには、任意の数のタグを追加できます。

"Condition": {
  "StringEquals": {
    "aws:RequestTag/key1": "value1"
  },
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Example results

Key/ValueResult
key1/value1 and key2/value2allow
key1/value1allow
key1/value2deny
no keys and valuesdeny

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

次のポリシーの例では、AllowRunInstancesWithRestrictions 条件ブロックを置き換えて、少なくとも 1 つのタグキーが key1 である場合、ユーザーが EC2 インスタンスを起動して EBS ボリュームを作成できるようにします。key1 タグには特定の値は不要で、RunInstances リクエストに任意の数のタグを追加できます。

"Condition": {
  "ForAnyValue:StringEquals": {
    "aws:TagKeys": [
      "key1"
    ]
  }
}

Example results

Key/ValueResult
key1/value1 and key2/value2allow
key1/value1allow
key1/value2allow
no keys and valuesdeny

指定されたタグのリストのみを持つ EC2 インスタンスを起動する

次のポリシーの例では、AllowRunInstancesWithRestrictions 条件ブロックを置き換えて、リクエストにタグキー key1key2 が提供されている場合にのみ、ユーザーが EC2 インスタンスを起動して EBS ボリュームを作成できるようにします。どちらのタグキーにも特定の値は不要で、RunInstances リクエストにタグを追加することはできません。

"Condition": {
  "StringLike": {
      "aws:RequestTag/key1": "*",
      "aws:RequestTag/key2": "*"
  },
  "ForAllValues:StringEquals": {
    "aws:TagKeys": [
        "key1",
        "key2"
    ]
  }
}

注: StringLike 条件は、すべてのタグが確実に存在するようにするために必要です。

Example results

Key/ValueResult
key1/AnyValue and key2/AnyValueAllow
key1/AnyValueDeny
key2/AnyValueDeny
No keys or valuesDeny
key1/AnyValue, key2/AnyValue, key3/AnyValueDeny

関連情報

How do I create an IAM policy to control access to Amazon EC2 resources using tags? (タグを使用して Amazon EC2 リソースへのアクセスを管理する IAM ポリシーの作成方法を教えてください。)

複数のキーまたは値を持つ条件の作成

IAM ID ベースのポリシーの例

Amazon EC2 リソースをタグ付けする

Amazon EC2 のアクション、リソース、および条件キー

コメントはありません

関連するコンテンツ