AWS Key Management Service (AWS KMS) で暗号化された Amazon Simple Storage Service (Amazon 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 署名バージョン 4 で署名されていない
AWS KMS で暗号化されたオブジェクトで Signature Version 2 を使用すると、エラーメッセージが表示される場合があります。一部の S3 REST API エンドポイントと AWS リージョンは、Signature Version 2 で署名されたリクエストを引き続きサポートします。ただし、サインインには Signature Version 4 の使用が推奨されます。詳細については、「Amazon S3 では AWS 署名バージョン 2 が無効 (非推奨) となります」を参照してください。
署名バージョン 2 で署名されたリクエストは、署名バージョン 2 をサポートするリージョンのバケットに送信できます。ただし、AWS KMS では、リクエストが署名バージョン 4 で署名されている必要があります。
バケット内のオブジェクトへのリクエストに使用した署名バージョンを確認するには、次の操作を行います。
- AWS CloudTrail イベントログを使用します。
- API の認証ヘッダーを確認します。ヘッダーには、AWS4-HMAC-SHA256 が含まれている必要があります。
注: 署名付き URL を生成した場合は、クエリパラメータに ?X-Amz-Algorithm=AWS4-HMAC-SHA256 が含まれているかどうかを確認します。このクエリパラメータが見つからない場合は、署名バージョン 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 認証情報で署名されていることを確認してください。