AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

IAM ポリシータグを使用して EC2 インスタンスまたは EBS ボリュームを作成し、アクセス方法を制限する方法を教えてください。

所要時間3分
0

新しい 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/value2allow
key1/value1deny
key1/value2deny
キーと値なしdeny

一致するタグキーが 1 つ以上ある EC2 インスタンスを起動する

次のポリシー例では、key1 という名前のタグキーが 1 つ以上ある場合に、AllowRunInstancesWithRestrictions 条件ブロックを置き換えます。key1 のタグには特定の値は必要ありません。RunInstances リクエストにタグを追加できます。

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

結果の例

キー/値結果
key1/value1 と key2/value2allow
key1/value1allow
key1/value2allow
キーと値なしdeny

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

次のポリシー例では、リクエストにタグキー key1key2 が指定されている場合に、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 に置き換えます。

関連情報

タグを使用して Amazon EC2 リソースへのアクセスを制御する IAM ポリシーを作成する方法を教えてください

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

Amazon EC2 リソースのタグ付け

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

AWS公式
AWS公式更新しました 3ヶ月前
コメントはありません

関連するコンテンツ