S3 + CloudFront でコンテンツをHTTPS配信
目次
AWSのS3に公開用の設定をしたバケットを作成し、CloudFrontを介してコンテンツを配信する仕組みを作る話です。
S3バケットを作成する
AWSのコンソールからS3を選択します。
オプションの設定
S3の画面
S3へ遷移したら、「バケットを作成する」ボタンを押下すると、モーダルウィンドウが立ち上がるのでそこから設定を入力します。
ここでは特に設定はしていません。 必要なオプションがあれば任意で選択して「次へ」をクリックします。
アクセス許可の設定
ここで以下の4つのチェックボックスからチェックが外れていることを確認します。
- 新規のパブリック ACL と、パブリックオブジェクトのアップロードをブロックする (推奨)
- パブリック ACL を通じて付与されたパブリックアクセスを削除する (推奨)
- 新規のパブリックバケットポリシーをブロックする (推奨)
- バケットにパブリックポリシーがある場合、パブリックアクセスとクロスアカウントアクセスをブロックする (推奨)
バケット作成が成功すると一覧に表示されます。
S3アクセス権限の公開設定
バケットが作成できたら、もう一度S3のバケット一覧から作成したバケットを選択します。
アクセス権限 → バケットポリシーでポリシーを入力します。
上記の画像のように以下のバケットポリシーを適用させます。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
ポリシーの適用が成功すると黄色い文字で「パブリック」という文字が現れます。
※ examplebucketのところは自身のバケット名に変えます。
このような状態になればパブリックへの公開が成功しています。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-bucket-policies.html
ACM(AWS Certificate Manager)
ACM(AWS Certificate Manager)を利用してSSL証明書を発行します。
SSL化対象のURLをRoute53で管理できることが前提です。
取得する方法をざっとまとめます。
証明書のリクエスト
**パブリック証明書のリクエスト **を選択して、次へ
ステップ 1: ドメイン名の追加
SSL化したいドメインを入力。ワイルドカードを使うことも可能。 (*.example.com)
ステップ 2: 検証方法の選択
DNS の検証 を選択
ステップ 3: 確認とリクエスト
確認とリクエスト を選択
ステップ 4: 検証
「DNS 設定をファイルにエクスポート」からcsvをダウンロード。
Route53に移動する。
CNAME で csv の Record Name を レコードセットの名前に、Record Value を 値の項目にそれぞれセットする。
再びACMに戻ると、正しく設定されているのが確認できれば使用可能となる。
これでACMの操作は完了。
CloudFront の設定
CloudFrontに移動。
「Create Distribution」を選択。
「Get Started」を選択。
ここで細かな設定を行なっていきます。
- Origin Domain Name
- 対象とするサービスを選択(先ほど作成したS3)
- Alternate Domain Names (CNAMEs)
- CloudFrontに割り当てるドメイン名
- Route53側でもレコードを設定する必要がある。
- Viewer Protocol Policy
- Redirect HTTP to HTTPS
- SSL Certificate
- Custom SSL Certificate を選択
- ACMで設定した項目を入力する
- Custom SSL Client Support
- Clients that Support Server Name Indication (SNI) - (Recommended)
- Security Policy
- TLSv1.1_2016 (recommended)
CloudFrontのtop画面からStatusを確認し、Enabledとなっていれば成功です。