Fagner 씨가 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 관리 사용자 및 그룹 생성하기를 참조하십시오.

다음의 세 가지 예제 IAM 정책을 통해 사용자는 아래와 같은 작업을 수행할 수 있습니다.

  1. 태그 키와 값이 일치하는 EC2 인스턴스를 시작합니다.
  2. 적어도 하나 이상의 태그와 값이 일치하는 EC2 인스턴스를 시작합니다.
  3. 적어도 하나 이상의 태그 키가 일치하는 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 실패 메시지가 나타날 수 있습니다.

예제 결과

키/값 결과
키1/값1 및 키2/값2 허용
키1/값1 및 키2/값2 거부
키1/값1 거부
키1/값2 거부
키와 값 없음 거부

2.    적어도 하나 이상의 태그와 값이 일치하는 EC2 인스턴스를 시작합니다.

첫 번째 정책 예제를 사용하고 사용자가 EC2 인스턴스를 시작할 수 있도록 명령문 ID(Sid) "AllowRunInstancesWithRestrictions"를 바꿀 수 있습니다. 그런 다음, 사용자가 아래의 ForAnyValue 조건을 사용하여 하나 이상의 특정 태그를 적용하는 경우 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.    적어도 하나 이상의 태그 키가 일치하는 EC2 인스턴스를 시작합니다.

첫 번째 정책 예제를 사용하고 사용자가 EC2 인스턴스를 시작할 수 있도록 Sid "AllowRunInstancesWithRestrictions"를 바꿀 수 있습니다. 그런 다음, 사용자가 적어도 하나 이상의 키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"
...

예제 결과

키/값 결과
키1/값1 및 키2/값2 허용
키1/값1 허용
키1/값2 허용
키와 값 없음 거부

참고: 예제 정책에서 키1 값1을 수정하여 리소스에 적용되는 태그 및 값을 포함시킵니다.


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2018년 5월 8일

업데이트 날짜: 2019년 2월 8일