내 AWS Identity and Access Management(AWS IAM) 엔터티에 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 대한 권한이 있습니다. 인스턴스를 시작하려고 했는데 대기 중 상태에서 중지됨 상태로 변경되었습니다.
해결 방법
EC2 인스턴스의 중지됨 상태 원인 파악
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.
Amazon Elastic Block Store(Amazon EBS) 볼륨을 EC2 인스턴스에 연결한 경우 볼륨 암호화를 확인하십시오. AWS Key Management Service(AWS KMS) 키로 EBS 볼륨을 암호화한 경우 권한 문제가 발생할 수 있습니다. StartInstances API 작업을 호출하는 IAM 주체에는 Amazon EC2에 대한 권한 부여를 만들 수 있는 kms:CreateGrant 권한이 있어야 합니다. Amazon EC2는 권한 부여를 통해 AWS KMS 키를 사용하여 볼륨의 데이터 키를 해독할 수 있습니다.
EBS 볼륨이 AWS KMS로 GenerateDataKeyWithoutPlaintext API 호출을 보내면 AWS KMS는 새 데이터 키를 만들고 AWS KMS 키로 암호화합니다. AWS KMS는 암호화된 데이터 키를 EBS 볼륨으로 보냅니다. 그러면 볼륨이 데이터 키를 인스턴스에 연결합니다. 데이터 키는 인스턴스 및 AWS KMS 키와 동일한 AWS 계정에 있습니다.
인스턴스가 중지됨 상태인 이유를 확인하려면 describe-instances AWS CLI 명령을 실행합니다.
aws ec2 describe-instances --instance-id your-instance-id --query "Reservations[*].Instances[*].StateReason"
참고: your-instance-id를 인스턴스 ID로 바꾸십시오.
출력 예시:
[
[
{
"Message": "Client.InternalError: Client error on launch",
"Code": "Client.InternalError"
}
]
]
위 오류는 사용자가 루트 볼륨 또는 연결된 추가 볼륨을 암호화했다는 의미일 수 있습니다. AWS KMS 키에 액세스하여 해독할 권한이 없습니다.
또한 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 권한이 없음을 의미합니다. 따라서 인스턴스를 시작할 수 없습니다.
참고: AWS 관리형 키를 사용하는 경우 주체의 IAM 정책 또는 서비스 제어 정책(SCP)에 명시적 거부가 있는 경우에만 이 오류가 발생합니다. AWS 관리형 키를 사용하는 데 필요한 추가 IAM 권한은 없습니다.
AWS KMS 키 유형 찾기
다음 단계를 완료하십시오.
- Amazon EC2 콘솔을 엽니다.
- 탐색 창에서 인스턴스를 선택합니다.
- 인스턴스 ID를 선택한 다음 스토리지를 선택합니다.
- 볼륨 ID에서 암호화된 볼륨의 볼륨 ID를 선택합니다.
- KMS 키 ID에서 AWS KMS 키 ID를 복사합니다.
- 동일한 AWS 리전에서 AWS KMS 콘솔을 엽니다.
- 탐색 창에서 고객 관리형 키를 선택합니다. 그런 다음 4단계에서 AWS KMS 키 ID를 검색합니다.
- AWS KMS 키 ID를 선택합니다.
- 일반 구성의 설명에서 AWS KMS 키 유형을 기록해 둡니다.
IAM 정책 연결
다음 예시와 같이 IAM 주체에 IAM 정책을 연결합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": [
"arn:aws:kms:region:123456789012:key/ExampleKey"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
]
}
kms:GrantIsForAWSResource 조건 키는 IAM 주체가 AWS 리소스를 사용하여 AWS KMS 키에 대한 권한 부여만 만들도록 합니다. 이 정책은 IAM 주체가 다른 IAM 주체에 대한 권한 부여를 만드는 것을 허용하지 않습니다. Amazon EC2에 대한 액세스를 제한하려면 kms:ViaService 조건 키를 사용하십시오.
다음 예시와 같이 계정의 키 정책을 통해 IAM 보안 주체에 추가하는 IAM 권한을 활성화해야 합니다.
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:root"},
"Action": "kms:*",
"Resource": "*"
}
또한 키 정책에 IAM 주체를 추가하여 CreateGrant API 작업을 허용할 수도 있습니다.
AWS KMS 키와 IAM 주체가 동일한 계정에 있는 경우 키 정책에 주체를 명시적으로 포함할 수 있습니다. AWS KMS 키에 액세스할 때는 IAM 권한이 필요하지 않습니다.
키 정책을 통해 명시적 권한을 부여하려면 키 정책에 다음 문을 추가하십시오.
{
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/Role_Name"
},
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": [
"*"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
작업을 수행하는 데 필요한 권한에 최소 권한을 부여하는 것이 가장 좋습니다.
Amazon EC2 Auto Scaling 그룹을 사용하여 인스턴스를 만드는 경우 암호화된 볼륨과 함께 사용하기 위한 필수 AWS KMS 키 정책을 참조하십시오.
관련 정보
Amazon EBS 암호화
인스턴스가 즉시 종료됨