3

.NET 4.0 用の AWS SDK v2.3.44.0 を使用しており、クライアントがオブジェクトをダウンロードするための署名付き URL を生成しようとしています。すべてのオブジェクトは S3 バケットに保存され、aws:kmsサーバー側の暗号化方式を使用して暗号化されます。

AmazonS3ClientGetPreSignedURLメソッドを使用して 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 が適切に生成されないというのは、何が問題なのですか?

4

1 に答える 1