Amazon Elastic Compute Cloud(Amazon EC2)인스턴스를 태그가 지정된 AMI(Amazon 머신 이미지)에서만 시작할 수 있도록 사용자 액세스를 제한하고 싶습니다. AMI 태그를 사용하여 EC2 인스턴스를 시작하도록 액세스를 제한하려면 어떻게 해야 합니까?

태그가 지정된 AMI를 사용하여 EC2 인스턴스를 시작하도록 사용자 액세스를 제한하려면 기존 인스턴스에서 AMI를 생성하거나 기존 AMI를 사용하고 해당 AMI에 태그를 추가합니다. 그런 다음 태그가 지정된 AMI를 사용하는 인스턴스만 시작할 수 있도록 사용자 권한을 제한하는 태그 조건을 사용하여 사용자 지정 IAM 정책을 생성합니다.

이 예제의 IAM 정책에는 세 개의 Sid(문 ID)가 있습니다.

  • Sid ReadOnlyAccess는 사용자가 계정의 모든 EC2 리소스를 Describe*(Describe로 시작하는 모든 EC2 작업이 포함됨)를 사용하여 볼 수 있도록 합니다. 또한 Sid ReadOnlyAccess는 사용자가 EC2 인스턴스의 콘솔 출력 및 스크린샷을 확인할 수 있도록 합니다. 자세한 내용은 GetConsoleOutputGetConsoleScreenshot 섹션을 참조하십시오. DescribeAlarmsGetMetricStatistics에 대한 CloudWatch 권한은 EC2 인스턴스에 대한 기본 상태 정보를 Amazon EC2 콘솔에 표시할 수 있도록 합니다. ListInstanceProfiles에 대한 IAM 권한은 EC2 인스턴스를 시작할 때 [Configure Instance Details] 페이지의 IAM 역할 목록에 기존 인스턴스 프로필을 나열할 수 있도록 합니다. 그러나 ListInstanceProfiles API는 사용자가 IAM 역할을 EC2 인스턴스에 연결하는 것을 허용하지 않습니다.
  • Sid ActionsRequiredtoRunInstancesInVPC는 모든 인스턴스, 키 페어, 보안 그룹, 볼륨, 네트워크 인터페이스 또는 us-east-1의 서브넷에서 각 리소스에 대한 ARN을 지정하고 리소스 레벨 권한을 사용하여 RunInstances API를 수행할 수 있는 권한을 사용자에게 부여합니다.
  • Sid LaunchingEC2withAMIsAndTags는 AMI의 환경 태그가 "Prod"로 설정되고 인스턴스가 us-east-1에 있는 경우, 사용자가 AMI를 사용하여 EC2 인스턴스를 시작할 수 있도록 합니다. 리소스 레벨 권한은 us-east-1에 있는 모든 AMI의 ARN으로 설정되며 조건은 EC2:ResourceTag/Environment tag 키의 값과 키 값 "Prod"를 일치합니다.

이 정책은 사용자가 EC2 인스턴스를 시작할 때 역할을 나열하는 것을 허용하지만 iam:PassRole 권한이 없는 사용자는 연결된 역할을 사용하여 인스턴스를 시작할 수 없습니다. 이 정책은 사용자가 새 보안 그룹을 생성하는 것을 허용하지 않습니다. 사용자는 EC2:CreateSecurityGroup 권한이 부여되지 않는 한 기존 보안 그룹을 선택하여 EC2 인스턴스를 시작해야 합니다. EC2:CreateSecurityGroup은 보안 그룹만 생성할 수 있고 규칙을 추가하거나 수정할 수 없는 액세스 권한을 부여합니다. 인바운드 규칙을 추가하려면 인바운드 EC2:AuthorizeSecurityGroupIngress API 작업 및 아웃바운드 EC2:AuthorizeSecurityGroupEgress API 작업에 대한 권한이 있어야 합니다.

다음 IAM 정책은 RunInstances 작업에 필요한 리소스에 대해 리소스 레벨 권한을 사용합니다. RunInstances에 필요한 리소스에 대한 자세한 내용은 RunInstances에 대한 리소스 수준의 권한을 참조하십시오.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ReadOnlyAccess",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "ec2:GetConsole*",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:GetMetricStatistics",
                "iam:ListInstanceProfiles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "ActionsRequiredtoRunInstancesInVPC",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:us-east-1:AccountId:instance/*",
                "arn:aws:ec2:us-east-1:AccountId:key-pair/*",
                "arn:aws:ec2:us-east-1:AccountId:security-group/*",
                "arn:aws:ec2:us-east-1:AccountId:volume/*",
                "arn:aws:ec2:us-east-1:AccountId:network-interface/*",
                "arn:aws:ec2:us-east-1:AccountId:subnet/*"
            ]
        },
        {
            "Sid": "LaunchingEC2withAMIsAndTags",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:us-east-1::image/ami-*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Environment": "Prod"
                }
            }
        }
    ]
}

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2018년 5월 9일