메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

Amazon EC2 콘솔 작업을 위한 예제 정책

Amazon EC2 콘솔에서 IAM 정책을 사용하여 특정 리소스를 조회하고 관련 작업을 수행할 권한을 부여할 수 있습니다. 이전 섹션의 예제 정책을 사용할 수 있지만 해당 정책은 AWS CLI 또는 AWS SDK를 통한 요청에 맞게 설계되었습니다. 콘솔에서는 추가적인 API 작업을 통해 해당 기능을 구현하므로 이러한 정책이 예상과 다르게 작동할 수 있습니다. 예를 들어 DescribeVolumes API 작업만 사용할 권한을 갖는 경우 콘솔에서 볼륨을 조회하려고 하면 오류가 발생합니다. 이 섹션에서는 콘솔의 특정 부분을 사용하도록 허용하는 정책을 보여 줍니다.

참고

콘솔에서 작업을 수행하는 데 필요한 API 작업을 파악하려는 경우 AWS CloudTrail 등의 서비스를 사용할 수 있습니다. 자세한 내용은 AWS CloudTrail User Guide을 참조하십시오. 정책에서 특정 리소스를 생성하거나 수정할 권한을 부여하지 않는 경우 콘솔에 진단 정보가 포함된 인코딩 메시지가 표시됩니다. AWS STS의 DecodeAuthorizationMessage API 작업이나 AWS CLI의 decode-authorization-message 명령을 사용하여 메시지를 디코딩할 수 있습니다.

Amazon EC2 콘솔용 정책을 생성하는 방법에 대한 자세한 내용은 AWS 보안 블로그 게시물 Granting Users Permission to Work in the Amazon EC2 Console을 참조하십시오.

1: 읽기 전용 액세스

사용자가 Amazon EC2 콘솔에서 모든 리소스를 조회하도록 허용하려면 다음 예제와 같은 정책을 사용합니다. 1: 읽기 전용 액세스. 다른 명령문에서 해당 권한을 부여하지 않는 경우 이러한 리소스에 대해 작업을 수행하거나 새 리소스를 생성할 수는 없습니다.

a. 인스턴스, AMI 및 스냅샷 조회

리소스 중 일부에 대한 읽기 전용 액세스를 제공할 수도 있습니다. 이렇게 하려면 ec2:Describe API 작업에서 * 와일드카드를 구체적인 리소스별 ec2:Describe 작업으로 대체합니다. 다음 정책은 사용자가 Amazon EC2 콘솔에서 모든 인스턴스, AMI 및 스냅샷을 조회하도록 허용합니다. ec2:DescribeTags 작업에서는 사용자가 퍼블릭 AMI를 조회할 수 있습니다. 콘솔에 퍼블릭 AMI를 표시하려면 태그 지정 정보가 필요하지만 사용자가 프라이빗 AMI만 조회하도록 하려면 이 작업을 제거할 수도 있습니다.

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

참고

현재 Amazon EC2 ec2:Describe* API 작업은 리소스별 권한을 지원하지 않으므로 사용자가 콘솔에서 조회할 수 있는 리소스를 개별적으로 제어할 수는 없습니다. 따라서 위 명령문의 Resource 요소에 * 와일드카드가 필요합니다. 어떠한 Amazon EC2 API 작업에 어떠한 ARN을 사용할 수 있는지에 대한 자세한 내용은 Amazon EC2 API 작업에 지원되는 리소스 수준 권한 단원을 참조하십시오.

b. 인스턴스 및 CloudWatch 측정치 조회

다음 정책은 사용자로 하여금 [Instances] 페이지의 [Monitoring] 탭에 있는 CloudWatch 경보 및 측정치뿐만 아니라 Amazon EC2 콘솔의 인스턴스까지도 조회할 수 있도록 허용합니다. Amazon EC2 콘솔은 CloudWatch API를 이용해 경보 및 측정치를 표시하므로, 반드시 사용자에게 cloudwatch:DescribeAlarmscloudwatch:GetMetricStatistics 작업을 사용할 수 있는 권한을 부여해야 합니다.

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

2: EC2 시작 마법사 사용

Amazon EC2 시작 마법사는 인스턴스 구성 및 시작 옵션을 포함하는 일련의 화면으로 구성됩니다. 사용자가 마법사의 옵션을 사용할 수 있도록 정책에 API 작업 사용 권한이 포함되어야 합니다. 해당 작업 사용 권한이 정책에 포함되지 않으면 마법사의 일부 항목이 제대로 로드되지 않고 사용자가 시작을 완료할 수 없습니다.

a. 기본 시작 마법사 액세스

성공적으로 시작을 완료하려면 사용자에게 ec2:RunInstances API 작업 및 최소한 다음과 같은 API 작업 사용 권한을 부여해야 합니다.

  • ec2:DescribeImages: AMI를 조회하고 선택합니다.

  • ec2:DescribeVPCs: 사용 가능한 네트워크 옵션(EC2-Classic 및 VPC 목록)을 조회합니다. VPC로 시작하는 경우에도 필수 항목입니다.

  • ec2:DescribeSubnets: VPC로 시작하는 경우 해당 VPC에서 사용 가능한 모든 서브넷을 조회합니다.

  • ec2:DescribeSecurityGroups: 마법사에서 보안 그룹 페이지를 조회합니다. 사용자는 기존 보안 그룹을 선택할 수 있습니다.

  • ec2:DescribeKeyPairs 또는 ec2:CreateKeyPair: 기존 키 페어를 선택하거나 새로 생성합니다.

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

정책에 API 작업을 추가하여 다음과 같이 사용자에게 더 많은 옵션을 제공할 수 있습니다.

  • ec2:DescribeAvailabilityZones: EC2-Classic으로 시작하는 경우 특정 가용 영역을 조회하고 선택합니다.

  • ec2:DescribeNetworkInterfaces: VPC로 시작하는 경우 선택한 서브넷의 기존 네트워크 인터페이스를 조회하고 선택합니다.

  • ec2:CreateSecurityGroup: 새 보안 그룹을 생성합니다. 예를 들어 마법사가 제안하는 launch-wizard-x 보안 그룹을 생성합니다. 그러나 이 작업은 보안 그룹을 생성하기만 하며 규칙을 추가하거나 수정하지 않습니다. 인바운드 규칙을 추가하려면 ec2:AuthorizeSecurityGroupIngress API 작업 사용 권한이 부여되어야 합니다. VPC 보안 그룹에 아웃바운드 규칙을 추가하려면 ec2:AuthorizeSecurityGroupEgress API 작업 사용 권한이 부여되어야 합니다. 기존 규칙을 수정 또는 삭제하려면 관련 ec2:RevokeSecurityGroup* API 작업 사용 권한이 부여되어야 합니다.

  • ec2:CreateTags: RunInstances에 의해 생성된 리소스에 태그 지정. 자세한 내용은 태그 지정을 위한 리소스 수준 권한 단원을 참조하십시오. 이 작업을 사용할 권한이 없는 사용자가 시작 마법사의 태그 지정 페이지에서 태그를 지정하려 시도하는 경우, 시작은 실패합니다.

    중요

    ec2:CreateTags 작업 사용 권한을 부여할 때는 신중해야 합니다. 이렇게 하면 사용자가 리소스의 태그를 임의로 변경하여 제한 조건을 무력화할 수 있으므로 ec2:ResourceTag 조건 키로 다른 리소스의 사용을 제한하지 못하게 됩니다.

현재 Amazon EC2 Describe* API 작업은 리소스별 권한을 지원하지 않으므로 사용자가 시작 마법사에서 조회할 수 있는 리소스를 개별적으로 제한할 수는 없습니다. 그러나 ec2:RunInstances API 작업에 리소스별 권한을 적용하여 사용자가 인스턴스를 시작하는 데 사용 가능한 리소스를 제한할 수 있습니다. 사용자가 사용 권한이 없는 옵션을 선택하면 시작에 실패합니다.

b. 특정 인스턴스 유형, 서브넷, 리전에 대한 액세스 제한

다음 정책은 Amazon이 소유한 AMI를 사용하여 m1.small 인스턴스를 시작하되 특정 서브넷(subnet-1a2b3c4d)으로만 시작하도록 허용합니다. 사용자는 sa-east-1 리전에서만 시작할 수 있습니다. 사용자가 다른 리전을 선택하거나 시작 마법사에서 다른 인스턴스 유형, AMI 또는 서브넷을 선택하면 시작에 실패합니다.

첫 번째 명령문은 위 예제와 같이 사용자가 시작 마법사에서 옵션을 조회할 권한을 부여합니다. 두 번째 명령문은 ec2:RunInstances 작업에서 네트워크 인터페이스, 볼륨, 키 페어, 보안 그룹 및 서브넷 리소스를 사용할 권한을 부여합니다. 이 권한은 인스턴스를 VPC로 시작하는 데 필요합니다. ec2:RunInstances 작업 사용에 대한 자세한 내용은 5: 인스턴스 시작(RunInstances) 단원을 참조하십시오. 세 번째, 네 번째 명령문은 각각 인스턴스 및 AMI 리소스 사용 권한을 부여하지만 인스턴스가 m1.small 인스턴스이고 AMI를 Amazon이 소유한 경우로 한정합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs","ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Effect": "Allow", "Action":"ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1:111122223333:network-interface/*", "arn:aws:ec2:sa-east-1:111122223333:volume/*", "arn:aws:ec2:sa-east-1:111122223333:key-pair/*", "arn:aws:ec2:sa-east-1:111122223333:security-group/*", "arn:aws:ec2:sa-east-1:111122223333:subnet/subnet-1a2b3c4d" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1:111122223333:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": "m1.small" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } } ] }

3: 볼륨 작업

다음 정책은 볼륨을 조회 및 생성하고 특정 인스턴스에 볼륨을 연결 및 분리할 권한을 부여합니다.

사용자는 "purpose=test" 태그가 있는 인스턴스에 볼륨을 연결하고 해당 인스턴스에서 볼륨을 분리할 수 있습니다. Amazon EC2 콘솔을 사용하여 볼륨을 연결하려는 경우 사용자에게 ec2:DescribeInstances 작업 사용 권한을 부여하는 것이 좋습니다. 이렇게 하면 [Attach Volume] 대화 상자의 미리 구성된 목록에서 인스턴스를 선택할 수 있습니다. 그러나 이렇게 하면 사용자가 콘솔의 [Instances] 페이지에서 모든 인스턴스를 조회할 수 있으므로 이 작업을 생략할 수 있습니다.

첫 번째 명령문에서 ec2:DescribeVolumeStatusec2:DescribeAvailabilityZones 작업은 볼륨을 콘솔에 올바르게 표시하는 데 필요합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeVolumeStatus", "ec2:DescribeAvailabilityZones", "ec2:CreateVolume", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:region:111122223333:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:region:111122223333:volume/*" } ] }

4: 보안 그룹 작업

a. 보안 그룹 조회와 규칙의 추가 및 삭제

다음 정책은 사용자가 Amazon EC2 콘솔에서 보안 그룹을 조회하고 Department=Test 태그가 있는 기존 보안 그룹에서 인바운드 및 아웃바운드 규칙을 추가 및 제거할 권한을 부여합니다.

참고

EC2-Classic 보안 그룹의 아웃바운드 규칙은 수정할 수 없습니다. 보안 그룹에 대한 자세한 내용은 Linux 인스턴스에 대한 Amazon EC2 보안 그룹을 참조하십시오.

첫 번째 명령문에서 ec2:DescribeTags 작업은 사용자가 콘솔에서 태그를 조회하도록 허용하므로 사용자가 수정 가능한 보안 그룹을 쉽게 식별할 수 있습니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress" ], "Resource": [ "arn:aws:ec2:region:111122223333:security-group/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Department": "Test" } } } ] }

b. “Create Security Group” 대화 상자에서 작업하기

사용자가 Amazon EC2 콘솔에서 [Create Security Group] 대화 상자를 사용하도록 허용하는 정책을 생성할 수 있습니다. 이 대화 상자를 사용하려면 최소한 다음과 같은 API 작업 사용 권한을 부여해야 합니다.

  • ec2:CreateSecurityGroup: 새 보안 그룹을 생성합니다.

  • ec2:DescribeVpcs: [VPC] 목록에서 기존 VPC의 목록을 조회합니다. 이 작업은 EC2-Classic에서 보안 그룹을 만드는 데 필요하지 않습니다.

이 권한이 있으면 사용자가 새 보안 그룹을 생성할 수 있지만 규칙을 추가할 수는 없습니다. [Create Security Group] 대화 상자에서 규칙 관련 작업을 수행하려면 정책에 다음 API 작업을 추가합니다.

  • ec2:AuthorizeSecurityGroupIngress: 인바운드 규칙을 추가합니다.

  • ec2:AuthorizeSecurityGroupEgress: VPC 보안 그룹에 아웃바운드 규칙을 추가합니다.

  • ec2:RevokeSecurityGroupIngress: 기존 인바운드 규칙을 수정하거나 삭제합니다. 이 권한은 사용자가 콘솔에서 [Copy to new] 기능을 사용하도록 허용하려는 경우에 유용합니다. 이 기능은 [Create Security Group] 대화 상자를 열고 선택한 보안 그룹과 같은 규칙을 미리 입력합니다.

  • ec2:RevokeSecurityGroupEgress: VPC 보안 그룹의 아웃바운드 규칙을 수정하거나 삭제합니다. 이 권한은 모든 아웃바운드 트래픽을 허용하는 기본 아웃바운드 규칙을 사용자가 수정 또는 삭제하도록 허용하는 데 유용합니다.

  • ec2:DeleteSecurityGroup: 잘못된 규칙을 저장할 수 없도록 합니다. 콘솔에서 먼저 보안 그룹을 만든 후 지정된 규칙을 추가합니다. 규칙이 잘못된 경우 작업이 실패하고 콘솔이 보안 그룹을 삭제하려고 합니다. 사용자는 [Create Security Group] 대화 상자에 남아 있기 때문에 잘못된 규칙을 수정한 후 보안 그룹을 다시 생성해 볼 수 있습니다. 이 API 작업은 필수적이지는 않지만 해당 사용 권한을 부여하지 않으면 사용자가 잘못된 규칙이 포함된 보안 그룹을 생성하려고 할 때 규칙이 없는 보안 그룹이 생성되며, 사용자가 이후에 규칙을 추가해야 합니다.

현재 ec2:CreateSecurityGroup API 작업은 리소스 수준 권한을 지원하지 않지만 ec2:AuthorizeSecurityGroupIngressec2:AuthorizeSecurityGroupEgress 작업에 리소스 수준 권한을 적용하여 사용자의 규칙 생성 방법을 제어할 수 있습니다.

다음 정책은 [Create Security Group] 대화 상자를 사용하고 특정 VPC(vpc-1a2b3c4d)에 연결된 보안 그룹에 인바운드 및 아웃바운드 규칙을 생성할 권한을 부여합니다. 사용자는 EC2-Classic 또는 다른 VPC의 보안 그룹을 생성할 수 있지만 규칙을 추가할 수는 없습니다. 마찬가지로 VPC vpc-1a2b3c4d에 연결되지 않은 기존 보안 그룹에는 규칙을 추가할 수는 없습니다. 또한 콘솔에서 모든 보안 그룹을 조회할 권한이 부여됩니다. 따라서 사용자가 인바운드 규칙을 추가할 수 있는 보안 그룹을 쉽게 식별할 수 있습니다. 또한 이 정책은 VPC vpc-1a2b3c4d에 연결된 보안 그룹을 삭제할 권한을 부여합니다.

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:CreateSecurityGroup", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DeleteSecurityGroup", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress" ], "Resource": "arn:aws:ec2:region:111122223333:security-group/*", "Condition":{ "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:region:111122223333:vpc/vpc-1a2b3c4d" } } } ] }

5: 탄력적 IP 주소 작업

사용자가 Amazon EC2 콘솔에서 탄력적 IP 주소를 볼 수 있도록 하려면 사용자에게 ec2:DescribeAddresses 작업을 사용할 수 있는 권한을 부여해야 합니다.

사용자에게 탄력적 IP 주소 관련 작업을 허용하려면 정책에 다음 작업을 추가합니다.

  • ec2:AllocateAddress: VPC 또는 EC2-Classic에서 사용할 주소를 할당합니다.

  • ec2:ReleaseAddress: 탄력적 IP 주소를 해제합니다.

  • ec2:AssociateAddress: 인스턴스 또는 네트워크 인터페이스에 탄력적 IP 주소를 연결합니다.

  • ec2:DescribeNetworkInterfacesec2:DescribeInstances: [Associate address] 화면에서 작업합니다. 탄력적 IP 주소를 연결할 수 있는 네트워크 인터페이스나 가용 인스턴스가 화면에 표시됩니다. EC2-Classic 인스턴스의 경우, 사용자는 ec2:DescribeInstances를 사용할 권한만 필요합니다.

  • ec2:DisassociateAddress: 인스턴스 또는 네트워크 인터페이스에서 탄력적 IP 주소를 분리합니다.

다음 정책을 통해 사용자는 탄력적 IP 주소를 확인하고 인스턴스에 할당, 연결할 수 있습니다. 사용자는 탄력적 IP 주소를 네트워크 인터페이스에 연결하거나 탄력적 IP 주소 연결을 끊거나 릴리스할 수 없습니다.

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

6: 예약 인스턴스 사용

다음 정책을 IAM 사용자에 연결할 수 있습니다. 그렇게 하면 사용자가 계정의 예약 인스턴스를 보고 수정할 수 있을 뿐만 아니라 AWS Management Console에서 새 예약 인스턴스를 구매할 수 있는 액세스 권한을 갖게 됩니다.

이 정책은 사용자들이 계정에서 온디맨드 인스턴스뿐만 아니라 모든 예약 인스턴스를 볼 수 있도록 허용합니다. 개별 예약 인스턴스에 대해서는 리소스 수준 권한을 설정할 수 없습니다.

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

ec2:DescribeAvailabilityZones 작업은 Amazon EC2 콘솔이 예약 인스턴스를 구매할 수 있는 가용 영역에 대한 정보를 표시하도록 하는 데 필수적입니다. ec2:DescribeInstances 작업은 필수적이지는 않지만 사용자가 계정에서 인스턴스를 보고, 정확한 사양에 맞추기 위해 예약을 구매할 수 있도록 해줍니다.

API 작업을 조정해 사용자 액세스를 제한할 수 있습니다. 예를 들어 ec2:DescribeInstancesec2:DescribeAvailabilityZones를 제거하면 사용자가 읽기 전용 액세스 권한만을 갖게 됩니다.