S3署名付きURLをCloudFront経由で使う (java.security.PrivateKeyを指定して)

タイトルの通りなんですけど、S3の署名付きURLをCloudFront経由で使う例です。
ちょっと困った事があったのでここにメモしておきます。

単純にpemファイルなどがパス指定で取得できるのであれば

String privateKey = "プライベートキーへのパス";
String keyPairId  = "hogehoge";
Date expiration = /* 有効期限 */;
String distributionDomain = "xxxxxxx.com"; // CloudFrontに指定してるドメイン
String objectKey = "sample.jpg";

String url
 = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(
    https, distributionDomain, privateKey, objectKey, keyPairId, expiration);

こんな感じで取得できる。

でもkeyをアプリ独自に暗号化してた場合などではファイルを直接指定することができない場合がありますね。
で、java.security.PrivateKeyを使って署名付きURLを欲しかったのですが、丁度良いオーバーロードがありませんでした。

どうすべ?と思ってCloudFrontUrlSignerのソースを見るとSignerUtilsを使えば良さそうな事がわかった。

java.security.PrivateKey privateKey = /* キーを作成 */;

String resourcePath 
  = SignerUtils.generateResourcePath(https,distributionDomain,objectKey);

String url
  = CloudFrontUrlSigner.getSignedURLWithCannedPolicy(resourcePath,keyPairId,privateKey,expiration)

こんな感じ。