메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

정책 구조

다음 항목에서는 IAM 정책의 구조에 대해 설명합니다.

정책 구문

IAM 정책은 하나 이상의 명령문으로 구성된 JSON 문서입니다. 각 명령문의 구조는 다음과 같습니다.

{
  "Statement":[{
    "Effect":"effect",
    "Action":"action",
    "Resource":"arn",
    "Condition":{
      "condition":{
        "key":"value"
        }
      }
    }
  ]
}

명령문을 이루는 요소는 다양합니다.

  • Effect: effectAllow 또는 Deny일 수 있습니다. 기본적으로 IAM 사용자에게는 리소스 및 API 작업을 사용할 권한이 없으므로 모든 요청이 거부됩니다. 명시적 허용은 기본 설정을 무시합니다. 명시적 거부는 모든 허용을 무시합니다.

  • Action: action은 권한을 부여하거나 거부할 특정 API 작업입니다. action을 지정하는 방법에 대한 자세한 내용은 Amazon EC2 작업 단원을 참조하십시오.

  • [Resource]: 작업의 영향을 받는 리소스입니다. 일부 Amazon EC2 API 작업의 경우 작업이 생성하거나 수정할 수 있는 리소스를 정책에 구체적으로 포함할 수 있습니다. 명령문에서 리소스를 지정하려면 Amazon 리소스 이름(ARN)을 사용해야 합니다. ARN 값을 지정하는 방법에 대한 자세한 내용은 Amazon EC2의 Amazon 리소스 이름 단원을 참조하십시오. 어떠한 API 작업이 어떠한 ARN을 지원하는지에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오. API 작업이 ARN을 지원하지 않는 경우 * 와일드카드를 사용하여 모든 리소스가 작업에 영향을 받을 수 있도록 지정합니다.

  • Condition: Condition은 선택 사항으로서 정책이 적용되는 시점을 제어하는 데 사용할 수 있습니다. Amazon EC2에 조건을 지정하는 방법에 대한 자세한 내용은 Amazon EC2의 조건 키 단원을 참조하십시오.

Amazon EC2용 예제 IAM 정책 명령문에 대한 자세한 내용은 AWS CLI 또는 AWS SDK 작업을 위한 예제 정책 단원을 참조하십시오.

Amazon EC2 작업

IAM 정책 명령문에는 IAM을 지원하는 모든 서비스의 모든 API 작업을 지정할 수 있습니다. Amazon EC2의 경우 ec2: 접두사와 함께 API 작업 이름을 사용합니다. 예를 들면 ec2:RunInstancesec2:CreateImage 등입니다.

명령문 하나에 여러 작업을 지정하려면 다음과 같이 쉼표로 구분합니다.

"Action": ["ec2:action1", "ec2:action2"]

와일드카드를 사용하여 여러 작업을 지정할 수도 있습니다. 예를 들어 다음과 같이 이름이 "Describe"로 시작되는 모든 작업을 지정할 수 있습니다.

"Action": "ec2:Describe*"

모든 Amazon EC2 API 작업을 지정하려면 다음과 같이 * 와일드카드를 사용합니다.

"Action": "ec2:*"

Amazon EC2 작업의 목록은 Amazon EC2 API Reference에서 작업을 참조하십시오.

Amazon EC2의 Amazon 리소스 이름

각 IAM 정책 명령문은 ARN을 사용하여 지정한 리소스에 적용됩니다.

중요

현재 일부 API 작업은 개별 ARN을 지원하지 않으며, 이후에 더 많은 API 작업과 Amazon EC2 리소스 ARN이 추가로 지원될 예정입니다. 어떠한 Amazon EC2 API 작업에 어떠한 ARN을 사용할 수 있는지 및 각 ARN에 지원되는 조건 키에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오.

ARN의 일반적인 구문은 다음과 같습니다.

arn:aws:[service]:[region]:[account]:resourceType/resourcePath
service

서비스(예: ec2)입니다.

region

리소스의 리전(예: us-east-1)입니다.

account

AWS 계정 ID이며 하이픈은 제외합니다(예: 123456789012).

resourceType

리소스의 유형(예: instance)입니다.

resourcePath

리소스를 식별하는 경로입니다. 경로에 * 와일드카드를 사용할 수 있습니다.

예를 들어 명령문에서 다음과 같이 ARN을 사용하여 특정 인스턴스(i-1234567890abcdef0)를 나타낼 수 있습니다.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"

다음과 같이 * 와일드카드를 사용하여 특정 계정에 속하는 모든 인스턴스를 지정할 수도 있습니다.

"Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*"

모든 리소스를 지정해야 하거나 특정 API 작업이 ARN을 지원하지 않는 경우 다음과 같이 Resource 요소에 * 와일드카드를 사용합니다.

"Resource": "*"

다음 표에서는 Amazon EC2 API 작업에 사용되는 각 리소스 유형의 ARN을 보여 줍니다.

리소스 유형 ARN

모든 Amazon EC2 리소스

arn:aws:ec2:*

지정한 리전에서 지정한 계정이 소유한 모든 Amazon EC2 리소스

arn:aws:ec2:region:account:*

고객 게이트웨이

arn:aws:ec2:region:account:customer-gateway/cgw-id

여기에서 cgw-id는 cgw-xxxxxxxx입니다.

DHCP 옵션 세트

arn:aws:ec2:region:account:dhcp-options/dhcp-options-id

여기에서 dhcp-options-id는 dopt-xxxxxxxx입니다.

엘라스틱 GPU

arn:aws:ec2:region:account:elastic-gpu/*

이미지

arn:aws:ec2:region::image/image-id

여기에서 image-id는 AMI, AKI 또는 ARI의 ID이며 account는 사용되지 않습니다.

인스턴스

arn:aws:ec2:region:account:instance/instance-id

여기에서 instance-id는 i-xxxxxxxx 또는 i-xxxxxxxxxxxxxxxxx입니다.

인스턴스 프로필

arn:aws:iam::account:instance-profile/instance-profile-name

여기에서 instance-profile-name은 인스턴스 프로파일의 이름이며 region은 사용되지 않습니다.

인터넷 게이트웨이

arn:aws:ec2:region:account:internet-gateway/igw-id

여기에서 igw-id는 igw-xxxxxxxx입니다.

키 페어

arn:aws:ec2:region:account:key-pair/key-pair-name

여기에서 key-pair-name은 키 페어 이름(예: gsg-keypair)입니다.

NAT 게이트웨이

arn:aws:ec2:region:account:natgateway/natgateway-id

여기서 natgateway-id는 nat-xxxxxxxxxxxxxxxxx입니다.

네트워크 ACL

arn:aws:ec2:region:account:network-acl/nacl-id

여기에서 nacl-id는 acl-xxxxxxxx입니다.

네트워크 인터페이스

arn:aws:ec2:region:account:network-interface/eni-id

여기에서 eni-id는 eni-xxxxxxxx입니다.

배치 그룹

arn:aws:ec2:region:account:placement-group/placement-group-name

여기에서 placement-group-name은 배치 그룹 이름(예: my-cluster)입니다.

예약 인스턴스

arn:aws:ec2:region:account:reserved-instances/reservation-id

여기서 reservation-idxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx입니다.

라우팅 테이블

arn:aws:ec2:region:account:route-table/route-table-id

여기에서 route-table-id는 rtb-xxxxxxxx입니다.

보안 그룹

arn:aws:ec2:region:account:security-group/security-group-id

여기에서 security-group-id는 sg-xxxxxxxx입니다.

스냅샷

arn:aws:ec2:region::snapshot/snapshot-id

여기에서 snapshot-id는 snap-xxxxxxxx 또는 snap-xxxxxxxxxxxxxxxxx이며 account는 사용되지 않습니다.

스팟 인스턴스 요청

arn:aws:ec2:region:account:spot-instances-request/spot-instance-request-id

여기에서 spot-instance-request-id는 sir-xxxxxxxx입니다.

서브넷

arn:aws:ec2:region:account:subnet/subnet-id

여기에서 subnet-id는 subnet-xxxxxxxx입니다.

볼륨

arn:aws:ec2:region:account:volume/volume-id

여기에서 volume-id는 vol-xxxxxxxx 또는 vol-xxxxxxxxxxxxxxxxx입니다.

VPC

arn:aws:ec2:region:account:vpc/vpc-id

여기에서 vpc-id는 vpc-xxxxxxxx입니다.

VPC 피어링 연결

arn:aws:ec2:region:account:vpc-peering-connection/vpc-peering-connection-id

여기에서 vpc-peering connection-id는 pcx-xxxxxxxx입니다.

VPN 연결

arn:aws:ec2:region:account:vpn-connection/vpn-connection-id

여기에서 vpn-connection-id는 vpn-xxxxxxxx입니다.

VPN 게이트웨이

arn:aws:ec2:region:account:vpn-gateway/vpn-gateway-id

여기에서 vpn-gateway-id는 vgw-xxxxxxxx입니다.

다양한 Amazon EC2 API 작업에는 여러 리소스가 관여합니다. 예를 들어 AttachVolume은 Amazon EBS 볼륨을 인스턴스에 연결하므로 IAM 사용자에게 볼륨 사용 권한과 인스턴스 사용 권한이 있어야 합니다. 명령문 하나에 여러 리소스를 지정하려면 다음과 같이 각 ARN을 쉼표로 구분합니다.

"Resource": ["arn1", "arn2"]

ARN에 대한 보다 일반적인 내용은 Amazon Web Services 일반 참조에서 Amazon 리소스 이름(ARN) 및 AWS 서비스 네임스페이스 단원을 참조하십시오. Amazon EC2 작업에 의해 생성 또는 수정되는 리소스에 대한 자세한 내용 및 IAM 정책 명령문에 사용할 수 있는 ARN에 대한 자세한 내용은 Amazon EC2 API Reference에서 IAM 사용자에게 Amazon EC2 리소스에 대한 필요 권한 부여 단원을 참조하십시오.

Amazon EC2의 조건 키

정책 명령문에서 정책이 적용되는 시점을 제어하는 조건을 지정할 수 있습니다. 각 조건에는 하나 이상의 키-값 쌍이 포함됩니다. 조건 키에는 대/소문자가 구분되지 않습니다. AWS 전체 범위 조건 키 및 추가적인 서비스별 조건 키가 정의되어 있습니다.

여러 조건을 지정하거나 조건 하나에 여러 키를 지정하는 경우 논리적 AND 연산을 적용하여 평가합니다. 조건 하나에서 키 하나에 여러 값을 지정하면 논리적 OR 연산자를 적용하여 조건을 평가합니다. 모든 조건이 충족되어야 권한이 부여됩니다.

조건을 지정할 때 자리표시자를 사용할 수도 있습니다. 예를 들어 IAM 사용자 이름을 지정하는 태그가 포함된 리소스를 사용할 IAM 사용자 권한을 부여할 수 있습니다. 자세한 내용은 IAM 사용 설명서에서 Policy Variables를 참조하십시오.

중요

여러 조건 키들이 하나의 리소스에 딸려 있고, 일부 API 작업은 다수의 리소스를 사용합니다. 조건 키로 정책을 작성하는 경우에는 설명의 Resource 요소를 이용해 조건 키가 적용되는 리소스를 지정하십시오. 그렇게 하지 않으면, 조건 키가 해당되지 않는 리소스에 대해서는 조건 검사가 실패하여 정책이 사용자로 하여금 작업을 전혀 수행하지 못하게 막을 수도 있습니다. 리소스를 지정하고 싶지 않거나 다수의 API 작업을 포함하도록 정책의 Action 요소를 작성했다면, 반드시 ...IfExists 조건 유형을 이용해 조건 키가 그것을 사용하지 않는 리소스에 대해서는 무시되도록 해야 합니다. 자세한 내용은 IAM 사용 설명서...IfExists Conditions를 참조하십시오.

Amazon EC2는 다음의 서비스별 조건 키를 구현합니다. 어떠한 Amazon EC2 리소스에 작업별로 어떠한 조건 키를 사용할 수 있는지에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오.

조건 키 키-값 쌍 평가 유형

ec2:AccepterVpc

"ec2:AccepterVpc":"vpc-arn"

여기서 vpc-arn은 VPC 피어링 연결에서 수락자 VPC에 대한 VPC ARN입니다.

ARN, Null

ec2:AuthorizedUser

"ec2:AuthorizedUser":"principal-arn"

여기서 principal-arn은 보안 주체의 ARN입니다(예: arn:aws:iam::123456789012:root).

ARN, Null

ec2:AvailabilityZone

"ec2:AvailabilityZone":"az-api-name"

여기에서 az-api-name은 가용 영역의 이름(예: us-east-2a)입니다.

가용 영역을 나열하려면 -describe-availability-zones를 사용합니다.

String, Null

ec2:CreateAction "ec2:CreateAction":"api-name"

여기서 api-name은 리소스 생성 작업의 이름입니다(예: RunInstances).

String, Null

ec2:EbsOptimized

"ec2:EbsOptimized":"optimized-flag"

여기서 optimized-flagtrue | false(인스턴스)입니다.

Boolean, Null

ec2:ElasticGpuType

"ec2:ElasticGpuType":"elastic-gpu-type"

여기서 elastic-gpu-type은 Elastic GPU 유형의 이름입니다.

String, Null

ec2:Encrypted "ec2:Encrypted":"encrypted-flag"

여기서 encrypted-flagtrue | false(EBS 볼륨)입니다.

Boolean, Null

ec2:ImageType

"ec2:ImageType":"image-type-api-name"

여기에서 image-type-api-nameami | aki | ari입니다.

String, Null

ec2:InstanceProfile

"ec2:InstanceProfile":"instance-profile-arn"

여기에서 instance-profile-arn은 인스턴스 프로파일 ARN입니다.

ARN, Null

ec2:InstanceType

"ec2:InstanceType":"instance-type-api-name"

여기에서 instance-type-api-name은 인스턴스 유형 이름()입니다.

String, Null

ec2:Owner

"ec2:Owner":"account-id"

여기에서, account-idamazon | aws-marketplace | aws-account-id입니다.

String, Null

ec2:ParentSnapshot

"ec2:ParentSnapshot":"snapshot-arn"

여기에서 snapshot-arn은 스냅샷 ARN입니다.

ARN, Null

ec2:ParentVolume

"ec2:ParentVolume":"volume-arn"

여기에서 volume-arn은 볼륨 ARN입니다.

ARN, Null

ec2:Permission

"ec2:Permission":"permission"

여기서 permissionINSTANCE-ATTACH | EIP-ASSOCIATE입니다.

String, Null

ec2:PlacementGroup

"ec2:PlacementGroup":"placement-group-arn"

여기에서 placement-group-arn은 배치 그룹 ARN입니다.

ARN, Null

ec2:PlacementGroupStrategy

"ec2:PlacementGroupStrategy":"placement-group-strategy"

여기에서 placement-group-strategycluster입니다.

String, Null

ec2:ProductCode

"ec2:ProductCode":"product-code"

여기에서 product-code는 제품 코드입니다.

String, Null

ec2:Public

"ec2:Public":"public-flag"

여기서 public-flagtrue | false입니다. (AMI에 대해)

Boolean, Null

ec2:Region

"ec2:Region":"region-name"

여기에서 region-name은 리전 이름(예: us-east-2)입니다. 리전을 나열하려면 describe-regions를 사용합니다. 이 조건 키는 모든 Amazon EC2 작업에 사용할 수 있습니다.

String, Null

ec2:RequesterVpc

"ec2:RequesterVpc":"vpc-arn"

여기서 vpc-arn은 VPC 피어링 연결에서 요청자 VPC에 대한 VPC ARN입니다.

ARN, Null

ec2:ReservedInstancesOfferingType

"ec2:ReservedInstancesOfferingType":"offering-type

여기에서 offering-typeNo Upfront | Partial Upfront | All Upfront입니다.

String, Null

ec2:ResourceTag/tag-key

"ec2:ResourceTag/tag-key":"tag-value"

여기에서 tag-keytag-value는 태그-키 페어입니다.

String, Null

ec2:RootDeviceType

"ec2:RootDeviceType":"root-device-type-name"

여기에서 root-device-type-nameebs | instance-store입니다.

String, Null

ec2:SnapshotTime

"ec2:SnapshotTime":"time"

여기에서 time은 스냅샷 생성 시간(예: 2013-06-01T00:00:00Z)입니다.

Date, Null

ec2:Subnet

"ec2:Subnet":"subnet-arn"

여기에서 subnet-arn은 서브넷 ARN입니다.

ARN, Null

ec2:Tenancy

"ec2:Tenancy":"tenancy-attribute"

여기서 tenancy-attributedefault | dedicated | host입니다.

String, Null

ec2:VolumeIops

"ec2:VolumeIops":"volume-iops"

여기에서 volume-iops는 초당 입력/출력 작업 수(IOPS)이며 범위는 100 ~ 20,000입니다.

Numeric, Null

ec2:VolumeSize

"ec2:VolumeSize":"volume-size"

여기에서 volume-size는 볼륨 크기(GiB 단위)입니다.

Numeric, Null

ec2:VolumeType

"ec2:VolumeType":"volume-type-name"

여기에서 volume-type-name은 범용 SSD 볼륨의 경우 gp2, 프로비저닝된 IOPS SSD 볼륨의 경우 io1, 처리량에 최적화된 HDD 볼륨의 경우 st1, Cold HDD 볼륨의 경우 sc1 또는 Magnetic 볼륨의 경우 standard입니다.

String, Null

ec2:Vpc

"ec2:Vpc":"vpc-arn"

여기에서 vpc-arn은 VPC ARN입니다.

ARN, Null

Amazon EC2는 AWS 전체 범위 조건 키도 구현합니다. 자세한 내용은 IAM 사용 설명서모든 요청에서 사용 가능한 정보를 참조하십시오.

ec2:SourceInstanceARN 키는 요청이 이루어진 인스턴스의 ARN을 지정하는 조건에 사용할 수 있습니다. 이 조건 키는 AWS 전체 범위에서 사용 가능하고 서비스에 특정하지 않습니다. 정책 예제는 EC2 인스턴스가 볼륨을 연결 또는 분리하도록 허용11: 특정 인스턴스가 다른 AWS 서비스의 리소스를 보도록 허용을 참조하십시오. ec2:SourceInstanceARN 키는 명령문에서 Resource 요소에 대한 ARN을 채우는 변수로 사용할 수 없습니다.

다음 AWS 조건 키는 Amazon EC2에 출시되었고 제한된 수의 추가 서비스에 의해 지원됩니다.

조건 키 키/값 쌍 평가 유형

aws:RequestTag/tag-key

"aws:Request/tag-key":"tag-value"

여기서 tag-keytag-value는 태그 키-값 페어입니다.

String, Null

aws:TagKeys

"aws:TagKeys":"tag-key"

여기에서 tag-key는 태그 키 목록(예: ["A","B"])입니다.

String, Null

Amazon EC2용 예제 정책 명령문은 AWS CLI 또는 AWS SDK 작업을 위한 예제 정책 단원을 참조하십시오.

사용자에게 필요한 권한이 있는지 확인

IAM 정책을 생성한 후에는 사용자에게 필요한 특정 API 작업 및 리소스를 사용할 권한이 제대로 부여되는지를 확인한 후에 정책을 실무에 적용하는 것이 좋습니다.

우선 테스트용으로 IAM 사용자를 생성하고 앞서 생성한 IAM 정책을 연결하여 사용자를 테스트합니다. 그런 다음 테스트 사용자 자격으로 요청을 수행합니다.

리소스를 생성하거나 수정하는 Amazon EC2 작업을 테스트하는 경우 DryRun 파라미터를 사용하여 요청하거나 --dry-run 옵션과 함께 AWS CLI 명령을 실행해야 합니다. 이렇게 하면 호출 시 권한 부여 확인은 완료되지만 작업은 완료되지 않습니다. 예를 들어 인스턴스를 실제로 종료하지 않고 사용자가 특정 인스턴스를 종료할 수 있는지 여부를 확인할 수 있습니다. 테스트 사용자에게 필요한 권한이 있는 경우 요청 시 DryRunOperation이 반환되고, 그렇지 않은 경우 UnauthorizedOperation이 반환됩니다.

정책이 사용자에게 정상적으로 권한을 부여하지 못하거나 권한을 과도하게 부여하는 경우, 원하는 결과가 나올 때까지 정책을 조정하고 다시 테스트할 수 있습니다.

중요

변경된 정책이 전파되어 효력을 발휘하려면 몇 분이 걸릴 수 있습니다. 따라서 정책을 업데이트한 경우 5분간 기다린 후에 테스트하는 것이 좋습니다.

요청 시 권한 부여 확인에 실패하면 진단 정보가 포함된 인코딩 메시지가 반환됩니다. DecodeAuthorizationMessage 작업을 사용하여 메시지를 디코딩할 수 있습니다. 자세한 내용은 AWS Security Token Service API ReferenceDecodeAuthorizationMessageAWS Command Line Interface Referencedecode-authorization-message 단원을 참조하십시오.