.NET 4.0 用の AWS SDK v2.3.44.0 を使用しており、クライアントがオブジェクトをダウンロードするための署名付き URL を生成しようとしています。すべてのオブジェクトは S3 バケットに保存され、aws:kms
サーバー側の暗号化方式を使用して暗号化されます。
AmazonS3Client
のGetPreSignedURL
メソッドを使用して URL を生成しています。
私のAmazonS3Client
オブジェクトは次のように作成されます:
var client = new AmazonS3Client(new AmazonS3Config
{
RegionEndpoint = RegionEndpoint.USEast1,
SignatureVersion = "4"
});
私のGetPresignedUrlRequest
オブジェクトは次のように作成されます:
var request = new GetPreSignedUrlRequest
{
BucketName = bucket,
Key = key,
Expires = expires,
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
};
実行すると、次client.GetPreSignedURL(request)
のような URL が生成されます (読みやすいようにフォーマットされ、サニタイズされています)。
https://{bucket}.s3.amazonaws.com/{key}?AWSAccessKeyId={access key}
&Expires={timestamp}
&Signature=AWS4-HMAC-SHA256%20Credential%3D{access key}%2F20150626%2Fus-east-1%2Fs3%2Faws4_request%2C%20SignedHeaders%3Dhost%3Bx-amz-content-sha256%3Bx-amz-date%3Bx-amz-server-side-encryption%2C%20Signature%3D{signature}
この URL に移動すると、エラーの XML 内訳が表示されます: SignatureDoesNotMatch
.
この URL は、Amazonがドキュメントで説明している URL とは異なります。また、AWS プラグインを使用して Visual Studio から URL を生成すると、次のような作業URL が生成されます (ここでもフォーマットとサニタイズが行われています)。
https://{bucket}.s3.amazonaws.com/{key}?
X-Amz-Expires=900
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential={access key}/20150626/us-east-1/s3/aws4_request
&X-Amz-Date=20150626T195148Z
&X-Amz-SignedHeaders=host
&X-Amz-Signature={signature}
aws:kms
暗号化されたファイルをダウンロードするために署名済みの URL が適切に生成されないというのは、何が問題なのですか?