2015-10-08 8 views
9

イメージはAmazon S3バケットにアップロードされます。私は予約済みURLをAmazonサーバーから取得する必要があります。また、そのURLの有効期限を設定したいと思います。それには最大17日しかかかりません。しかし、私は1年間の有効期限を設定することはできません。Amazon S3バケットの予約済みURLの有効期限を現在の日付から1年間で設定する方法

あなたが事前に署名したURLを「取得」しません
 Calendar cal = Calendar.getInstance(); 
     cal.add(Calendar.YEAR, 1); 
     Date nextYear = cal.getTime(); 

    GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(
       "bucketName", "accessname"); 
     generatePresignedUrlRequest.setMethod(HttpMethod.GET); 
     generatePresignedUrlRequest 
       .setExpiration(nextYear); 
     URL url = s3client 
       .generatePresignedUrl(generatePresignedUrlRequest); 
     bucketURL = url.toString(); 
+0

TL:DR-v4署名アルゴリズムはわずか7日間です。 (ドキュメントのv4について:この最新の署名バージョンは、すべての地域でサポートされており、2014年1月30日以降の新しい地域では署名バージョン4のみがサポートされます)。したがって、必要に応じて事前設定されたURLを生成する方がよいでしょう。 – HopeKing

答えて

13

「サーバから。」署名の計算はクライアント上で行われます。事前に署名されたURLは実際にはサービスではなくマシン上で計算されます。

現在のSDKを使用している場合は、おそらくSignature V4を使用している可能性があります。署名されたURLにX-Amz-Signature=が含まれている場合、これはV4を確認します。以前のV2アルゴリズムでは、署名付きURLにはSignature=しか使用されません。

あなたの署名が実際にV4であれば、あなたが意図的に制限見ている:

を使用すると、署名の計算に使用する署名鍵がアップのために有効であるためpresigned URLは、7日間の最大のために有効であることができます〜7日間。

http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

すでにV2を使用している場合、あなたはV4を使用している場合は、に切り替えることで制限を回避できたとして後半に2038年のように有効期限でのURLに署名することができるはずですV2を使用してくださいが、これはお勧めできません。 V2はフランクフルトのような新しいS3地域ではサポートされていませんし、必要に応じてAWSアクセスキーを回すと、最終的なキー無効化によってそのキーで作成された署名も無効になります。

ほとんどの場合、必要に応じて署名付きURLを生成する方が正しい方法です。この操作は、前述のようにS3サービスとの対話を必要とせず、通常はリア​​ルタイムで実行できます。

「ダイレクトリンク」への特定のユーザーアクセス権を付与する必要がある場合は、ユーザーの資格情報を評価できるエンドポイントをアプリケーションに作成することを検討してください。この時点で、署名付きのURLを生成し、 HTTP 302応答。

+0

V2に切り替えるにはどうすればよいですか?グローバルなプロパティはありますか? – Ruslan

+1

V2は新しい地域@Ruslanでは動作しませんし、V4はほとんどの場合非常に優れたアルゴリズムであるため、それ以上は可能かどうかはわかりませんが、おそらくそうです。どの地域で作業していますか、どのSDKを使用していますか?私はこの答えの中で忘れてはいけないと思っていたものがCloudFrontです。 CloudFrontはS3とは異なる認証メカニズムを使用しますが、バケットの前で使用できます。 CloudFrontの署名付きURLは短い時間間隔に限定されず、S3では使用できない2つのオプションがあります。署名されたURLを単一のIPアドレスから使用するように制限し、開始有効時間も設定できます。 –

+1

私は古い地域にいると思います。答えをありがとう、しかし私はすでに解決策を見つけました:-) clientConfiguration.setSignerOverride( "S3SignerType") – Ruslan

関連する問題