制限付きURLを発行しS3からファイルをダウンロードしてみる

CloudデザインパターンのPrivate DistributionパターンをJavaで作る際のメモ
CDP:Private Distributionパターン - AWS-CloudDesignPattern

AWSCredentials cre = new BasicAWSCredentials(【AWSアクセスキー】, 【AWSシークレットキー】);
AmazonS3Client client = new AmazonS3Client(cre);

// ダウンロードしたいファイルを指定
String bucketName = "【バケット名】";
String key = "【バケット配下のパス】【ファイル名】";

// 有効期限(ここでは1分)
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, 1);
Date limit = cal.getTime();

// URLを生成
URL url = client.generatePresignedUrl(new GeneratePresignedUrlRequest(
		bucketName, key).withExpiration(limit));

// 生成したURLに対してHttpClientでGETする
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet request = new HttpGet(url.toURI());
HttpResponse response = httpclient.execute(request);

// ファイルをローカルに出力
System.out.println(response.getStatusLine());
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
	FileOutputStream fos = new FileOutputStream(
			"src/main/resources/output/" + FilenameUtils.getName(key));
	IOUtils.copy(response.getEntity().getContent(), fos);
}

有効期限はGETリクエストの送信までの時間をセットする必要があるようで
有効期限が切れたリンクでは(HTTP/1.1 403 Forbidden)が返ります

生成されるURL

https://【バケット名】.s3.amazonaws.com/【バケット配下のパス】【ファイル名】
	?Expires=1347518831
	&AWSAccessKeyId=【AWSアクセスキー】
	&Signature=zxM%2FZIzyq%2BrkvWVeKfUnDfDWucs%3D

有効期限(Expires)の単位は秒。有効期限を指定しないで生成すると900秒の設定となる
900秒より大きい値を指定したい場合は有効期限を指定すればOK