この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
前回は、Private Distributionの作成と、CloudFrontユーザにREAD権限をアサインするところまで行いました。
今回は、実際にURLを発行してアクセスを試してみたいと思います。
最初に作成されたCloudFrontのURLにアクセスできないことを確認しておきます。 以下のURLにブラウザからアクセスします。
http://d3c647ktcg1tdv.cloudfront.net/AWS.png
キーペアIDが見つからないと怒られました。
署名付きURLの発行
CloudFrontキーペアIDと秘密鍵を指定して、署名付きURLを作成します。 以下がソースです。
今回は、現在日付から60秒間だけ有効なURLを発行してみます。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import org.jets3t.service.CloudFrontService;
import org.jets3t.service.CloudFrontServiceException;
import org.jets3t.service.security.EncryptionUtil;
public class SignedUrlGenerator {
public static void main(String[] args) {
try {
// CloudFront キーペアID
String keyPairId = "XXXXXXXXXXXXXXXXXXXX";
// 秘密鍵のパス
String privateKeyFilePath = "C:/XXXXXXXXXXXXXXXXXXXX.pem";
// 作成したCloudFrontのDistribution Domain
String distributionDomain = "d3c647ktcg1tdv.cloudfront.net";
// S3上のオブジェクトのパス
String s3ObjectKey = "AWS.png";
String policyResourcePath = "http://" + distributionDomain + "/"
+ s3ObjectKey;
// 秘密鍵をDER形式に変換します
byte[] derPrivateKey = EncryptionUtil
.convertRsaPemToDer(new FileInputStream(privateKeyFilePath));
// policyを作成します
// 現在日時 + 60秒 まで有効にします
String policy = CloudFrontService.buildPolicyForSignedUrl(
policyResourcePath, new Date(
System.currentTimeMillis() + 60000), null, null);
// 署名付きURLを発行します
String signedUrl = CloudFrontService.signUrl(policyResourcePath,
keyPairId, derPrivateKey, policy);
System.out.println("signedUrl=" + signedUrl);
} catch (CloudFrontServiceException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
生成されたURLを見てみましょう。
signedUrl=http://d3c647ktcg1tdv.cloudfront.net/AWS.png?Policy=eyJTdGF0ZW1lbnQiOiBbeyJSZXNvdXJjZSI6Imh0dHA6Ly9kM2M2NDdrdGNnMXRkdi5jbG91ZGZyb250Lm5ldC9BV1MucG5nIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhh
biI6eyJBV1M6RXBvY2hUaW1lIjoxMzI3OTE5OTk5fSwiSXBBZGRyZXNzIjp7IkFXUzpTb3VyY2VJcCI6IjAuMC4wLjAvMCJ9fX1dfQ__&Signature=T702HOnpiUmql952UHVA14mjWpPbyIYGYWNEOO2M7TCVQ34CBO2KN7rhxU1r-g8g0TgVEgDiLhWOWKd
qnnfobZqdveY67E3uYRd2rbv7C0sQrStb0-W8-98C6cJmBXrH-ZAus23T-8BagF6sPiAiiqYXf~~-3csVYCEtccC~HA_Key-Pair-Id=XXXXXXXXXXXXXXXXXXXX
やたら長いですね。これで1分間だけ有効なURLが発行されたことになります。
署名付きURLへアクセス
生成されたURLをブラウザで開きます。
画像が表示されました。
では、1分後に再度アクセスしてみます。
確かに見れませんね。無事成功しました!
まとめ
Amazon CloudFrontで、署名付きURLを使うことで、高速かつセキュリティにもかなったアクセスが実現できます。
以前紹介した、Amazon CloudFrontからRTMPストリーミングでもこの署名付きURLが発行出来るようですし、とても実用性があると感じました。