메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

AWS CLI 또는 AWS SDK 작업을 위한 예제 정책

다음 예제는 IAM 사용자가 갖는 Amazon EC2 관련 권한을 제어하는 데 사용할 수 있는 정책 명령문을 보여 줍니다. 이러한 정책은 AWS CLI 또는 AWS SDK를 통한 요청에 맞게 설계되었습니다. Amazon EC2 콘솔 작업과 관련된 예제 정책은 Amazon EC2 콘솔 작업을 위한 예제 정책 단원을 참조하십시오. Amazon VPC별 IAM 정책의 예제는 Amazon VPC 리소스에 대한 액세스 제어 단원을 참조하십시오.

1: 읽기 전용 액세스

다음 정책은 이름이 Describe로 시작되는 모든 Amazon EC2 API 작업을 사용할 권한을 부여합니다. Resource 요소에 와일드카드가 사용되었으므로 사용자가 이러한 API 작업에 모든 리소스를 지정할 수 있습니다. API 작업이 리소스 수준 권한을 지원하지 않는 경우에도 * 와일드카드가 필요합니다. 어떠한 Amazon EC2 API 작업에 어떠한 ARN을 사용할 수 있는지에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오.

다른 명령문으로 해당 권한을 부여하지 않는 경우 리소스에 대해 작업을 수행할 권한은 부여되지 않습니다. 해당 API 작업을 사용할 권한은 기본적으로 거부됩니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }

2: 특정 리전으로 액세스 제한

다음 정책은 사용자에게 EU(프랑크푸르트) 리전에서만 Amazon EC2 API 작업을 모두 사용할 수 있는 권한을 부여합니다. 사용자는 다른 리전에서 리소스를 확인, 생성, 수정 또는 삭제할 수 없습니다.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*", "Condition": { "StringEquals": { "ec2:Region": "eu-central-1" } } } ] }

3: 인스턴스 작업

모든 인스턴스를 설명, 실행, 중지, 시작 및 종료

다음 정책은 Action 요소에 지정된 API 작업을 사용할 권한을 부여합니다. Resource 요소에 * 와일드카드가 사용되었으므로 사용자가 이러한 API 작업에 모든 리소스를 지정할 수 있습니다. API 작업이 리소스 수준 권한을 지원하지 않는 경우에도 * 와일드카드가 필요합니다. 어떠한 Amazon EC2 API 작업에 어떠한 ARN을 사용할 수 있는지에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오.

다른 명령문으로 해당 권한을 부여하지 않는 경우 다른 API 작업을 사용할 권한은 부여되지 않습니다. 해당 API 작업을 사용할 권한은 기본적으로 거부됩니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs", "ec2:DescribeSecurityGroups", "ec2:DescribeAvailabilityZones", "ec2:RunInstances", "ec2:TerminateInstances", "ec2:StopInstances", "ec2:StartInstances" ], "Resource": "*" } ] }

모든 인스턴스를 설명할 수 있지만 특정 인스턴스만 중지, 시작 및 종료

다음 정책은 모든 인스턴스를 설명하고, 인스턴스 i-1234567890abcdef0 및 i-0598c7d356eba48d7만 시작 및 중지하고, 리소스 태그가 "purpose=test"인 미국 동부(버지니아 북부) 지역의 인스턴스(us-east-1)만 종료하도록 허용합니다.

첫 번째 명령문의 Resource 요소에 * 와일드카드가 사용되었으므로 사용자가 작업에 모든 리소스를 지정할 수 있습니다. 여기에서는 모든 인스턴스를 나열할 수 있습니다. API 작업(여기에서는 ec2:DescribeInstances)이 리소스 수준 권한을 지원하지 않는 경우에도 * 와일드카드가 필요합니다. 어떠한 Amazon EC2 API 작업에 어떠한 ARN을 사용할 수 있는지에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오.

두 번째 명령문의 StopInstancesStartInstances 작업에는 리소스 수준 권한이 사용되었습니다. Resource 요소의 ARN에 의해 특정 인스턴스가 지정되었습니다.

세 번째 명령문은 사용자가 지정된 AWS 계정에 속하며 "purpose=test" 태그를 갖는 미국 동부(버지니아 북부) 지역의 모든 인스턴스(us-east-1)를 종료하도록 허용합니다. Condition 요소는 정책 명령문 적용 시에 평가됩니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:StopInstances", "ec2:StartInstances" ], "Resource": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0", "arn:aws:ec2:us-east-1:123456789012:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } } ] }

4: 볼륨 작업

볼륨 연결 및 연결 해제

API 작업의 호출자가 여러 리소스를 지정해야 하는 경우 사용자가 필요한 모든 리소스에 액세스하도록 허용하는 정책 명령문을 생성해야 합니다. 이러한 리소스가 하나 이상 포함된 Condition 요소를 사용해야 하는 경우 이 예제와 같이 여러 명령문을 생성해야 합니다.

다음 정책은 "volume_user=iam-user-name" 태그가 있는 볼륨을 "department=dev" 태그가 있는 인스턴스에 연결하고 해당 볼륨을 해당 인스턴스에서 분리하도록 허용합니다. IAM 그룹에 이 정책을 연결하면 aws:username 정책 변수가 그룹의 각 IAM 사용자에게 자신의 IAM 사용자 이름을 값으로 하는 volume_user라는 태그가 있는 인스턴스에 볼륨을 연결하거나 분리할 권한을 부여합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:ResourceTag/volume_user": "${aws:username}" } } } ] }

볼륨 생성

다음 정책은 사용자가 CreateVolume API 작업을 사용하는 것을 허용합니다. 사용자는 볼륨이 암호화되고 볼륨 크기가 20GB 미만인 경우에만 볼륨을 생성할 수 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "NumericLessThan": { "ec2:VolumeSize" : "20" }, "Bool":{ "ec2:Encrypted" : "true" } } } ] }

태그를 사용하여 볼륨 생성

다음 정책에는 사용자가 태그 costcenter=115stack=prod를 사용하여 생성하는 볼륨에 태그를 지정해야 하는 aws:RequestTag 조건 키가 포함됩니다. aws:TagKeys 조건 키는 ForAllValues 변경자를 사용하여 요청에서 키 costcenterstack만 허용됨을 표시합니다(다른 어떤 태그도 지정할 수 없습니다). 사용자가 이 특정 키들을 전달하지 않거나 태그를 전혀 지정하지 않으면 요청은 실패합니다.

태그를 적용하는 리소스 생성 작업의 경우, 사용자에게 CreateTags 작업을 사용할 권한도 있어야 합니다. 두 번째 문은 ec2:CreateAction 조건 키를 사용하여 사용자가 CreateVolume의 컨텍스트에서만 태그를 생성하도록 허용합니다. 사용자는 기존의 볼륨이나 다른 어떤 리소스에도 태그를 지정할 수 없습니다. 자세한 내용은 태그 지정을 위한 리소스 수준 권한 단원을 참조하십시오.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateTaggedVolumes", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": "115", "aws:RequestTag/stack": "prod" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["costcenter","stack"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }

다음 정책은 사용자가 태그를 지정하지 않고 볼륨을 생성하는 것을 허용합니다. CreateTags 작업은 CreateVolume 요청에서 태그가 지정되는 경우에만 평가됩니다. 사용자가 태그를 지정하는 경우, 태그는 purpose=test여야 합니다. 다른 어떤 태그도 요청에서 허용되지 않습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:1234567890:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "CreateVolume" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

5: 인스턴스 시작(RunInstances)

RunInstances API 작업은 하나 이상의 인스턴스를 시작합니다. RunInstances는 AMI를 입력 받아 인스턴스를 생성하며, 사용자는 요청에서 키 페어와 보안 그룹을 지정할 수 있습니다. EC2-VPC로 시작하는 경우 서브넷을 입력 받아 네트워크 인터페이스를 생성합니다. Amazon EBS 지원 AMI에서 시작하면 볼륨이 생성됩니다. 따라서 사용자에게 해당 Amazon EC2 리소스를 사용할 권한이 있어야 합니다. 또한 호출자는 RunInstances에 인스턴스 유형, 서브넷 등의 선택적 파라미터를 전달하여 인스턴스를 구성할 수 있습니다. 사용자가 선택적 파라미터를 반드시 지정하도록 요구하거나 파라미터에 특정 값을 사용할 수 없도록 제한하는 정책 명령문을 생성할 수 있습니다. 이 섹션의 예제에서는 사용자가 시작할 수 있는 인스턴스의 구성을 제어하는 몇 가지 방법을 보여 줍니다.

기본적으로는 사용자에게 결과 인스턴스를 설명, 시작, 중지 또는 종료할 권한이 없습니다. 사용자에게 결과 인스턴스를 관리할 권한을 부여하는 방법 중 하나는 각 인스턴스에 대한 특정 태그를 생성하고 해당 태그를 갖는 인스턴스를 관리하도록 허용하는 명령문을 생성하는 것입니다. 자세한 내용은 3: 인스턴스 작업 단원을 참조하십시오.

AMI

다음 정책은 지정된 태그("department=dev")가 연결된 AMI만 사용하여 인스턴스를 시작하도록 허용합니다. 첫 번째 명령문의 Condition 요소에서 사용자가 이 태그를 갖는 AMI를 지정하도록 요구하므로 다른 AMI를 사용하여 인스턴스를 시작할 수 없습니다. 또한 정책에서 서브넷 및 네트워크 인터페이스 리소스에 대한 권한을 부여하지 않으므로 서브넷으로 시작할 수도 없습니다. 그러나 EC2-Classic으로 시작할 수는 있습니다. 두 번째 명령문에서는 와일드카드를 사용하여 인스턴스 리소스 생성을 허용하고, 사용자가 키 페어 project_keypair 및 보안 그룹 sg-1a2b3c4d를 지정하도록 요구합니다. 키 페어 없이도 인스턴스를 시작할 수는 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/project_keypair", "arn:aws:ec2:region:account:security-group/sg-1a2b3c4d" ] } ] }

또는 다음 정책으로 사용자가 지정된 AMI(ami-9e1670f7ami-45cf5c3c)만 사용하여 인스턴스를 시작하도록 허용할 수 있습니다. 다른 명령문에서 해당 권한을 부여하지 않는 경우 다른 AMI를 사용하여 인스턴스를 시작할 수 없으며, 인스턴스를 서브넷으로 시작할 수도 없습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-9e1670f7", "arn:aws:ec2:region::image/ami-45cf5c3c", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

또는 다음 정책으로 Amazon이 소유한 모든 AMI에서 인스턴스를 시작하도록 허용할 수 있습니다. 첫 번째 명령문의 Condition 요소는 ec2:Owneramazon인지 여부를 테스트합니다. 다른 명령문에서 해당 권한을 부여하지 않는 경우 다른 AMI를 사용하여 인스턴스를 시작할 수 없습니다. 인스턴스를 서브넷으로 시작할 수는 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

인스턴스 유형

다음 정책은 사용자가 t2.microt2.small 인스턴스 유형만 사용하여 인스턴스를 시작하도록 허용하므로 비용 통제에 도움이 됩니다. 첫 번째 명령문의 Condition 요소에서 ec2:InstanceTypet2.micro 또는 t2.small인지 여부를 테스트하므로 더욱 큰 인스턴스는 시작할 수 없습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

또는 t2.microt2.small 인스턴스 유형을 제외한 모든 인스턴스를 시작하기 위한 사용자 권한을 거부하는 정책을 생성할 수 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringNotEquals": { "ec2:InstanceType": ["t2.micro", "t2.small"] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

서브넷

다음 정책은 사용자가 지정된 서브넷(subnet-12345678)만 사용하여 인스턴스를 시작하도록 허용합니다. 다른 명령문에서 해당 권한을 부여하지 않는 경우 그룹에서 다른 서브넷으로 인스턴스를 시작할 수 없습니다. EC2-Classic으로 인스턴스를 시작할 수는 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:subnet/subnet-12345678", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

또는 다른 서브넷으로 인스턴스를 시작할 권한을 거부하는 정책을 생성할 수 있습니다. 명령문에서 subnet-12345678 서브넷이 지정된 경우를 제외하고 네트워크 인터페이스를 생성할 권한을 거부하면 됩니다. 이러한 거부는 다른 서브넷으로 인스턴스를 시작하도록 허용할 목적으로 생성된 다른 정책을 모두 무시합니다. EC2-Classic으로 인스턴스를 시작할 수는 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:network-interface/*" ], "Condition": { "ArnNotEquals": { "ec2:Subnet": "arn:aws:ec2:region:account:subnet/subnet-12345678" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

EBS 볼륨

다음 정책은 인스턴스의 EBS 볼륨이 암호화된 경우에만 사용자가 인스턴스를 시작하는 것을 허용합니다. 사용자는 암호화된 스냅샷을 사용하여 생성된 AMI에서 인스턴스를 시작하여 루트 볼륨이 암호화되도록 해야 합니다. 시작 도중 사용자가 인스턴스에 연결하는 추가적 볼륨도 암호화되어야 합니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Bool": { "ec2:Encrypted": "true" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:security-group/*" ] } ] }

태그 적용

다음 정책은 사용자가 인스턴스를 시작하고 생성 중에 인스턴스에 태그를 지정하는 것을 허용합니다. 태그를 적용하는 리소스 생성 작업의 경우, 사용자에게 CreateTags 작업을 사용할 권한이 있어야 합니다. 두 번째 문은 ec2:CreateAction 조건 키를 사용하여 사용자가 RunInstances의 컨텍스트에 한해 인스턴스의 태그만을 생성하는 것을 허용합니다. 사용자는 기존의 리소스에 태그를 지정할 수 없으며, RunInstances 요청을 사용하여 볼륨에 태그를 지정할 수 없습니다.

자세한 내용은 태그 지정을 위한 리소스 수준 권한 단원을 참조하십시오.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

다음 정책에는 태그 environment=productionpurpose=webserver를 사용하여 RunInstances에 의해 생성되는 인스턴스와 볼륨에 사용자가 태그를 지정해야 하는 aws:RequestTag 조건 키가 포함됩니다. aws:TagKeys 조건 키는 ForAllValues 변경자를 사용하여 요청에서 키 environmentpurpose만 허용됨을 표시합니다(다른 어떤 태그도 지정할 수 없습니다). 요청에서 태그가 지정되지 않으면 요청이 실패합니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" , "aws:RequestTag/purpose": "webserver" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","purpose"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

다음 정책은 aws:TagKeys 조건에서 ForAnyValue 변경자를 사용하여 요청에서 적어도 하나의 태그가 지정되어야 하고 태그에 키 environment 또는 webserver가 포함되어야 함을 표시합니다. 태그는 인스턴스와 볼륨에 모두 적용되어야 합니다. 요청에서 어떤 태그 값도 지정할 수 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region::image/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*", "arn:aws:ec2:region:account:security-group/*", "arn:aws:ec2:region:account:key-pair/*" ] }, { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:instance/*" ], "Condition": { "ForAnyValue:StringEquals": { "aws:TagKeys": ["environment","webserver"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "RunInstances" } } } ] }

다음 정책에서는 요청에서 태그를 지정할 필요가 없지만 지정하는 경우, 태그는 purpose=test여야 합니다. 다른 어떤 태그도 허용되지 않습니다. 사용자는 RunInstances 요청에서 태그 지정 가능한 어떤 리소스에도 태그를 적용할 수 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/purpose": "test", "ec2:CreateAction" : "RunInstances" }, "ForAllValues:StringEquals": { "aws:TagKeys": "purpose" } } } ] }

Elastic GPU 연결

다음 정책에서 사용자는 인스턴스를 시작하고 Elastic GPU를 지정하여 인스턴스에 연결합니다. 사용자는 모든 리전에서 인스턴스를 시작할 수 있지만 us-east-2 리전에서 시작하는 동안 Elastic GPU만 연결할 수 있습니다.

ec2:ElasticGpuType 조건 키는 ForAnyValue 한정자를 사용하여 요청에서 Elastic GPU 유형 eg1.mediumeg1.large만 허용됨을 표시합니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:RunInstances" ], "Resource": [ "arn:aws:ec2:*:account:elastic-gpu/*" ], "Condition": { "StringEquals": { "ec2:Region": "us-east-2" }, "ForAnyValue:StringLike": { "ec2:ElasticGpuType": [ "eg1.medium", "eg1.large" ] } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:account:network-interface/*", "arn:aws:ec2:*:account:instance/*", "arn:aws:ec2:*:account:subnet/*", "arn:aws:ec2:*:account:volume/*", "arn:aws:ec2:*:account:key-pair/*", "arn:aws:ec2:*:account:security-group/*" ] } ] }

VPC에서 ClassicLink를 활성화한 후 VPC에 EC2-Classic 인스턴스를 링크할 수 있습니다. 또한 ClassicLink 가능 VPC 및 VPC에 링크된 모든 EC2-Classic 인스턴스를 확인할 수 있습니다. ec2:EnableVpcClassicLink, ec2:DisableVpcClassicLink, ec2:AttachClassicLinkVpcec2:DetachClassicLinkVpc 작업에 대한 리소스 수준 권한을 포함하는 정책을 생성하여 사용자가 해당 작업을 사용할 수 있는지 여부를 제어할 수 있습니다. ec2:Describe* 작업에는 리소스 수준 권한이 지원되지 않습니다.

다음 정책은 ClassicLink 가능 VPC 및 링크된 EC2-Classic 인스턴스를 확인하고, VPC에서 ClassicLink를 활성화 및 비활성화하고, ClassicLink 가능 VPC에서 인스턴스를 링크 및 링크 해제할 권한을 부여합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeClassicLinkInstances", "ec2:DescribeVpcClassicLink", "ec2:EnableVpcClassicLink", "ec2:DisableVpcClassicLink", "ec2:AttachClassicLinkVpc", "ec2:DetachClassicLinkVpc" ], "Resource": "*" } ] }

다음 정책은 'purpose=classiclink' 태그가 있는 VPC에서 ClassicLink를 활성화 및 비활성화하도록 허용합니다. 다른 VPC에서는 ClassicLink를 활성화하거나 비활성화할 수 없습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*VpcClassicLink", "Resource": "arn:aws:ec2:region:account:vpc/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose":"classiclink" } } } ] }

다음 정책은 인스턴스가 m3.large 유형일 때만 VPC에 링크할 권한을 부여합니다. 두 번째 명령문에서는 인스턴스를 VPC에 링크하는 데 필요한 VPC 및 보안 그룹 리소스 사용을 허용합니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:InstanceType":"m3.large" } } }, { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:vpc/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

다음 정책은 인스턴스를 특정 VPC(vpc-1a2b3c4d)에만 링크하고 VPC의 특정 보안 그룹(sg-1122aabbsg-aabb2233)만 인스턴스에 연결할 권한을 부여합니다. 사용자는 다른 VPC에는 인스턴스를 링크할 수 없고, 요청 시 인스턴스에 연결할 다른 VPC 보안 그룹을 지정할 수 없습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:vpc/vpc-1a2b3c4d", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:security-group/sg-1122aabb", "arn:aws:ec2:region:account:security-group/sg-aabb2233" ] } ] }

다음 정책은 인스턴스에 "unlink=true" 태그가 있을 때만 VPC에서 링크된 EC2-Classic 인스턴스의 링크를 해제할 권한을 부여합니다. 두 번째 명령문에서는 VPC에서 인스턴스의 링크를 해제하는 데 필요한 VPC 리소스를 사용할 권한을 부여합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:DetachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/unlink":"true" } } }, { "Effect": "Allow", "Action": "ec2:DetachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:vpc/*" ] } ] }

7. 예약 인스턴스 사용

다음 정책에서는 계정의 예약 인스턴스에 대한 보기, 수정, 구매 권한을 사용자에게 부여합니다.

개별 예약 인스턴스에 대해서는 리소스 수준 권한을 설정할 수 없습니다. 이 정책은 사용자들이 계정의 모든 예약 인스턴스에 액세스할 수 있음을 뜻합니다.

Resource 요소에 사용되는 * 와일드카드는 사용자가 그 작업을 통해 모든 리소스를 지정할 수 있음을 나타냅니다. 이 경우 사용자는 계정의 모든 예약 인스턴스를 나열하고 수정할 수 있습니다. 계정 자격 증명을 사용해 예약 인스턴스를 구매할 수도 있습니다. API 작업이 리소스 수준 권한을 지원하지 않는 경우에도 * 와일드카드가 필요합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:PurchaseReservedInstancesOffering", "ec2:DescribeAvailabilityZones", "ec2:DescribeReservedInstancesOfferings" ], "Resource": "*" } ] }

사용자에게 계정의 예약 인스턴스를 보고 수정할 수 있도록 허용하되 새 예약 인스턴스를 구매할 수는 없도록 하려면

Copy
{ ""Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeReservedInstances", "ec2:ModifyReservedInstances", "ec2:DescribeAvailabilityZones" ], "Resource": "*" } ] }

8. 리소스에 태그 지정

다음 정책은 태그에 키 environment 및 값 production이 포함된 경우에만 사용자가 CreateTags 작업을 사용하여 인스턴스에 태그를 적용하는 것을 허용합니다. ForAllValues 변경자는 aws:TagKeys 조건 키와 함께 사용되어 요청에서 키 environment만 허용됨을 표시합니다(다른 어떤 태그도 허용되지 않습니다). 사용자는 다른 어떤 리소스 유형에도 태그를 지정할 수 없습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:RequestTag/environment": "production" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment" ] } } } ] }

다음 정책은 키가 owner이고 값이 IAM username인 태그를 이미 가진 태그 지정 가능한 리소스에 태그를 지정하는 것을 허용합니다. 또한 사용자는 요청에서 키가 environment이고 값이 test 또는 prod인 태그를 지정해야 합니다. 사용자는 요청에서 추가 태그를 지정할 수 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": ["test","prod"], "ec2:ResourceTag/owner": "${aws:username}" } } } ] }

사용자가 리소스의 특정 태그를 삭제하는 것을 허용하는 IAM 정책을 만들 수 있습니다. 예를 들어 요청에서 지정된 태그 키가 environment 또는 cost-center인 경우, 다음 정책은 사용자가 볼륨의 태그를 삭제하는 것을 허용합니다. 태그에는 어떤 값도 지정할 수 있지만 태그 키는 지정된 키 중 하나와 일치해야 합니다.

참고

리소스를 삭제하면 리소스에 지정되어 있는 모든 태그도 함께 삭제됩니다. 사용자는 태그가 지정된 리소스를 삭제할 때 ec2:DeleteTags 작업 권한이 필요하지 않습니다. 삭제 작업을 위한 권한만 있으면 됩니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DeleteTags", "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["environment","cost-center"] } } } ] }

이 정책은 키가 owner이고 값이 IAM username인 키로 리소스에 태그가 지정된 경우에 한해 어떤 리소스에서든 environment=prod 태그만을 삭제하는 것을 허용합니다. 사용자는 리소스의 다른 어떤 태그도 삭제할 수 없습니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DeleteTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "prod", "ec2:ResourceTag/owner": "${aws:username}" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["environment"] } } } ] }

9: IAM 역할 작업

다음 정책을 통해 사용자는 department=test 태그가 있는 인스턴스에 IAM 역할을 연결, 교체 및 분리할 수 있습니다. IAM 역할을 교체하거나 분리하려면 연결 ID가 필요하기 때문에 정책은 사용자에게 ec2:DescribeIamInstanceProfileAssociations 작업을 사용할 수 있는 권한도 부여합니다.

IAM 사용자가 인스턴스에 역할을 전달하기 위해서는 iam:PassRole 작업을 사용할 수 있는 권한이 있어야 합니다.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:DisassociateIamInstanceProfile" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

다음 정책을 통해 사용자는 모든 인스턴스에 IAM 역할을 연결하거나 교체할 수 있습니다. 사용자는 이름이 TestRole-로 시작하는 IAM 역할만 연결하거나 교체할 수 있습니다. iam:PassRole 작업의 경우, 인스턴스 프로파일이 아닌 IAM 역할의 이름을 지정하십시오(이름이 다른 경우). 자세한 내용은 인스턴스 프로파일 단원을 참조하십시오.

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account:role/TestRole-*" } ] }