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

3분 분량
0

사용자가 태그가 지정된 Amazon Machine Image(AMI)에서만 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작하도록 사용자 액세스를 제한하고 싶습니다.

해결 방법

사용자가 태그가 지정된 AMI에서만 EC2 인스턴스를 시작하도록 액세스를 제한하려면 다음 조치 중 하나를 수행하십시오.

  • 기존 인스턴스에서 AMI를 생성합니다.
  • 기존 AMI를 사용한 다음 AMI에 태그를 추가합니다.

그런 다음 사용자 지정 AWS Identity and Access Management(IAM) 정책을 생성합니다. IAM 정책은 태그가 지정된 AMI를 사용하는 인스턴스만 시작하도록 사용자 권한을 제한하는 태그 조건을 사용합니다.

다음 예제 IAM 정책에서는 이러한Sid(문 ID) 값이 사용됩니다:

  • ReadOnlyAccess를 통해 사용자는 계정에서 Describe로 시작하는 모든 EC2 작업을 포함하는 Describe*를 사용하여 EC2 리소스를 볼 수 있습니다. 또한 ReadOnlyAccess를 사용하면 인스턴스의 콘솔 출력콘솔 스크린샷을 가져올 수 있습니다. DescribeAlarmsGetMetricStatistics에 대한 Amazon CloudWatch 권한을 사용하면 인스턴스에 대한 상태 정보를 Amazon EC2 콘솔에 표시할 수 있습니다. ListInstanceProfiles에 대한 IAM 권한을 사용하면 기존 인스턴스 프로파일을 IAM 역할 목록에 표시할 수 있습니다. 인스턴스를 시작하면 인스턴스 세부 정보 구성 페이지에 IAM 역할 목록이 나타납니다. 그러나 ListInstanceProfiles API는 사용자가 인스턴스에 IAM 역할을 연결할 수 없습니다.
  • ActionsRequiredtoRunInstancesInVPC는 사용자에게 RunInstances API를 수행할 수 있는 권한을 부여합니다. us-east-1 AWS 리전에서 인스턴스, 키 쌍, 보안 그룹, 볼륨, 네트워크 인터페이스 또는 서브넷을 모두 사용할 수 있습니다. 리소스 수준 권한은 각 리소스의 ARN을 지정합니다.
  • LaunchingEC2withAMIsAndTags를 사용하면 사용자가 AMI를 사용하여 인스턴스를 실행할 수 있습니다. AMI에는us-east-1 리전에서 값이 Prod로 설정된 Environment 태그가 있어야 합니다. 리소스 수준 권한은 us-east-1 리전에 있는 모든 AMI에 대해 ARN으로 설정됩니다. 조건은 EC2:ResourceTag/Environment 태그 키와 Prod 키 값의 값과 일치합니다.

다음 IAM 정책은 RunInstances API 작업에 필요한 리소스에 대해 supported resource-level permissions를 사용합니다.

참고:

  • 이 정책을 통해 사용자는 인스턴스를 시작할 때 역할을 나열할 수 있습니다. 하지만 사용자는 iam:PassRole 권한이 있는 경우에만 연결된 역할로 인스턴스를 시작할 수 있습니다.
  • 이 정책은 사용자가 새 보안 그룹을 만드는 것을 허용하지 않습니다. 사용자에게 CreateSecurityGroup EC2 권한이 없는 경우 기존 보안 그룹을 선택하여 EC2 인스턴스를 시작해야 합니다. EC2:CreateSecurityGroup API 작업은 보안 그룹을 생성할 수 있는 액세스 권한만 부여합니다. 작업은 규칙을 추가하거나 수정하지 않습니다. 인바운드 규칙을 추가하려면 사용자에게 인바운드 AuthorizeSecurityGroupIngress EC2 API 동작 및 아웃바운드 AuthorizeSecurityGroupEgress EC2 API 동작에 대한 권한이 있어야 합니다.
  • 이 정책은 사용자가 인스턴스 이름을 연결하거나 EC2 인스턴스 리소스에 태그를 수정 및 연결하는 것을 허용하지 않습니다. 인스턴스를 만들 때 CreateTags 권한이 없는 사용자는 태그와 이름을 비워 두어야 합니다.
{  "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 공식업데이트됨 일 년 전