AWS Key Management Service(AWS KMS)로 암호화된 Amazon Simple Storage Service(S3) 객체에 액세스하려고 했습니다. 다음과 같은 오류가 발생합니다. "Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4".
해결 방법
다음과 같은 이유로 인해 "Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4" 오류 메시지가 표시될 수 있습니다.
- 요청이 AWS Signature Version 4로 서명되지 않았습니다.
- 익명으로 요청했습니다.
요청이 AWS Signature Version 4로 서명되지 않음
AWS KMS 암호화 객체에 Signature Version 2를 사용하는 경우 오류 메시지가 표시될 수 있습니다. 일부 S3 REST API 엔드포인트 및 AWS 리전은 여전히 Signature Version 2를 사용하여 서명된 요청을 지원합니다. 하지만 Signature Version 4를 사용하여 로그인하는 것이 바람직합니다. 자세한 내용은 Amazon S3에 대한 AWS Signature Version 2 해제(사용하지 않음)를 참조하십시오.
Signature Version 2를 지원하는 리전의 버킷에 Signature Version 2로 서명된 요청을 보낼 수 있습니다. 하지만 AWS KMS에서는 Signature Version 4로 요청에 서명해야 합니다.
버킷의 객체에 대한 요청에 사용한 서명 버전을 식별하려면 다음 작업을 수행하십시오.
- AWS CloudTrail 이벤트 로그를 사용합니다.
- API의 인증 헤더를 확인합니다. 헤더에는 AWS4-HMAC-SHA256이 포함되어야 합니다.
참고: 미리 서명된 URL을 생성한 경우 쿼리 매개변수에 ?X-Amz-Algorithm=AWS4-HMAC-SHA256이 포함되어 있는지 확인합니다. 이 쿼리 파라미터를 찾을 수 없는 경우 Signature Version 4를 사용하도록 코드를 수정하십시오.
참고: AWS KMS 관리형 키를 지정하는 요청의 경우 SSL 또는 TLS를 사용해야 합니다. SSL 또는 TLS를 사용하지 않고 비보안 연결을 통해 요청하면 다음 오류가 발생합니다.
"An error occurred (InvalidArgument) when calling the operation_performed operation: Requests specifying Server Side Encryption with AWS KMS managed keys must be made over a secure connection.""Requests specifying Server Side Encryption with AWS KMS managed keys require AWS Signature Version 4"
익명 요청
익명 요청은 AWS 보안 인증으로 서명되지 않은 요청입니다. 예를 들어 브라우저 또는 HTTP 클라이언트의 객체 URL을 사용하여 S3 객체를 다운로드합니다.
객체 URL의 예시로는 https://bucketname.s3.region.amazonaws.com/folder/file.txt가 있습니다.
다음은 익명 요청을 위해 실행하는 curl 명령의 예시입니다.
curl -vo ./local/path/file.txt https://bucketname.s3.region.amazonaws.com/folder/file.txt
오류 메시지를 방지하려면 요청이 AWS 자격 증명으로 서명되었는지 확인하십시오.