Amazon EC2 콘솔에 대한 액세스를 제어하는 정책 예제 - Amazon Elastic Compute Cloud

Amazon EC2 콘솔에 대한 액세스를 제어하는 정책 예제

IAM 정책을 사용하여 Amazon EC2를 사용하는 데 필요한 권한을 사용자에게 부여할 수 있습니다. 단계별 지침은 IAM 사용 설명서의 IAM 정책 생성을 참조하세요.

콘솔에서는 추가적인 API 작업을 통해 해당 기능을 구현하므로 이러한 정책이 예상과 다르게 작동할 수 있습니다. 예를 들어 DescribeVolumes API 작업만 사용할 권한을 갖는 경우 콘솔에서 볼륨을 조회하려고 하면 오류가 발생합니다. 이 섹션에서는 콘솔의 특정 부분을 사용하도록 허용하는 정책을 보여 줍니다. Amazon EC2 콘솔용 정책을 생성하는 방법에 대한 자세한 내용은 AWS 보안 블로그 게시물 Granting Users Permission to Work in the Amazon EC2 Console을 참조하세요.

다음 예제는 사용자에게 Amazon EC2 사용 권한을 부여하는 데 사용할 수 있는 정책 명령문을 보여줍니다. user input placeholder를 사용자의 정보로 바꿉니다. 이러한 정책은 AWS Management Console을 사용하는 요청에 맞게 설계되었습니다. Amazon EC2 콘솔은 단일 리소스를 표시하기 위해 여러 API 작업을 호출할 수 있으며, 사용자가 작업을 시도하고 콘솔에 오류가 표시되기 전까지는 명확하지 않을 수 있습니다. 자세한 내용은 AWS 보안 블로그 게시물 Granting Users Permission to Work in the Amazon EC2 Console을 참조하세요.

콘솔에서 작업을 수행하는 데 필요한 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만 조회하도록 하려면 이 작업을 제거할 수도 있습니다.

{ "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에 사용되는 작업, 리소스 및 조건 키를 참조하세요.

인스턴스 및 CloudWatch 측정치 조회

다음 정책은 사용자로 하여금 인스턴스 페이지의 모니터링 탭에 있는 CloudWatch 경보 및 지표뿐만 아니라 Amazon EC2 콘솔의 인스턴스까지도 조회할 수 있도록 허용합니다. Amazon EC2 콘솔에서는 CloudWatch API를 사용하여 경보와 지표를 표시하므로 사용자에게 cloudwatch:DescribeAlarms, cloudwatch:DescribeAlarmsForMetric, cloudwatch:ListMetrics, cloudwatch:GetMetricStatisticscloudwatch:GetMetricData 작업을 사용하는 권한을 부여해야 합니다.

{ "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: 인바운드 규칙을 추가합니다.

{ "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:AuthorizeSecurityGroupEgress API 작업 사용 권한이 부여되어야 합니다. 기존 규칙을 수정 또는 삭제하려면 관련 ec2:RevokeSecurityGroup* API 작업 사용 권한이 부여되어야 합니다.

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

    중요

    인스턴스를 시작하는 동안 Name(이름)을 지정하면 태그가 생성되고 ec2:CreateTags 작업이 필요합니다. 사용자에게 ec2:CreateTags 작업을 사용할 수 있는 권한을 부여하면 aws:ResourceTag 조건 키를 사용하여 다른 리소스의 사용을 제한하지 못할 수 있으므로 주의해야 합니다. 사용자가 ec2:CreateTags 작업을 사용할 수 있는 권한을 부여받으면 리소스의 태그를 변경하여 제한을 우회할 수 있습니다. 자세한 내용은 속성 기반 액세스를 사용하여 액세스 제어 단원을 참조하십시오.

  • AMI을 선택하는 데 Systems Manager 파라미터를 사용하려면 정책에 ssm:DescribeParametersssm: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 또는 신뢰할 수 있고 검증된 특정 파트너의 소유인 경우로 한정합니다.

{ "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:region:111122223333:network-interface/*", "arn:aws:ec2:region:111122223333:volume/*", "arn:aws:ec2:region:111122223333:key-pair/*", "arn:aws:ec2:region:111122223333:security-group/*", "arn:aws:ec2:region:111122223333:subnet/subnet-1a2b3c4d" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:111122223333:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": "t2.micro" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } } ] }

특정 Systems Manager 파라미터에 대한 액세스 제한

다음 정책은 특정 이름의 Systems Manager 파라미터를 사용할 수 있는 액세스 권한을 부여합니다.

첫 번째 문은 시작 인스턴스 마법사에서 AMI를 선택할 때 Systems Manager 파라미터를 볼 수 있는 권한을 사용자에게 부여합니다. 두 번째 문은 사용자에게 prod-*라는 이름이 지정된 파라미터만 사용할 수 있는 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ssm:DescribeParameters" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameters" ], "Resource": "arn:aws:ssm:region:123456123456:parameter/prod-*" } ] }

예: 보안 그룹 작업

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

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

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

{ "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:region:111122223333:security-group/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Department": "Test" } } }, { "Effect": "Allow", "Action": [ "ec2:ModifySecurityGroupRules" ], "Resource": [ "arn:aws:ec2:region:111122223333:security-group-rule/*" ] } ]}

보안 그룹 생성 대화 상자 작업

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

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

  • ec2:DescribeVpcs: VPC 목록에서 기존 VPC의 목록을 조회합니다.

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

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

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

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

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

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

  • ec2:UpdateSecurityGroupRuleDescriptionsIngress: 수신(인바운드) 보안 그룹 규칙에 대한 설명을 추가하거나 업데이트합니다.

  • ec2:UpdateSecurityGroupRuleDescriptionsEgress: 발신(아웃바운드) 보안 그룹 규칙에 대한 설명을 추가하거나 업데이트합니다.

  • ec2:ModifySecurityGroupRules: 보안 그룹 규칙을 수정하려면

  • ec2:DescribeSecurityGroupRules: 보안 그룹 규칙을 나열하려면

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

{ "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" } } } ] }

예: 탄력적 IP 주소 작업

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

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

  • ec2:AllocateAddress: 탄력적 IP 주소를 할당합니다.

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

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

  • ec2:DescribeNetworkInterfacesec2:DescribeInstances: 주소 연결 화면에서 작업합니다. 탄력적 IP 주소를 연결할 수 있는 네트워크 인터페이스나 가용 인스턴스가 화면에 표시됩니다.

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

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

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

예: 예약 인스턴스 작업

다음 정책은 사용자가 계정의 예약 인스턴스를 보고 수정할 수 있을 뿐만 아니라 AWS Management Console에서 새 예약 인스턴스를 구매할 수 있도록 허용합니다.

이 정책을 통해 사용자는 계정의 모든 예약 인스턴스 및 온디맨드 인스턴스를 볼 수 있습니다. 개별 예약 인스턴스에 대해서는 리소스 수준 권한을 설정할 수 없습니다.

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

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