정책 구조 - Amazon Elastic Compute Cloud

정책 구조

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

정책 구문

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

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

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

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

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

  • 리소스: 작업의 영향을 받는 리소스입니다. 일부 Amazon EC2 API 작업의 경우 작업이 생성하거나 수정할 수 있는 리소스를 정책에 구체적으로 포함할 수 있습니다. Amazon 리소스 이름(ARN)을 사용하거나 명령문이 모든 리소스에 적용됨을 표시하는 와일드카드(*)를 사용하여 리소스를 지정합니다. 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 섹션을 참조하세요.

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

정책에 대한 자세한 내용은 IAM 사용 설명서IAM JSON 정책 참조를 참조하세요. 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 Describe* API 작업은 리소스 수준 권한을 지원하지 않습니다. Amazon EC2용 리소스 수준 권한에 대한 자세한 내용은 Amazon EC2에 대한 IAM 정책 섹션을 참조하세요.

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

"Action": "ec2:*"

Amazon EC2 작업 목록을 보려면 서비스 권한 부여 참조에서 Amazon EC2에서 정의한 작업을 참조하세요.

Amazon EC2 API 작업에 지원되는 리소스 수준 권한

리소스 수준 권한이란 사용자가 작업을 수행할 수 있는 리소스를 지정하는 기능을 말합니다. Amazon EC2는 리소스 수준 권한을 부분적으로 지원합니다. 즉, 필요 조건을 지정하거나 사용 가능한 특정 리소스를 지정하여 사용자가 특정 Amazon EC2 작업을 사용할 수 있는지 여부를 제어할 수 있습니다. 예를 들어 사용자에게 인스턴스 시작 권한을 부여하면서 특정 유형 또는 특정 AMI만 사용하도록 제한할 수 있습니다.

IAM 정책 설명에서 리소스를 지정하려면 Amazon 리소스 이름(ARN)을 사용합니다. ARN 값을 지정하는 방법에 대한 자세한 정보는 Amazon EC2의 Amazon 리소스 이름(ARN) 섹션을 참조하세요. API 작업이 개별 ARN을 지원하지 않는 경우 와일드카드(*)를 사용하여 모든 리소스가 작업의 영향을 받을 수 있도록 지정해야 합니다.

리소스 수준 권한을 지원하는 Amazon EC2 API 작업과, 정책에서 사용할 수 있는 ARN 및 조건 키를 식별하는 테이블을 보려면 Amazon EC2에 사용되는 작업, 리소스 및 조건 키를 참조하세요.

Amazon EC2 API 작업에 사용하는 IAM 정책에는 태그 기반의 리소스 수준 권한을 적용할 수 있습니다. 이를 통해 사용자가 생성, 수정 또는 사용할 수 있는 리소스를 더욱 정확하게 제어할 수 있습니다. 자세한 내용은 생성 시 리소스 태깅에 대한 권한 부여 섹션을 참조하세요.

Amazon EC2의 Amazon 리소스 이름(ARN)

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

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

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

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

region

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

account-id

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/*"

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

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

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

"Resource": "*"

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

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

Amazon EC2 리소스에 대한 ARN 목록은 Amazon EC2에서 정의한 리소스 유형을 참조하세요.

Amazon EC2에 사용되는 조건 키

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

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

IAM 정책에 조건 키를 사용하려면 Condition 명령문을 사용합니다. 예를 들어 다음 정책은 사용자에게 임의의 보안 그룹에 대한 인바운드 및 아웃바운드 규칙을 추가하고 제거하는 권한을 부여합니다. ec2:Vpc 조건 키를 사용하여 특정 VPC의 보안 그룹에서만 이러한 작업을 수행할 수 있도록 지정합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress"], "Resource": "arn:aws:ec2:region:account:security-group/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-11223344556677889" } } } ] }

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

조건을 지정할 때 자리표시자를 사용할 수도 있습니다. 자세한 내용은 IAM 사용 설명서IAM 정책 요소: 변수 및 태그 섹션을 참조하세요.

중요

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

모든 Amazon EC2 작업은 aws:RequestedRegionec2:Region 조건 키를 지원합니다. 자세한 내용은 예: 특정 리전에 대한 액세스 제한 단원을 참조하십시오.

ec2:SourceInstanceARN 조건 키

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

Amazon EC2용 예제 정책 명령문은 AWS CLI 또는 AWS SDK 작업을 위한 정책 예제 섹션을 참조하세요.

ec2:Attribute 조건 키

ec2:Attribute 조건 키는 리소스의 속성으로 액세스를 필터링하는 조건에 사용할 수 있습니다. 조건 키는 문자열 또는 정수와 같은 기본 데이터 유형의 속성만 지원하거나 ModifyImageAttribute API 작업의 Description 또는 ImdsSupport 객체와 같이 Value 속성만 있는 복합 AttributeValue 개체를 지원합니다.

중요

조건 키는 ModifyImageAttribute API 작업의 LaunchPermission 객체와 같이 여러 속성을 가진 복합 객체에 사용할 수 없습니다.

예를 들어 다음 정책은 ec2:Attribute/Description 조건 키를 사용하여 ModifyImageAttribute API 작업의 복잡한 Description 객체에 의한 액세스를 필터링합니다. 조건 키는 이미지의 설명을 Production 또는 Development로 수정하는 요청만 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute/Description": [ "Production", "Development" ] } } } ] }

다음 예제 정책은 ec2:Attribute 조건 키를 사용하여 ModifyImageAttribute API 작업의 기본 Attribute 속성으로 액세스를 필터링합니다. 조건 키는 이미지 설명을 수정하려는 모든 요청을 거부합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ec2:ModifyImageAttribute", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { "ec2:Attribute": "Description" } } } ] }

ec2:ResourceID 조건 키

지정된 API 작업과 함께 다음 ec2:ResourceID 조건 키를 사용하는 경우 조건 키 값은 API 작업에 의해 생성되는 결과 리소스를 지정하는 데 사용됩니다. ec2:ResourceID 조건 키는 API 요청에 지정된 소스 리소스를 지정하는 데 사용할 수 없습니다. 지정된 API와 함께 다음 ec2:ResourceID 조건 키 중 하나를 사용하는 경우 항상 와일드카드(*)를 지정해야 합니다. 다른 값을 지정하는 경우 조건은 런타임 중에 항상 *(으)로 해석됩니다. 예를 들어 CopyImage API와 함께 ec2:ImageId 조건 키를 사용하려면 다음과 같이 조건 키를 지정해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-*", "Condition": { "StringEquals": { ec2:ImageID": "*" } } } ] }
조건 키 API 작업
ec2:DhcpOptionsID
  • CreateDhcpOptions

ec2:ImageID
  • CopyImage

  • CreateImage

  • ImportImage

  • RegisterImage

ec2:InstanceID
  • RunInstances

  • ImportInstance

ec2:InternetGatewayID
  • CreateInternetGateway

ec2:NetworkAclID
  • CreateNetworkAcl

ec2:NetworkInterfaceID
  • CreateNetworkInterface

ec2:PlacementGroupName
  • CreatePlacementGroup

ec2:RouteTableID
  • CreateRouteTable

ec2:SecurityGroupID
  • CreateSecurityGroup

ec2:SnapshotID
  • CopySnapshot

  • CreateSnapshot

  • CreateSnapshots

  • ImportSnapshots

ec2:SubnetID
  • CreateSubnet

ec2:VolumeID
  • CreateVolume

  • ImportVolume

ec2:VpcID
  • CreateVpc

ec2:VpcPeeringConnectionID
  • CreateVpcPeeringConnection

이러한 API 작업에는 ec2:ResourceID 조건 키를 사용하지 않는 것이 좋습니다. 대신 특정 리소스 ID를 기준으로 액세스를 필터링해야 하는 경우 다음과 같이 Resource 정책 요소를 사용하여 필터링하는 것이 좋습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CopyImage", "Resource": "arn:aws:ec2:us-east-1::image/ami-01234567890abcdef" } ] }

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

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

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

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

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

중요

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

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