主に個人的作業メモ。
作成する CloudFront の性質
-
/m/*
-> 署名付きCookieがないと閲覧できない、API Gateway (Lambda) が実体を持つコンテンツ -
/v1/*
-> API Gateway (Lambda) が実体を持つコンテンツ -
/* (Default)
-> S3 に実体がある静的コンテンツ
経緯
2021年2月現在、CloudFront には以下の機能が追加されている。
- Root権限で作成した鍵ではなく、ユーザー権限で公開鍵・KeyGroup を作成して、そのKeyGroup内で署名した Cookie に基づいて特定パス以下のアクセスを制限する機能
- 例えば、
/private/*
のパスを閲覧する場合、ユーザーの Cookie に事前に適切な値が含まれていない場合 403 エラーとなるような仕組み
- 例えば、
- これを実現するためには以下の項目を順次行う必要がある
- CloudFront に公開鍵を登録する
- 登録した公開鍵を含む KeyGroup を作成する
- CloudFront の Behavior (パスごとの挙動) に対して、KeyGroup を指定することで、そのパスに対する署名付きCookie必須のアクセスに制限できる
CloudFormation 内で実施すべき作業とメモ
- 公開鍵を CloudFormation で登録する
- EncodedKey には YAML で以下のように登録すればよい
-
|
は以降の行を改行で結合して複数行を1行に扱うための記号 - なお、ここで公開している公開鍵は検証用に作ったものなので、自分で登録する場合は別途自分で秘密鍵・公開鍵を作成すること
EncodedKey: |
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxhzuK6zXYY5w3gwubNYh
OPPto8+UuvepM/Yna46eqCTQ+6uNC5zjuindBUEAnY4SUBFqeD8uECXpuKYd9Yf/
JB0tsC1XGeXYzqS4z5OZbGL28p6Kj4tFcTBz1htCGq0Ldhgsag+ZduWRieZUYsFa
QbfHgFcpJrubqaF4isZLVMTlg0PgT//wkJCDE2KHk/WOBW7hpVo0KDLpztxRKM4s
kVC4Xt4nqV0q/lfw45PW/d3R5CBt8xdnn26pxMRGRLf2v3DJHpFR7rzDU/TQphFW
sYRQEudAJcl+eGkUH08LRYnirDnH7f9zI/1lCVsxmSzr/2jZlsqx0BVe6doyXqR4
sQIDAQAB
-----END PUBLIC KEY-----
CloudFormation Template
以下の Gist に YAML 形式のものを示す。
なお、コメントなどは Amplify をもとにしたものなので、それに準じた値が入っている。