태그가 지정된 AMI에서만 Amazon EC2 인스턴스를 시작하도록 액세스를 제한하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 9월 3일

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

해결 방법

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

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

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

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

참고: 이 정책을 시행하면 사용자가 EC2 인스턴스를 시작할 때 역할을 나열할 수 있습니다. 그러나 iam:PassRole 권한이 없는 사용자는 연결된 역할을 사용하여 인스턴스를 시작할 수 없습니다.

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

{
  "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에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?