Amazon CloudFrontでプライベートコンテンツにアクセス その2
前回は、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が発行出来るようですし、とても実用性があると感じました。