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

3분 분량
0

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

해결 방법

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

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

  • Sid ReadOnlyAccess는 사용자가 Describe*를 사용하여 계정의 모든 EC2 리소스를 보는 것을 허용합니다. 여기에는 Describe로 시작되는 모든 EC2 작업이 포함됩니다. 또한 Sid ReadOnlyAccess를 부여하면 사용자가 EC2 인스턴스의 콘솔 출력 및 스크린샷을 확인할 수 있습니다. 자세한 내용은 GetConsoleOutputGetConsoleScreenshot을 참조하세요. DescribeAlarmsGetMetricStatistics에 대한 Amazon 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에서 Environment 태그가 Prod 값으로 설정되었고 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"
        }
      } 
    }
  ]
}