전체 Amazon EC2 권한이 있는 IAM 사용자 또는 역할이 EC2 인스턴스를 시작할 수 없는 이유가 무엇인가요?

최종 업데이트 날짜: 2022년 5월 18일

AWS Identity and Access Management(IAM) 엔터티(사용자, 그룹, 역할)에는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 전체 권한이 있습니다. Amazon EC2 인스턴스를 시작하려 했더니 보류 중 상태에서 중지됨으로 변경되었습니다.

간략한 설명

인스턴스에 Amazon Elastic Block Store(Amazon EBS)가 연결되어 있는지 확인합니다. Amazon EBS 볼륨이 AWS Key Management Service(AWS KMS) 키를 사용하여 암호화된 경우 권한 문제가 있을 수 있습니다. StartInstances API 작업을 호출하는 IAM 엔터티는 Amazon EC2 서비스에 대한 권한 부여를 생성할 권한이 있어야 합니다. 권한 부여를 통해 Amazon EC2는 AWS KMS 키(KMS key)를 해독할 수 있습니다.

Amazon EBS 볼륨은 GenerateDataKeyWithoutPlaintext API 호출 요청을 AWS KMS로 전송하여 새 데이터 키를 생성하고 이를 KMS 키로 암호화합니다. 암호화된 데이터 키는 Amazon EBS 볼륨으로 다시 전송된 다음 Amazon EC2 인스턴스에 연결됩니다. 이 시나리오에서 KMS 키는 EC2 인스턴스와 KMS 키의 동일한 AWS 계정에 있습니다.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

1. Amazon EC2 인스턴스가 중지됨 상태인 이유를 확인하려면 다음과 유사한 AWS CLI 명령을 실행합니다.

aws ec2 describe-instances --instance-id your-instance_ID --query "Reservations[*].Instances[*].StateReason"

출력 예시:

[
  [
    {
      "Message": "Client.InternalError: Client error on launch",
      "Code": "Client.InternalError"
    }
  ]
]

이 오류는 루트 볼륨 또는 추가로 연결된 볼륨이 암호화되었음을 의미합니다. 복호화를 위해 AWS KMS 키에 액세스할 권한이 없습니다.

2. (선택 사항) 이벤트 이름 CreateGrant에 대한 AWS CloudTrail 이벤트를 필터링하기 위한 지침을 따릅니다.

출력 예시:

"errorMessage": "User: arn:aws:iam::123456789012:user/test is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"

이 오류는 IAM 엔터티에 Amazon EC2가 데이터 키를 해독할 수 있는 CreateGrant 권한이 없기 때문에 인스턴스를 시작할 수 없음을 의미합니다.

해결 방법

키 유형을 찾으려면 다음 단계를 수행합니다.

1.    Amazon EC2 콘솔을 열고 인스턴스를 선택합니다.

2.    인스턴스 ID(Instance ID)에서 Amazon EC2 인스턴스 ID를 선택한 다음 스토리지(Storage) 탭을 선택합니다.

3.    볼륨 ID(Volume ID)에서 암호화된 볼륨의 볼륨 ID를 선택합니다.

4.    KMS 키 ID(KMS key ID)에서 키 ID를 복사합니다.

5.    동일한 AWS 리전에서 AWS KMS 콘솔(AWS KMS console)을 엽니다.

6.    AWS 관리형 키(AWS managed keys)고객 관리형 키(Customer managed keys)4단계에서 복사했던 KMS 키 ID를 붙여 넣습니다.

7.    키 ID를 선택합니다.

8.    일반 구성(General configuration)설명(Description)에서 KMS 키 유형을 기록해 둡니다.

다음과 유사한 IAM 정책을 IAM 엔터티에 연결합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant"
      ],
      "Resource": [
        "arn:aws:kms:eu-west-1:123456789012:key/8e3426b8-87b4-434c-ae74-8e63dadf354a"
      ],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
  ]
}

kms:GrantIsForAWSResource 조건 키를 사용하면 IAM 엔터티가 EC2 인스턴스와 같은 AWS 리소스를 사용하여 KMS 키에 대한 권한 부여만 생성할 수 있습니다. 이 정책은 IAM 엔터티가 다른 IAM 엔터티에 대한 권한 부여 생성을 허용하지 않습니다.

(선택 사항) AWS 계정 루트 사용자(AWS account root user) 계정에 다음과 유사한 KMS 키에 대한 전체 액세스 권한을 허용합니다.

{
  "Sid": "Enable IAM User Permissions",
  "Effect": "Allow",
  "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
  "Action": "kms:*",
  "Resource": "*"
}

KMS 키 정책에 IAM 엔터티를 추가하여 CreateGrant API 작업을 허용할 수도 있습니다.

참고:


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?