AWS KMS 키 정책 오류 "정책에 유효하지 않은 보안 주체가 한 개 이상 있는 구문이 있음"을 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 3월 22일

AWS Key Management Service(AWS KMS) 키 정책을 수정하려고 했는데 AWS 관리 콘솔에서 다음과 유사한 오류가 발생했습니다.

“PutKeyPolicy 요청이 실패했습니다.

MalformedPolicyDocumentException - 정책에 하나 이상의 잘못된 보안 주체가 있는 구문이 포함되어 있습니다.”

AWS KMS 키 정책은 Amazon 리소스 이름(ARN)을 포함하지 않고, AIDACKCEVSQ6C2EXAMPLE과 같은 고유 ID를 가진 보안 주체를 포함합니다.

간략한 설명

지정된 키 정책이 구문론적으로나 의미론적으로 올바르지 않기 때문에 요청이 거부되면 AWS KMS API 호출 PutKeyPolicy 요청이 실패합니다.

해결 방법

JSON 구문

JSON 정책 문서 리소스 유형이 유효한지 확인합니다. JSON 구문 오류를 해결하려면 JSON 정책 문서를 JSON Beautifier에 붙여 넣어 형식을 확인합니다. 불필요한 문자를 제거하고 누락된 문자를 추가합니다. 중복된 JSON 정책 요소와 중복된 SID 값이 있는지 확인하고 제거합니다.

잘못된 보안 주체

JSON 정책에서 보안 주체 요소를 확인하고 AWS Identity and Access Management(IAM) 엔터티가 존재하는지 확인합니다. IAM 자격 증명이 유효한 ARN으로 올바르게 지정되었는지 확인합니다.

참고: 리소스 유형을 지정하는 ARN 부분에는 와일드카드를 사용할 수 없습니다.

IAM 자격 증명을 생성할 때 Bob 또는 Developers와 같은 같은 친숙한 이름을 지정합니다. 보안상의 이유로 인해 이러한 IAM 개체에는 AIDACKCEVSQ6C2EXAMPLE과 같은 고유 ID도 할당됩니다.

Alice라는 이름의 IAM 사용자를 AWS KMS 키 정책에 정의한 경우를 예로 들어 보겠습니다. 그런 다음 Alice는 퇴사합니다. 그 이후에 Alice라는 이름의 새 사용자가 입사하여 동일한 이름을 가진 IAM 사용자가 생성되었습니다. 고유 ID를 통해 새로운 Alice는 이전의 Alice에게 부여되었던 권한을 상속받을 수 없습니다.

키 정책에서 사용되지 않는 고유 ID를 제거합니다. 자세한 내용은 AWS KMS에서 키 정책 사용을 참조하세요.

참고: AWS KMS 키 정책에 다른 계정이나 보안 주체에 대한 권한이 있는 경우, 해당 키 정책은 그 KMS 키를 포함하는 AWS 리전에서만 유효합니다. 자세한 내용은 키 정책 개요를 참조하세요.

잘못된 AWS 서비스

AWS 서비스가 보안 주체로 나열된 경우 AWS KMS에서 해당 서비스를 지원하는지 확인합니다. 보안 주체는 IAM 엔터티여야 하며 IAM 엔터티를 대신하여 요청하는 AWS 서비스에 kms:ViaService를 사용해야 합니다.

AWS 서비스가 AWS KMS를 직접 호출하는지 확인합니다. 모든 AWS 서비스가 Amazon Elastic Compute Cloud(Amazon EC2)와 같은 AWS KMS를 직접 호출하는 것은 아닙니다. 대신 Amazon EC2와 같은 AWS 서비스는 AWS 계정의 보안 주체를 대신하여 호출합니다. Amazon Simple Notification Service(Amazon SNS)와 같이 AWS KMS를 직접 호출하는 AWS 서비스는 보안 주체 요소서비스 보안 주체를 포함해야 합니다.

자세한 내용은 kms:ViaService 조건 키를 지원하는 서비스를 참조하세요.

옵트인 AWS 리전

수신자 계정 내에 키가 있는 AWS 리전에 옵트인하지 않은 AWS 계정과 공유된 AWS KMS 키는 해당 리전에서 유효하지 않습니다.

수신자 계정에서 AWS 리전이 활성화되어 있는지 확인하거나 AWS 계정 및 수신자 계정에 있는 활성화된 리전에서 다른 AWS KMS 키를 공유해야 합니다. 자세한 내용은 Managing AWS Regions를 참조하세요.


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


결제 또는 기술 지원이 필요하세요?