AWS Key Management Service (AWS KMS) で暗号化された Amazon Simple Storage Service (Amazon S3) オブジェクトにアクセスしようとしたところ、次のエラーが発生します。 「AWS KMS マネージドキーによるサーバー側の暗号化を指定するリクエストには、AWS 署名バージョン 4 が必要です」
解決策
「AWS KMS マネージドキーを使用してサーバー側の暗号化を指定するリクエストには、AWS 署名バージョン 4 が必要です」というエラーは、次の理由で発生する場合があります。
- リクエストが AWS 署名バージョン 4 で署名されていない。
- 匿名のリクエストを行った。
リクエストが AWS 署名バージョン 4 で署名されていない
AWS KMS で暗号化されたオブジェクトで署名バージョン 2 を使用すると、エラーメッセージが表示される場合があります。一部の S3 REST API エンドポイントと AWS リージョンは、署名バージョン 2 で署名されたリクエストを引き続きサポートします。ただし、署名バージョン 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 を使用せず、保護されていない接続経由でリクエストを行うと、次のエラーが発生します。
「operation_performed 操作の呼び出し時にエラーが発生しました (InvalidArgument): AWS KMS マネージドキーによるサーバー側の暗号化を指定するリクエストは、保護された接続経由で行う必要があります。」「AWS KMS マネージドキーによるサーバー側の暗号化を指定するリクエストには、AWS 署名バージョン 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 認証情報で署名されていることを確認してください。