🐙

CloudFrontのPublicKeyとKeyGroupをCloudFormationで作成する

2021/03/23に公開

CloudFrontのPublicKeyとKeyGroupをCloudFormationで作成したかったが、CloudFormationの日本語のドキュメントにはなく英語版にしかなかったため少し手間取ったのでメモ。

CloudFrontのキーペアとは

CloudFrontにおけるキーペアは署名付きURLと署名付きCookieを使用してコンテンツの配信を行う際に必要になります。
署名付きURL ・ Cookieは主にプライベートコンテンツを配信する際に用いるもので、

署名付きURL

  • 個別のコンテンツ
  • ユーザーがCookieを使用出来ない場合

署名付きCookie

  • 複数コンテンツの配信
  • URLの変更をしたくない場合
    • 署名付きURLの場合は長いURLが発行され、エンドポイントに対してGETすることになる
    • Cookieの場合は例えばサーバー側でSet-CookieにCookieをセットしてあげることで、CloudFrontのエンドポイントがそのまま使える

上記のような感じで使い分けます。
他にも違いがいくつかあるので、ドキュメントを要参照です。

キーペアの発行

署名付きURL or Cookieの発行には署名者が必要で現時点だと以下の2つから選択可能です。

  • AWSアカウント
  • 信頼されたキーグループ

詳しい発行手順はたくさん良記事があるので割愛します。

ここからが本題で、信頼されたキーグループを用いて署名を行う場合、PublicKeyとKeyGroupを作成する必要があります。
この2つがコンソール画面からだとすぐ見つかるのですが、CloudFormationで作成しようとドキュメントを探したのですが、見つかりませんでした。
色々探した結果、ドキュメントの言語を英語にしたところ見つかったので、サンプルコードを残します。

サンプルコード

# ----------
# PublicKey
# ----------
PublicKey:
    Type: AWS::CloudFront::PublicKey
    Properties: 
        PublicKeyConfig: 
            CallerReference: "CloudFront-Cookie"
            EncodedKey: | # PubicKeyなのでインラインでも大丈夫そう。SecretManagerやParameterStoreを指定するのもあり
                -----BEGIN PUBLIC KEY-----
                ~~~~~~~~~~~~~~~~~~~~~~~~~~
                -----END PUBLIC KEY-----
            Name: "CloudFront-Public-Key"
            Comment: "sample"

# ----------
# KeyGroup
# ----------
KeyGroup:
    Type: AWS::CloudFront::KeyGroup
    Properties: 
        KeyGroupConfig: 
            Items:
                - !Ref PublicKey # 上で作成したPublicKey
            Name: "KeyGroup"
            Comment: "sample"

またDistributionのCacheBehaviorも設定を行う必要があります。 ドキュメント

Discussion