Closed1

S3のコンテンツをCloudFrontで配信。ついでにACMでワイルドカード証明書を発行してサブドメインでSSLを検証。

bun913bun913

S3 と CloudFront を ACM を利用して HTTPS 通信を行う

やりたいこと

  • ハンズオンで S3 と CloudFront を使って S3 のリソースを CDN 経由で取得できるようにする
    • この時S3バケットとCloudFrontのディストリビューションを2つずつ作成。
    • それぞれに parent-example-domain.com child-example-domain.com という独自ドメインでアクセスできるようにする
    • それぞれのCloudFrontディストリビューションにはACMで証明書を適用するが、 *.example.com という形でワイルドカードでプロビジョニングしておき、1つの証明書でサブドメインの管理を楽にする
  • お名前.com を使って独自ドメインを取得(無料ドメインにしようかと思ったけど、登録が面倒だった)
    • example-domain.com のドメインを取得するイメージ

構成図

ハンズオン

S3 の準備

  • 以下 2 つのバケットを準備
    • cdn-practice-bun-parent
    • cdn-practice-bun-child
  • 最終的にはバケットポリシーを以下のように設定にしてOAIを利用して、CDN経由でのみオブジェクトにアクセスできるようにする(S3に直接アクセスさせない)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::cdn-practice-bun-child/*"
    }
  ]
}
  • それぞれのバケットに適当に画像をアップロードしておく

CloudFrontの準備

  • CloudFront のディストリビューションを作成
    • 1 つ目
      • parent のバケットをオリジンに
      • CNAMEsに parent-example-domain.comを入力
      • OAI を使ってバケットには CloudFront 経由のアクセスしかできないように設定する
    • 2 つめ
      • child のバケットをオリジンに
      • CNAMEsに child-example-domain.comを入力
      • それ以外は parent と同じ設定にする
    • ここまでで CloudFront 経由でのアクセスしかできなくなっていることを確認

独自ドメインの取得

  • freenom うざかったからお名前.com で 1 円で取得
    • あえて Route53 のnameserverを利用せず、お名前.com で一回やってみる(案件で実際Route53を利用できない時があったので)
    • example-domain.comを取得
  • DNSレコードの設定で
    • parent.example-domain.com を CloudFrontのpaerntの方でCNAMEレコードを登録
    • child.example-domain.com を CloudFrontのchildの方でCNAMEレコードを登録

ACMで証明書を準備

  • ACM で管理ドメインに対する証明書を取得
    • example-domain.com
    • *.example-domain.com
    • ↑ のようにしてワイルドカード証明書を取得
  • お名前.comで作業
    • ↑でACMで証明書をプロビジョニングすることにより、ドメインの所有者かの検証用にDNSのCNAMEにレコードを登録するよう指示がある
    • その指示の通り、お名前.com側でDNSレコードを設定
  • これで独自ドメインに向けてアクセスをすることで画像が表示されることに加えて以下を確認
    • 証明書を見るとちゃんと認証局がAmazonで example-domain.comの証明ができている
    • paerntもchildも一つのワイルドカード証明書で登録できている!!

ハマったところ

  • ACM を ap-northeast-1のリージョンで作成してしまった
  • us-east1 にしないと CloudFront で使えない
  • CloudFront側に 独自ドメインのCnamesを入力するのを忘れていた

DNSのCNAMEの反映はそれぞれ数分で完了していた(少なくとも日本国内では)

このスクラップは2024/05/12にクローズされました