Amazon Virtual Private Cloud
사용 설명서

Amazon VPC 리소스에 대한 액세스 제어

보안 자격 증명은 AWS의 서비스에서 사용자를 식별하고 Amazon VPC 리소스와 같은 AWS 리소스의 무제한 사용을 허가하는 데 사용됩니다. AWS Identity and Access Management(IAM)를 사용하면 보안 자격 증명을 공유하지 않고도 다른 사용자, 서비스 및 애플리케이션에 Amazon VPC 리소스 사용을 허용할 수 있습니다. 특정 Amazon EC2 API 작업을 사용하는 사용자 권한을 부여하여 리소스의 전체 사용 또는 제한적 사용을 허용할지 선택할 수 있습니다. 일부 API 작업은 리소스 수준 권한을 지원하여, 사용자가 생성하거나 수정할 수 있는 특정 리소스를 제어하도록 허용합니다.

중요

현재, Amazon EC2 API 작업 중 일부는 리소스 수준 권한을 지원하지 않습니다. Amazon EC2 API 작업이 리소스 수준 권한을 지원하지 않는 경우 사용자에게 작업 사용 권한을 부여할 때 정책 명령문의 리소스 요소를 *로 지정해야 합니다. 이 작업을 수행하는 방법을 보여주는 예제는 1. VPC 관리에서 설명하는 정책 예제를 참조하십시오. 이후에 추가적인 API 작업을 위한 지원과 추가적인 Amazon EC2 리소스를 위한 ARN을 추가할 예정입니다. 어떤 Amazon EC2 API 작업에 어떤 ARN을 사용할 수 있는지, 그리고 각 ARN에 지원되는 조건 키에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서Amazon EC2 API 작업을 위해 지원되는 리소스와 조건 단원을 참조하십시오.

Amazon EC2에 대한 정책 예제뿐 아니라 Amazon EC2에 대한 IAM 정책 생성과 EC2 API 작업을 위해 지원되는 리소스에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서에서 Amazon EC2에 대한 IAM 정책 단원을 참조하십시오.

AWS CLI 또는 SDK용 예제 정책

다음 예제는 IAM 사용자가 갖는 Amazon VPC 관련 권한을 제어하는 데 사용할 수 있는 정책 명령문을 보여줍니다. 이런 예제는 AWS CLI 또는 AWS SDK를 사용하는 사용자를 위해 고안된 것입니다.

ClassicLink로 작업하기 위한 정책 예제는 Linux 인스턴스용 Amazon EC2 사용 설명서에서 CLI 또는 SDK용 예제 정책 단원을 참조하십시오.

1. VPC 관리

다음 정책에서는 사용자에게 VPC를 생성하고 관리하는 권한을 부여합니다. 이 정책을 네트워크 관리자 그룹에 연결할 수 있습니다. Action 요소는 VPC, 서브넷, 인터넷 게이트웨이, 고객 게이트웨이, 가상 프라이빗 게이트웨이, VPN 연결, 라우팅 테이블, 탄력적 IP 주소, 보안 그룹, 네트워크 ACL 및 DHCP 옵션 세트에 연결된 API 작업을 지정합니다. 또한, 이 정책에서는 그룹이 인스턴스를 실행, 중지, 시작 및 종료하도록 허용합니다. 그룹이 Amazon EC2 리소스를 나열하도록 허용하기도 합니다.

이 정책에서는 와일드카드를 사용하여 각각의 객체 유형에 대한 모든 작업을 지정합니다(예: *SecurityGroup*). 또는 각 작업을 명시적으로 나열할 수 있습니다. 와일드카드를 사용하는 경우, 이름에 정책의 와일드카드 문자열 중 어느 것이든 포함되어 있는 새 작업을 추가하면 정책에서 이런 새 작업에 대한 그룹 액세스 권한을 자동으로 부여한다는 점에 유의하십시오.

Resource 요소에 와일드카드가 사용되었으므로 사용자가 이러한 API 작업에 모든 리소스를 지정할 수 있습니다. API 작업이 리소스 수준 권한을 지원하지 않는 경우에도 * 와일드카드가 필요합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":["ec2:*Vpc*", "ec2:*Subnet*", "ec2:*Gateway*", "ec2:*Vpn*", "ec2:*Route*", "ec2:*Address*", "ec2:*SecurityGroup*", "ec2:*NetworkAcl*", "ec2:*DhcpOptions*", "ec2:RunInstances", "ec2:StopInstances", "ec2:StartInstances", "ec2:TerminateInstances", "ec2:Describe*"], "Resource":"*" } ] }

2. Amazon VPC에 대한 읽기 전용 정책

다음 정책에서는 사용자에게 VPC와 그 구성 요소를 나열하는 권한을 부여합니다. 사용자가 VPC와 구성 요소를 생성, 업데이트 또는 삭제할 수는 없습니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":["ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeInternetGateways", "ec2:DescribeEgressOnlyInternetGateways", "ec2:DescribeVpcEndpoints", "ec2:DescribeNatGateways", "ec2:DescribeCustomerGateways", "ec2:DescribeVpnGateways", "ec2:DescribeVpnConnections", "ec2:DescribeRouteTables", "ec2:DescribeAddresses", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkAcls", "ec2:DescribeDhcpOptions", "ec2:DescribeTags", "ec2:DescribeInstances"], "Resource":"*" } ] }

3. Amazon VPC에 대한 사용자 지정 정책

다음 정책에서는 사용자에게 인스턴스를 시작, 중지, 시작 및 종료하고 Amazon EC2와 Amazon VPC에 사용 가능한 리소스를 설명하는 권한을 부여합니다.

정책에 있는 두 번째 설명문은 권한을 명시적으로 거부함으로써 사용자에게 더 광범위한 API 작업에 대한 액세스 권한을 부여할 수도 있는 다른 정책으로부터 보호하는 역할을 합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":["ec2:RunInstances", "ec2:StopInstances", "ec2:StartInstances", "ec2:TerminateInstances", "ec2:Describe*"], "Resource":"*" }, { "Effect":"Deny", "NotAction":["ec2:RunInstances", "ec2:StopInstances", "ec2:StartInstances", "ec2:TerminateInstances", "ec2:Describe*"], "Resource":"*" } ] }

4. 특정 서브넷으로 인스턴스 시작

다음 정책은 사용자에게 인스턴스를 특정 서브넷으로 시작하고 요청에 특정 보안 그룹을 사용하는 권한을 부여합니다. 이 정책에서는 subnet-1a2b3c4d에 대한 ARN과 sg-123abc123에 대한 ARN을 지정하여 이런 권한을 부여합니다. 사용자가 다른 서브넷으로 인스턴스를 시작하거나 다른 보안 그룹을 사용하여 시작하려고 하면 (또 다른 정책 또는 설명문에서 사용자에게 그런 권한을 부여하지 않는 한) 요청이 실패하게 됩니다.

또한, 이 정책에서는 네트워크 인터페이스 리소스를 사용할 권한도 부여합니다. 서브넷으로 시작할 때 기본적으로 RunInstances 요청은 기본 네트워크 인터페이스를 생성하므로, 사용자는 인스턴스를 시작할 때 이 리소스를 생성할 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:subnet/subnet-1a2b3c4d", "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/sg-123abc123" ] } ] }

5. 특정 VPC로 인스턴스 시작

다음 정책에서는 사용자에게 특정 VPC 내에 있는 임의의 서브넷으로 인스턴스를 시작하는 권한을 부여합니다. 이 정책에서는 조건 키(ec2:Vpc)를 서브넷 리소스에 적용함으로써 이런 권한을 부여합니다.

또한, 이 정책에서는 사용자에게 "department=dev" 태그가 있는 AMI만 사용하여 인스턴스를 시작하는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:region:account:subnet/*", "Condition": { "StringEquals": { "ec2:Vpc": "arn:aws:ec2:region:account:vpc/vpc-1a2b3c4d" } } }, { "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:network-interface/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

6. VPC에서 보안 그룹 관리

다음 정책에서는 사용자에게 특정 VPC 내에 있는 임의의 보안 그룹에 대한 인바운드 및 아웃바운드 규칙을 생성하고 삭제하는 권한을 부여합니다. 이 정책에서는 AuthorizeRevoke 작업을 위한 보안 그룹 리소스에 조건 키(ec2:Vpc)를 적용하여 이런 권한을 부여합니다.

두 번째 설명문은 사용자에게 모든 보안 그룹을 설명하는 권한을 부여합니다. 이는 사용자가 CLI를 사용하여 보안 그룹 규칙을 수정할 수 있도록 하는 데 필수적입니다.

{ "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-1a2b3c4d" } } }, { "Effect": "Allow", "Action": "ec2:DescribeSecurityGroups", "Resource": "*" } ] }

7. VPC 피어링 연결 생성 및 관리

다음은 VPC 피어링 연결의 생성 및 수정의 관리에 사용할 수 있는 정책 예제입니다.

a. VPC 피어링 연결 생성

사용자는 다음 정책을 통해 Purpose=Peering으로 태그 지정된 VPC만 사용하여 VPC 피어링 연결 요청을 생성할 수 있습니다. 첫 번째 설명문은 조건 키(ec2:ResourceTag)를 VPC 리소스에 적용합니다. CreateVpcPeeringConnection 작업을 위한 VPC 리소스는 항상 요청자 VPC입니다.

두 번째 설명문은 사용자에게 VPC 피어링 연결 리소스를 생성하는 권한을 부여하므로, 특정 리소스 ID 대신 * 와일드카드를 사용합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": "ec2:CreateVpcPeeringConnection", "Resource": "arn:aws:ec2:region:account:vpc/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Peering" } } }, { "Effect": "Allow", "Action": "ec2:CreateVpcPeeringConnection", "Resource": "arn:aws:ec2:region:account:vpc-peering-connection/*" } ] }

사용자는 AWS 계정 333333333333에서 다음 정책을 통해 us-east-1 리전에 있는 VPC를 사용하여 VPC 피어링 연결을 생성할 수 있지만, 피어링 조건을 허용할 VPC가 특정 계정(777788889999)의 특정 VPC(vpc-aaa111bb)인 경우에만 그렇습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect":"Allow", "Action": "ec2:CreateVpcPeeringConnection", "Resource": "arn:aws:ec2:us-east-1:333333333333:vpc/*" }, { "Effect": "Allow", "Action": "ec2:CreateVpcPeeringConnection", "Resource": "arn:aws:ec2:region:333333333333:vpc-peering-connection/*", "Condition": { "ArnEquals": { "ec2:AccepterVpc": "arn:aws:ec2:region:777788889999:vpc/vpc-aaa111bb" } } } ] }

b. VPC 피어링 연결 허용

사용자는 다음 정책을 통해 AWS 계정 444455556666의 VPC 피어링 연결 요청만 허용할 수 있습니다. 이는 사용자가 알 수 없는 계정의 VPC 피어링 연결 요청을 허용하지 못하게 하는 데 도움이 됩니다. 첫 번째 설명문에서는 ec2:RequesterVpc 조건 키를 사용하여 이를 적용합니다.

또한, 이 정책에서는 사용자에게 VPC에 Purpose=Peering 태그가 있을 때만 VPC 피어링 요청을 허용하는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": "ec2:AcceptVpcPeeringConnection", "Resource": "arn:aws:ec2:region:account:vpc-peering-connection/*", "Condition": { "ArnEquals": { "ec2:RequesterVpc": "arn:aws:ec2:region:444455556666:vpc/*" } } }, { "Effect": "Allow", "Action": "ec2:AcceptVpcPeeringConnection", "Resource": "arn:aws:ec2:region:account:vpc/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Peering" } } } ] }

c. VPC 피어링 연결 삭제

444455556666 계정의 사용자는 다음 정책을 통해 같은 계정에 있는 지정된 VPC vpc-1a2b3c4d를 사용하는 VPC 피어링 연결을 제외한 모든 VPC 피어링 연결을 삭제할 수 있습니다. VPC가 원래 VPC 피어링 연결 요청에서 요청자 VPC 또는 피어 VPC였을 수 있으므로, 이 정책에서는 ec2:AccepterVpcec2:RequesterVpc 조건 키를 모두 지정합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect":"Allow", "Action": "ec2:DeleteVpcPeeringConnection", "Resource": "arn:aws:ec2:region:444455556666:vpc-peering-connection/*", "Condition": { "ArnNotEquals": { "ec2:AccepterVpc": "arn:aws:ec2:region:444455556666:vpc/vpc-1a2b3c4d", "ec2:RequesterVpc": "arn:aws:ec2:region:444455556666:vpc/vpc-1a2b3c4d" } } } ] }

d. 특정 계정 내에서의 작업

사용자는 다음 정책을 통해 특정 계정 내에 있는 VPC 피어링 연결 전체를 사용하여 작업할 수 있습니다. VPC 피어링 연결이 모두 AWS 계정 333333333333 내에 있는 경우, 사용자는 VPC 피어링 연결 보기, 생성, 허용, 거부 및 삭제를 수행할 수 있습니다.

첫 번째 설명문에서는 사용자가 모든 VPC 피어링 연결을 볼 수 있도록 허용합니다. 이 API 작업(DescribeVpcPeeringConnections)은 현재 리소스 수준 권한을 지원하지 않으므로, 이 경우에는 Resource 요소에 * 와일드카드가 필요합니다.

두 번째 설명문에서는 사용자가 VPC 피어링 연결을 생성하도록 허용하고, 그렇게 하기 위해 333333333333 계정에 있는 모든 VPC에 대한 액세스를 허용합니다.

세 번째 설명문에서는 모든 VPC 피어링 연결 작업을 허용하기 위해 Action 요소의 일부로서 * 와일드카드를 사용합니다. 조건 키는 333333333333 계정의 일부인 VPC와의 VPC 피어링 연결 시에만 이런 작업을 수행할 수 있도록 합니다. 예를 들어 수락자 또는 요청자 VPC가 다른 계정에 있는 경우에는 사용자가 VPC 피어링 연결을 삭제할 수 없습니다. 사용자는 다른 계정에 있는 VPC와의 VCP 피어링 연결을 생성할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:DescribeVpcPeeringConnections", "Resource": "*" }, { "Effect": "Allow", "Action": ["ec2:CreateVpcPeeringConnection","ec2:AcceptVpcPeeringConnection"], "Resource": "arn:aws:ec2:*:333333333333:vpc/*" }, { "Effect": "Allow", "Action": "ec2:*VpcPeeringConnection", "Resource": "arn:aws:ec2:*:333333333333:vpc-peering-connection/*", "Condition": { "ArnEquals": { "ec2:AccepterVpc": "arn:aws:ec2:*:333333333333:vpc/*", "ec2:RequesterVpc": "arn:aws:ec2:*:333333333333:vpc/*" } } } ] }

8. VPC 엔드포인트 생성 및 관리

다음 정책에서는 사용자에게 VPC 엔드포인트, VPC 엔드포인트 서비스 및 VPC 엔드포인트 연결 알림을 생성, 수정, 보기 및 삭제하는 권한을 부여합니다. 사용자는 또한 VPC 엔드포인트 연결 요청을 수락 및 거부할 수 있습니다. 어떤 ec2:*VpcEndpoint* 작업도 리소스 수준 권한을 지원하지 않으므로, 사용자가 모든 리소스로 작업하도록 허용하려면 Resource 요소에 대해 * 와일드카드를 사용해야 합니다.

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

콘솔용 예제 정책

Amazon VPC 콘솔에서 IAM 정책을 사용하여 특정 리소스를 조회하고 관련 작업을 수행할 권한을 부여할 수 있습니다. 이전 섹션의 예제 정책을 사용할 수 있지만 해당 정책은 AWS CLI 또는 AWS SDK를 통한 요청에 맞게 설계되었습니다. 콘솔에서는 추가적인 API 작업을 통해 해당 기능을 구현하므로 이러한 정책이 예상과 다르게 작동할 수 있습니다.

이 섹션에서는 VPC 콘솔의 특정 부분을 사용하도록 허용하는 정책을 보여줍니다.

1. VPC 마법사 사용

VPC를 바로 사용할 수 있도록, Amazon VPC 콘솔에서 VPC 마법사를 사용하여 VPC를 생성, 설정 및 구성할 수 있습니다. 이 마법사는 사용자의 요구 사항에 따라 다양한 구성 옵션을 제공합니다. VPC 생성을 위해 VPC 마법사를 사용하는 자세한 방법은 시나리오 및 예시 단원을 참조하십시오.

사용자가 VPC 마법사를 사용할 수 있도록 하려면, 사용자에게 선택한 구성의 일부를 이루는 리소스를 생성하고 수정하는 권한을 부여해야 합니다. 다음 예제 정책에서는 각 마법사 구성 옵션에 필요한 작업을 보여줍니다.

참고

어떤 시점에 VPC 마법사가 실패하는 경우 VPC 마법사는 생성한 리소스를 분리하고 삭제하려 합니다. 사용자에게 이런 작업을 사용할 권한을 부여하지 않으면, 해당 리소스가 계정에 그대로 남습니다.

옵션 1: 단일 퍼블릭 서브넷이 있는 VPC

첫 번째 VPC 마법사 구성 옵션은 단일 서브넷이 있는 VPC를 생성하는 옵션입니다. IAM 정책에서는, 사용자가 이 마법사 옵션을 올바로 사용할 수 있도록 사용자에게 다음 작업을 사용할 권한을 부여해야 합니다.

  • ec2:CreateVpc, ec2:CreateSubnet, ec2:CreateRouteTableec2:CreateInternetGateway: VPC, 서브넷, 사용자 지정 라우팅 테이블 및 인터넷 게이트웨이를 생성합니다.

  • ec2:DescribeAvailabilityZones: 서브넷에 대한 [Availability Zone] 목록 및 CIDR 블록 필드가 있는 마법사의 섹션을 표시합니다. 사용자가 기본 설정을 그대로 두려고 하더라도, 이런 옵션이 표시되어 있지 않으면 VPC를 생성할 수 없습니다.

  • ec2:DescribeVpcEndpointServices: 마법사의 VPC 종단점 섹션을 표시합니다.

  • ec2:AttachInternetGateway: 인터넷 게이트웨이를 VPC에 연결합니다.

  • ec2:CreateRoute: 사용자 지정 라우팅 테이블에 경로를 생성합니다. 이 경로는 트래픽이 인터넷 게이트웨이로 전달되도록 합니다.

  • ec2:AssociateRouteTable: 사용자 지정 라우팅 테이블을 서브넷에 연결합니다.

  • ec2:ModifyVpcAttribute: DNS 호스트 이름을 활성화하여 이 VPC로 시작한 각 인스턴스가 DNS 호스트 이름을 수신하도록 VPC의 속성을 수정합니다.

이 정책에서는 어떤 API 작업도 리소스 수준 권한을 지원하지 않으므로, 사용자가 사용할 수 있는 특정 리소스를 제어할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:DescribeVpcEndpointServices", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:ModifyVpcAttribute" ], "Resource": "*" } ] }

옵션 2: 퍼블릭 및 프라이빗 서브넷이 있는 VPC

두 번째 VPC 마법사 구성 옵션은 퍼블릭 및 프라이빗 서브넷이 있는 VPC를 생성하고, NAT 게이트웨이 또는 NAT 인스턴스를 시작하는 옵션을 제공합니다. 다음 정책에는 이전 예제(옵션 1)와 같은 작업 외에도, 사용자가 NAT 게이트웨이 또는 NAT 인스턴스를 실행하고 구성하도록 허용하는 작업도 있습니다.

다음 작업은 NAT 인스턴스를 시작하는지 NAT 게이트웨이를 시작하는지 여부에 상관없이 수행해야 합니다.

  • ec2:DescribeKeyPairs: 기존 키 페어의 목록을 표시하고 마법사의 NAT 섹션을 로드합니다.

다음 작업은 NAT 게이트웨이를 만드는 경우에 필요하고, NAT 인스턴스를 시작하는 경우에는 필요하지 않습니다.

  • ec2:CreateNatGateway: NAT 게이트웨이를 만듭니다.

  • ec2:DescribeNatGateways: NAT 게이트웨이가 사용 가능한 상태가 될 때까지 NAT 게이트웨이의 상태를 확인합니다.

  • ec2:DescribeAddresses: 계정에서 NAT 게이트웨이와 연결할 수 있는 탄력적 IP 주소를 나열합니다.

다음 작업은 NAT 인스턴스를 시작하는 경우에 필요하고, NAT 게이트웨이를 만드는 경우에는 필요하지 않습니다.

  • ec2:DescribeImages: NAT 인스턴스로 실행하도록 구성된 AMI를 찾습니다.

  • ec2:RunInstances: NAT 인스턴스를 시작합니다.

  • ec2:AllocateAddressec2:AssociateAddress: 계정에 탄력적 IP 주소를 할당한 다음 NAT 인스턴스와 연결합니다.

  • ec2:ModifyInstanceAttribute: NAT 인스턴스의 원본/대상 확인을 비활성화합니다.

  • ec2:DescribeInstances: 인스턴스가 실행 중인 상태가 될 때까지 인스턴스의 상태를 확인합니다.

  • ec2:DescribeRouteTables, ec2:DescribeVpnGatewaysec2:DescribeVpcs: 기본 라우팅 테이블에 추가해야 하는 경로에 대한 정보를 수집합니다.

다음 정책은 사용자가 NAT 인스턴스 또는 NAT 게이트웨이를 만들 수 있도록 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:DescribeVpcEndpointServices", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateInternetGateway", "ec2:CreateNatGateway", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:ModifyVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeImages", "ec2:RunInstances", "ec2:AllocateAddress", "ec2:AssociateAddress", "ec2:DescribeAddresses", "ec2:DescribeInstances", "ec2:ModifyInstanceAttribute", "ec2:DescribeRouteTables", "ec2:DescribeVpnGateways", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeNatGateways" ], "Resource": "*" } ] }

ec2:RunInstances 작업에 대한 리소스 수준 권한을 사용하여 사용자의 인스턴스 시작 능력을 제어할 수 있습니다. 예를 들어 사용자가 NAT 사용 AMI에서만 인스턴스를 시작할 수 있도록 이 AMI의 ID를 지정할 수 있습니다. 마법사가 NAT 인스턴스를 시작하기 위해 사용하는 AMI를 찾으려면 전체 권한을 가진 사용자로 Amazon VPC 콘솔에 로그인한 후에 VPC 마법사의 두 번째 옵션을 수행합니다. Amazon EC2 콘솔로 전환하고, [Instances] 페이지를 선택하고, NAT 인스턴스를 선택한 다음, 이 인스턴스를 시작하는 데 사용한 AMI ID를 기록합니다.

사용자는 다음 정책을 통해 ami-1a2b3c4d만 사용하여 인스턴스를 시작할 수 있습니다. 사용자가 다른 AMI를 사용하여 인스턴스를 시작하려고 하면 시작에 실패합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:DescribeVpcEndpointServices", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:ModifyVpcAttribute", "ec2:DescribeKeyPairs", "ec2:DescribeImages", "ec2:AllocateAddress", "ec2:AssociateAddress", "ec2:DescribeInstances", "ec2:ModifyInstanceAttribute", "ec2:DescribeRouteTables", "ec2:DescribeVpnGateways", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-1a2b3c4d", "arn:aws:ec2:region:account:instance/*", "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/*" ] } ] }

옵션 3: 퍼블릭 및 프라이빗 서브넷이 있고 AWS 관리형 VPN 액세스를 제공하는 VPC

세 번째 VPC 마법사 구성 옵션은 퍼블릭 및 프라이빗 서브넷이 있는 VPC를 생성하고, VPC와 자체 네트워크 사이에 VPN 연결을 생성합니다. IAM 정책에서는, 사용자에게 옵션 1과 같은 작업을 사용할 권한을 부여해야 합니다. 이를 통해 사용자는 VPC 한 개와 서브넷 두 개를 생성하고, 퍼블릭 서브넷에 대한 라우팅을 구성할 수 있습니다. VPN 연결을 생성하려면 사용자가 다음과 같은 작업을 사용할 권한도 가져야 합니다.

  • ec2:CreateCustomerGateway: 고객 게이트웨이를 생성합니다.

  • ec2:CreateVpnGatewayec2:AttachVpnGateway: 가상 프라이빗 게이트웨이를 생성하여 VPC에 연결합니다.

  • ec2:EnableVgwRoutePropagation: 경로가 라우팅 테이블로 자동으로 전파되도록 경로 전파를 활성화합니다.

  • ec2:CreateVpnConnection: VPN 연결을 생성합니다.

  • ec2:DescribeVpnConnections, ec2:DescribeVpnGatewaysec2:DescribeCustomerGateways: 마법사의 두 번째 구성 페이지에 옵션을 표시합니다.

  • ec2:DescribeVpcsec2:DescribeRouteTables: 기본 라우팅 테이블에 추가해야 하는 경로에 대한 정보를 수집합니다.

이 정책에서는 어떤 API 작업도 리소스 수준 권한을 지원하지 않으므로, 사용자가 사용할 수 있는 특정 리소스를 제어할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:DescribeVpcEndpointServices", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:ModifyVpcAttribute", "ec2:CreateCustomerGateway", "ec2:CreateVpnGateway", "ec2:AttachVpnGateway", "ec2:EnableVgwRoutePropagation", "ec2:CreateVpnConnection", "ec2:DescribeVpnGateways", "ec2:DescribeCustomerGateways", "ec2:DescribeVpnConnections", "ec2:DescribeRouteTables", "ec2:DescribeNetworkAcls", "ec2:DescribeInternetGateways", "ec2:DescribeVpcs" ], "Resource": "*" } ] }

옵션 4: 프라이빗 서브넷만 있고 AWS 관리형 VPN 액세스를 제공하는 VPC

네 번째 VPC 구성 옵션은 프라이빗 서브넷이 있는 VPC를 생성하고, VPC와 자체 네트워크 사이에 VPN 연결을 생성합니다. 다른 세 옵션과는 달리, 사용자가 VPC에 인터넷 게이트웨이를 연결하거나 생성하는 권한이 필요하지 않고, 라우팅 테이블을 생성하여 서브넷과 연결할 권한이 필요하지 않습니다. VPN 연결을 설정하려면 이전 예제(옵션 3)와 같은 권한이 필요합니다.

이 정책에서는 어떤 API 작업도 리소스 수준 권한을 지원하지 않으므로, 사용자가 사용할 수 있는 특정 리소스를 제어할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:DescribeVpcEndpointServices", "ec2:ModifyVpcAttribute", "ec2:CreateCustomerGateway", "ec2:CreateVpnGateway", "ec2:AttachVpnGateway", "ec2:EnableVgwRoutePropagation", "ec2:CreateVpnConnection", "ec2:DescribeVpnGateways", "ec2:DescribeCustomerGateways", "ec2:DescribeVpnConnections", "ec2:DescribeRouteTables", "ec2:DescribeNetworkAcls", "ec2:DescribeInternetGateways", "ec2:DescribeVpcs" ], "Resource": "*" } ] }

2. VPC 관리

VPC 콘솔의 [Your VPCs] 페이지에서 VPC를 생성하거나 삭제할 수 있습니다. VPC를 보려면 사용자에게 ec2:DescribeVPCs 작업을 사용할 권한이 있어야 합니다. [Create VPC] 대화 상자를 사용하여 VPC를 생성하려면 사용자에게 ec2:CreateVpc 작업을 사용할 권한이 있어야 합니다.

참고

기본적으로, VPC 콘솔은 Name의 키와 사용자가 지정하는 값을 포함한 태그를 생성합니다. 사용자가 ec2:CreateTags 작업을 사용할 권한이 없는 경우에는 VPC를 생성하려고 할 때 [Create VPC] 대화 상자에 오류가 나타납니다. 하지만 VPC 생성에 성공했을 수도 있습니다.

VPC를 설정할 때는 일반적으로 서브넷 및 인터넷 게이트웨이와 같이 종속적인 객체가 다수 생성됩니다. 이런 종속적 객체의 연결을 끊고 삭제할 때까지는 VPC를 삭제할 수 없습니다. 콘솔을 사용하여 VPC를 삭제하면 이런 작업이 자동으로 수행됩니다(단, 인스턴스 종료는 제외. 인스턴스는 수동으로 종료해야 함).

사용자는 다음 예제를 통해 [Your VPCs] 페이지에서 VPC를 보고 생성하며, VPC 마법사에서 첫 번째 옵션으로 생성된 VPC(단일 퍼블릭 서브넷이 있는 VPC)를 삭제할 수 있습니다. 이 VPC에는 사용자 지정 라우팅 테이블과 연결된 서브넷 한 개와 이 서브넷에 연결된 인터넷 게이트웨이 한 개가 있습니다. 콘솔을 사용하여 VPC와 그 구성 요소를 삭제하려면 콘솔이 이 VPC에 종속적인 다른 리소스가 있는지 확인할 수 있도록 여러 가지 ec2:Describe* 작업을 사용할 권한을 사용자에게 부여해야 합니다. 또한, 사용자에게 서브넷에서 라우팅 테이블의 연결을 끊고, VPC에서 인터넷 게이트웨이를 분리하고, 이 두 리소스를 모두 삭제할 수 있는 권한도 부여해야 합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeRouteTables", "ec2:DescribeVpnGateways", "ec2:DescribeInternetGateways", "ec2:DescribeSubnets", "ec2:DescribeDhcpOptions", "ec2:DescribeInstances", "ec2:DescribeVpcAttribute", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaces", "ec2:DescribeAddresses", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeSecurityGroups", "ec2:CreateVpc", "ec2:DeleteVpc", "ec2:DetachInternetGateway", "ec2:DeleteInternetGateway", "ec2:DisassociateRouteTable", "ec2:DeleteSubnet", "ec2:DeleteRouteTable" ], "Resource": "*" } ] }

어떤 ec2:Describe* API 작업에도 리소스 수준 권한을 적용할 수 없지만, 사용자가 삭제할 수 있는 리소스를 제어하기 위해 ec2:Delete* 작업 중 일부에 리소스 수준 권한을 적용할 수 있습니다.

예를 들어 사용자는 다음 정책을 통해 Purpose=Test 태그가 있는 라우팅 테이블과 인터넷 게이트웨이만 삭제할 수 있습니다. 사용자는 이 태그가 없는 개별 라우팅 테이블 또는 인터넷 게이트웨이를 삭제할 수 없으며, 마찬가지로 사용자는 VPC 콘솔을 사용하여 다른 라우팅 테이블이나 인터넷 게이트웨이와 연결된 VPC를 삭제할 수 없습니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcs", "ec2:DescribeRouteTables", "ec2:DescribeVpnGateways", "ec2:DescribeInternetGateways", "ec2:DescribeSubnets", "ec2:DescribeDhcpOptions", "ec2:DescribeInstances", "ec2:DescribeVpcAttribute", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaces", "ec2:DescribeAddresses", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeSecurityGroups", "ec2:CreateVpc", "ec2:DeleteVpc", "ec2:DetachInternetGateway", "ec2:DisassociateRouteTable", "ec2:DeleteSubnet" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:DeleteInternetGateway", "Resource": "arn:aws:ec2:region:account:internet-gateway/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Test" } } }, { "Effect": "Allow", "Action": "ec2:DeleteRouteTable", "Resource": "arn:aws:ec2:region:account:route-table/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose": "Test" } } } ] }

3. 보안 그룹 관리

Amazon VPC 콘솔의 [Security Groups] 페이지에서 보안 그룹을 보려면 사용자에게 ec2:DescribeSecurityGroups 작업을 사용할 권한이 있어야 합니다. [Create Security Group] 대화 상자를 사용하여 보안 그룹을 생성하려면 사용자에게 ec2:DescribeVpcsec2:CreateSecurityGroup 작업을 사용할 권한이 있어야 합니다. 사용자에게 ec2:DescribeSecurityGroups 작업을 사용할 권한이 없더라도 사용자가 이 대화 상자를 사용하여 보안 그룹을 생성할 수는 있지만, 해당 그룹이 생성되지 않았음을 나타내는 오류가 발생할 수도 있습니다.

사용자는 [Create Security Group] 대화 상자에서 보안 그룹 이름과 설명을 추가해야 하지만, ec2:CreateTags 작업을 사용할 권한이 자신에게 부여되지 않은 경우에는 [Name tag] 필드에 대한 값을 입력할 수 없습니다. 하지만 보안 그룹을 생성하기 위해 이 작업을 수행할 필요는 없습니다.

사용자는 다음 정책을 통해 보안 그룹을 보고 생성하고, vpc-1a2b3c4d와 연결된 보안 그룹에 인바운드 및 아웃바운드 규칙을 추가 및 제거할 수 있습니다.

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

4. VPC 피어링 연결 생성

Amazon VPC 콘솔에서 VPC 피어링 연결을 보려면 사용자에게 ec2:DescribePeeringConnections 작업을 사용할 권한이 있어야 합니다. [Create VPC Peering Connection] 대화 상자를 사용하려면 사용자에게 ec2:DescribeVpcs 작업을 사용할 권한이 있어야 합니다. 사용자는 이 권한을 통해 VPC를 보고 선택할 수 있습니다. 이 작업을 사용하지 않으면 대화 상자를 로드할 수 없습니다. ec2:DescribeVpcPeeringConnections를 제외한 모든 ec2:*PeeringConnection 작업에 리소스 수준 권한을 적용할 수 있습니다.

사용자는 다음 정책을 통해 VPC 피어링 연결을 보고 [Create VPC Peering Connection] 대화 상자에서 특정 요청자 VPC(vpc-1a2b3c4d)만 사용하여 VPC 피어링 연결을 생성할 수 있습니다. 사용자가 다른 요청자 VPC로 VPC 피어링 연결을 생성하려고 하면 요청이 실패합니다.

{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:DescribeVpcPeeringConnections", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect":"Allow", "Action": "ec2:CreateVpcPeeringConnection", "Resource": [ "arn:aws:ec2:*:*:vpc/vpc-1a2b3c4d", "arn:aws:ec2:*:*:vpc-peering-connection/*" ] } ] }

VPC 피어링 연결을 사용한 작업을 위해 IAM 정책을 작성하는 추가 예제를 보려면 7. VPC 피어링 연결 생성 및 관리 단원을 참조하십시오.