Amazon EC2 콘솔에 대한 접근을 제어하는 예시 정책
Amazon EC2 콘솔에 대한 접근을 제어하는 예시 정책
IAM 정책을 사용해 사용자에게 Amazon EC2를 작업하는 데 필요한 권한을 부여할 수 있어요. 단계별 지침은 IAM 사용 설명서의 IAM 정책 만들기 문서를 참고하세요.
출처: 문서
본문
콘솔은 기능에 추가 API 작업을 사용하므로 이 정책들이 예상대로 작동하지 않을 수 있어요. 예를 들어 DescribeVolumes API 작업만 사용할 권한이 있는 사용자는 콘솔에서 볼륨을 보려고 할 때 오류를 겪게 돼요. 이 섹션은 사용자가 콘솔의 특정 부분을 작업할 수 있게 하는 정책을 보여줘요. Amazon EC2 콘솔용 정책 작성에 대한 추가 정보는 다음 AWS Security 블로그 게시물을 참고하세요: Granting Users Permission to Work in the Amazon EC2 Console.
다음 예시는 사용자에게 Amazon EC2 사용 권한을 부여하기 위해 사용할 수 있는 정책 문을 보여줘요. 각 사용자 입력 자리 표시자를 여러분의 정보로 바꾸세요. 이 정책들은 AWS Management Console을 사용해 이루어지는 요청을 위해 설계됐어요. Amazon EC2 콘솔은 단일 리소스를 표시하기 위해 여러 API 작업을 호출할 수 있고, 사용자가 작업을 시도하고 콘솔이 오류를 표시하기 전까지는 분명하지 않을 수 있어요. 자세한 내용은 다음 AWS Security 블로그 게시물을 참고하세요: Granting Users Permission to Work in the Amazon EC2 Console.
예시
- 읽기 전용 접근
- EC2 인스턴스 시작 마법사 사용하기
- 보안 그룹 작업하기
- Elastic IP 주소 작업하기
- Reserved Instances 작업하기
콘솔에서 작업을 수행하는 데 필요한 API 작업을 파악하는 데 도움이 되도록 AWS CloudTrail 같은 호출을 기록하는 서비스를 사용할 수 있어요. 정책이 특정 리소스를 만들거나 수정하는 권한을 부여하지 않으면 콘솔은 진단 정보가 포함된 인코딩된 메시지를 표시해요. AWS STS의 DecodeAuthorizationMessage API 작업 또는 AWS CLI의 decode-authorization-message 명령을 사용해 메시지를 디코딩할 수 있어요.
예시: 읽기 전용 접근
사용자가 Amazon EC2 콘솔에서 모든 리소스를 볼 수 있게 하려면 다음 예시와 같은 정책을 사용할 수 있어요. 예시: 읽기 전용 접근. 다른 문이 권한을 부여하지 않는 한 사용자는 그 리소스에 대해 어떤 작업도 수행하거나 새 리소스를 만들 수 없어요.
인스턴스, AMI, 스냅샷 보기
또는 리소스 하위 집합에 대한 읽기 전용 접근을 제공할 수 있어요. 이렇게 하려면 ec2:Describe API 작업의 * 와일드카드를 각 리소스에 대한 특정 ec2:Describe 작업으로 바꾸세요. 다음 정책은 사용자가 Amazon EC2 콘솔에서 모든 인스턴스, AMI, 스냅샷을 볼 수 있게 해요. ec2:DescribeTags 작업은 사용자가 공개 AMI를 볼 수 있게 해 줘요. 콘솔은 공개 AMI를 표시하기 위해 태그 정보가 필요해요. 하지만 이 작업을 제거하면 사용자가 프라이빗 AMI만 볼 수 있게 할 수 있어요.
JSON
{
"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을 사용할 수 있는지에 대한 자세한 내용은 Actions, resources, and condition keys for Amazon EC2를 참고하세요.
인스턴스와 CloudWatch 지표 보기
다음 정책은 사용자가 Amazon EC2 콘솔에서 인스턴스와, Instances 페이지의 Monitoring 탭에 있는 CloudWatch 알람·지표를 볼 수 있게 해요. Amazon EC2 콘솔은 알람과 지표를 표시하기 위해 CloudWatch API를 사용하므로, cloudwatch:DescribeAlarms, cloudwatch:DescribeAlarmsForMetric, cloudwatch:ListMetrics, cloudwatch:GetMetricStatistics, cloudwatch:GetMetricData 작업을 사용할 권한을 부여해야 해요.
JSON
{
"Version":"2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeInstanceTypes",
"cloudwatch:DescribeAlarms",
"cloudwatch:DescribeAlarmsForMetric",
"cloudwatch:ListMetrics",
"cloudwatch:GetMetricStatistics",
"cloudwatch:GetMetricData"
],
"Resource": "*"
}
]
}
예시: EC2 인스턴스 시작 마법사 사용하기
Amazon EC2 인스턴스 시작 마법사는 인스턴스를 구성하고 실행하는 옵션이 있는 화면이에요. 정책에는 사용자가 마법사의 옵션을 작업할 수 있게 하는 API 작업을 사용할 권한이 포함되어야 해요. 정책에 그 작업을 사용할 권한이 포함되어 있지 않으면 마법사의 일부 항목이 제대로 로드되지 않아 사용자가 실행을 완료할 수 없어요.
기본 인스턴스 시작 마법사 접근
실행을 성공적으로 완료하려면 사용자에게 ec2:RunInstances API 작업과 최소한 다음 API 작업을 사용할 권한을 부여해야 해요.
ec2:DescribeImages: AMI를 보고 선택하기 위한 권한.ec2:DescribeInstanceTypes: 인스턴스 유형을 보고 선택하기 위한 권한.ec2:DescribeVpcs: 사용 가능한 네트워크 옵션을 보기 위한 권한.ec2:DescribeSubnets: 선택한 VPC의 모든 사용 가능한 서브넷을 보기 위한 권한.ec2:DescribeSecurityGroups또는ec2:CreateSecurityGroup: 기존 보안 그룹을 보고 선택하거나 새로 만들기 위한 권한.ec2:DescribeKeyPairs또는ec2:CreateKeyPair: 기존 키 페어를 선택하거나 새로 만들기 위한 권한.ec2:AuthorizeSecurityGroupIngress: 인바운드 규칙을 추가하기 위한 권한.
JSON
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeImages",
"ec2:DescribeInstanceTypes",
"ec2:DescribeKeyPairs",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateKeyPair"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*"
}
]
}
정책에 API 작업을 추가해 사용자에게 더 많은 옵션을 제공할 수 있어요. 예:
ec2:DescribeAvailabilityZones: 특정 가용 영역을 보고 선택하기 위한 권한.ec2:DescribeNetworkInterfaces: 선택한 서브넷의 기존 네트워크 인터페이스를 보고 선택하기 위한 권한.- VPC 보안 그룹에 아웃바운드 규칙을 추가하려면
ec2:AuthorizeSecurityGroupEgressAPI 작업을 사용할 권한을 부여해야 해요. 기존 규칙을 수정하거나 삭제하려면 관련ec2:RevokeSecurityGroup*API 작업을 사용할 권한을 부여해야 해요. ec2:CreateTags:RunInstances가 만든 리소스에 태그를 지정하기 위한 권한. 자세한 내용은 생성 중에 Amazon EC2 리소스에 태그를 지정할 권한 부여 문서를 참고하세요. 사용자가 이 작업을 사용할 권한이 없고 인스턴스 시작 마법사의 태그 지정 페이지에서 태그를 적용하려 하면 실행이 실패해요.
중요 — 인스턴스를 실행할 때 Name을 지정하면 태그가 생성되고
ec2:CreateTags작업이 필요해요.ec2:CreateTags작업을 사용할 권한을 부여할 때는 주의하세요. 이 권한을 부여하면aws:ResourceTag조건 키로 다른 리소스 사용을 제한하는 여러분의 능력이 제한되기 때문이에요.ec2:CreateTags작업을 사용할 권한을 부여하면 사용자가 리소스의 태그를 변경해 그 제한을 우회할 수 있어요. 자세한 내용은 attribute-based access를 사용한 접근 제어 문서를 참고하세요.AMI를 선택할 때 Systems Manager 파라미터를 사용하려면 정책에
ssm:DescribeParameters와ssm:GetParameters를 추가해야 해요.ssm:DescribeParameters는 사용자에게 Systems Manager 파라미터를 보고 선택할 권한을 부여해요.ssm:GetParameters는 사용자에게 Systems Manager 파라미터의 값을 가져올 권한을 부여해요. 특정 Systems Manager 파라미터에 대한 접근을 제한할 수도 있어요. 자세한 내용은 이 섹션 뒷부분의 특정 Systems Manager 파라미터에 대한 접근 제한 항목을 참고하세요.
현재 Amazon EC2 Describe* API 작업은 리소스 수준 권한을 지원하지 않으므로, 인스턴스 시작 마법사에서 사용자가 볼 수 있는 개별 리소스를 제한할 수 없어요. 하지만 ec2:RunInstances API 작업에 리소스 수준 권한을 적용해 사용자가 인스턴스를 실행하는 데 사용할 수 있는 리소스를 제한할 수 있어요. 사용자가 권한이 없는 옵션을 선택하면 실행이 실패해요.
특정 인스턴스 유형, 서브넷, 리전에 대한 접근 제한
다음 정책은 사용자가 Amazon이 소유한 AMI를 사용해 t2.micro 인스턴스를, 특정 서브넷(subnet-1a2b3c4d)에만 실행할 수 있게 해요. 사용자는 지정된 리전에서만 실행할 수 있어요. 인스턴스 시작 마법사에서 다른 리전을 선택하거나 다른 인스턴스 유형, AMI, 서브넷을 선택하면 실행이 실패해요.
첫 번째 문은 사용자가 인스턴스 시작 마법사의 옵션을 보거나 새로 만드는 권한을 부여해요(위 예시에서 설명). 두 번째 문은 ec2:RunInstances 작업에 필요한 네트워크 인터페이스, 볼륨, 키 페어, 보안 그룹, 서브넷 리소스를 사용할 권한을 부여해요. VPC에 인스턴스를 실행하려면 필요해요. ec2:RunInstances 작업 사용에 대한 자세한 내용은 인스턴스 실행 (RunInstances) 문서를 참고하세요. 세 번째와 네 번째 문은 각각 인스턴스와 AMI 리소스를 사용할 권한을 부여하는데, 단 인스턴스가 t2.micro 인스턴스이고 AMI가 Amazon 또는 특정 신뢰·검증 파트너가 소유한 경우에만 가능해요.
JSON
{
"Version":"2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeImages",
"ec2:DescribeInstanceTypes",
"ec2:DescribeKeyPairs",
"ec2:CreateKeyPair",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets", "ec2:DescribeSecurityGroups",
"ec2:CreateSecurityGroup",
"ec2:AuthorizeSecurityGroupIngress"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action":"ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-2:111122223333:network-interface/*",
"arn:aws:ec2:us-east-2:111122223333:volume/*",
"arn:aws:ec2:us-east-2:111122223333:key-pair/*",
"arn:aws:ec2:us-east-2:111122223333:security-group/*",
"arn:aws:ec2:us-east-2:111122223333:subnet/subnet-1a2b3c4d"
]
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-2:111122223333:instance/*"
],
"Condition": {
"StringEquals": {
"ec2:InstanceType": "t2.micro"
}
}
},
{
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-2::image/ami-*"
],
"Condition": {
"StringEquals": {
"ec2:Owner": "amazon"
}
}
}
]
}
특정 Systems Manager 파라미터에 대한 접근 제한
다음 정책은 특정 이름의 Systems Manager 파라미터를 사용할 접근 권한을 부여해요. 첫 번째 문은 사용자가 인스턴스 시작 마법사에서 AMI를 선택할 때 Systems Manager 파라미터를 볼 수 있는 권한을 부여해요. 두 번째 문은 prod-*라는 이름의 파라미터만 사용할 수 있는 권한을 부여해요.
JSON
{
"Version":"2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"ssm:DescribeParameters"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameters"
],
"Resource": "arn:aws:ssm:us-east-2:123456123456:parameter/prod-*"
}
]
}
예시: 보안 그룹 작업하기
보안 그룹 보기와 규칙 추가·제거
다음 정책은 사용자가 Amazon EC2 콘솔에서 보안 그룹을 보고, 인바운드·아웃바운드 규칙을 추가·제거하며, Department=Test 태그가 있는 기존 보안 그룹의 규칙 설명을 나열·수정할 수 있는 권한을 부여해요.
첫 번째 문의 ec2:DescribeTags 작업은 사용자가 콘솔에서 태그를 볼 수 있게 해 주는데, 이는 사용자가 수정할 수 있는 보안 그룹을 식별하는 데 도움이 돼요.
JSON
{
"Version":"2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"ec2:DescribeSecurityGroups",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeTags"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupEgress",
"ec2:ModifySecurityGroupRules",
"ec2:UpdateSecurityGroupRuleDescriptionsIngress",
"ec2:UpdateSecurityGroupRuleDescriptionsEgress"
],
"Resource": [
"arn:aws:ec2:us-east-2:111122223333:security-group/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/Department": "Test"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySecurityGroupRules"
],
"Resource": [
"arn:aws:ec2:us-east-2:111122223333:security-group-rule/*"
]
}
]}
Create Security Group 대화 상자 작업하기
사용자가 Amazon EC2 콘솔의 Create Security Group 대화 상자를 작업할 수 있게 하는 정책을 만들 수 있어요. 이 대화 상자를 사용하려면 최소한 다음 API 작업을 사용할 권한을 부여해야 해요.
ec2:CreateSecurityGroup: 새 보안 그룹을 만들기 위한 권한.ec2:DescribeVpcs: VPC 목록에서 기존 VPC 목록을 보기 위한 권한.
이 권한만으로 사용자는 새 보안 그룹을 성공적으로 만들 수 있지만, 규칙은 추가할 수 없어요. 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:UpdateSecurityGroupRuleDescriptionsIngress: 인그레스(인바운드) 보안 그룹 규칙의 설명을 추가·업데이트하기 위한 권한.ec2:UpdateSecurityGroupRuleDescriptionsEgress: 이그레스(아웃바운드) 보안 그룹 규칙의 설명을 추가·업데이트하기 위한 권한.ec2:ModifySecurityGroupRules: 보안 그룹 규칙을 수정하기 위한 권한.ec2:DescribeSecurityGroupRules: 보안 그룹 규칙을 나열하기 위한 권한.
다음 정책은 사용자가 Create Security Group 대화 상자를 사용하고, 특정 VPC(vpc-1a2b3c4d)와 연결된 보안 그룹에 대해 인바운드·아웃바운드 규칙을 만들 수 있는 권한을 부여해요. 사용자는 VPC에 대한 보안 그룹을 만들 수 있지만 규칙을 추가할 수는 없어요. 마찬가지로 VPC vpc-1a2b3c4d와 연결되지 않은 기존 보안 그룹에는 규칙을 추가할 수 없어요. 또한 사용자는 콘솔에서 모든 보안 그룹을 볼 수 있는 권한을 부여받아, 인바운드 규칙을 추가할 수 있는 보안 그룹을 식별하기 쉽게 해 줘요. 이 정책은 VPC vpc-1a2b3c4d와 연결된 보안 그룹을 삭제할 권한도 부여해요.
JSON
{
"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:us-east-2:111122223333:security-group/*",
"Condition":{
"ArnEquals": {
"ec2:Vpc": "arn:aws:ec2:us-east-2:111122223333:vpc/vpc-1a2b3c4d"
}
}
}
]
}
예시: Elastic IP 주소 작업하기
사용자가 Amazon EC2 콘솔에서 Elastic IP 주소를 볼 수 있게 하려면 ec2:DescribeAddresses 작업을 사용할 권한을 부여해야 해요.
사용자가 Elastic IP 주소를 작업할 수 있게 하려면 정책에 다음 작업을 추가할 수 있어요.
ec2:AllocateAddress: Elastic IP 주소를 할당하기 위한 권한.ec2:ReleaseAddress: Elastic IP 주소를 해제하기 위한 권한.ec2:AssociateAddress: Elastic IP 주소를 인스턴스나 네트워크 인터페이스와 연결하기 위한 권한.ec2:DescribeNetworkInterfaces와ec2:DescribeInstances: Associate address 화면을 작업하기 위한 권한. 이 화면은 Elastic IP 주소를 연결할 수 있는 사용 가능한 인스턴스나 네트워크 인터페이스를 표시해요.ec2:DisassociateAddress: Elastic IP 주소를 인스턴스나 네트워크 인터페이스에서 분리하기 위한 권한.
다음 정책은 사용자가 Elastic IP 주소를 보고, 할당하고, 인스턴스와 연결할 수 있게 해요. 사용자는 Elastic IP 주소를 네트워크 인터페이스와 연결하거나, Elastic IP 주소를 분리하거나, 해제할 수 없어요.
JSON
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeAddresses",
"ec2:AllocateAddress",
"ec2:DescribeInstances",
"ec2:AssociateAddress"
],
"Resource": "*"
}
]
}
예시: Reserved Instances 작업하기
다음 정책은 사용자가 계정의 Reserved Instances를 보고 수정하고, AWS Management Console에서 새 Reserved Instances를 구매할 수 있는 권한을 부여해요.
이 정책은 사용자가 계정의 모든 Reserved Instances와 On-Demand 인스턴스를 볼 수 있게 해요. 개별 Reserved Instances에 대한 리소스 수준 권한을 설정하는 것은 불가능해요.
JSON
{
"Version":"2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": [
"ec2:DescribeReservedInstances",
"ec2:ModifyReservedInstances",
"ec2:PurchaseReservedInstancesOffering",
"ec2:DescribeInstances",
"ec2:DescribeInstanceTypes",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeReservedInstancesOfferings"
],
"Resource": "*"
}
]
}
ec2:DescribeAvailabilityZones 작업은 Amazon EC2 콘솔이 Reserved Instances를 구매할 수 있는 가용 영역에 대한 정보를 표시할 수 있게 하는 데 필요해요. ec2:DescribeInstances 작업은 필수는 아니지만, 사용자가 계정의 인스턴스를 보고 올바른 사양에 맞는 예약을 구매할 수 있게 보장해요.
API 작업을 조정해 사용자 접근을 제한할 수 있어요. 예를 들어 ec2:DescribeInstances와 ec2:DescribeAvailabilityZones를 제거하면 사용자가 읽기 전용 접근만 갖게 돼요.
더 알아보기
- 예시 API 정책
- AWS 관리 정책