今回は、AWS S3で公開している静的Webサイトを、SSL化する手順のメモとなります。
尚、S3でサイトを公開する設定は、以下の内容で行なっている前提となります。
・Amazon S3 を使用して静的ウェブサイトをホスティングする
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/WebsiteHosting.html
・CloudFront を使用して Amazon S3 バケットの HTTPS リクエストを処理する方法を教えてください。
https://repost.aws/ja/knowledge-center/cloudfront-https-requests-s3
目次
ACM SSL 証明書 作成
リージョン指定
はじめに証明書作成を開始する前に、リージョンをus-east-1に変更します。
変更理由は、CloudFrontディストリビューションで指定できる証明書が、
現状us-east-1の証明書のみだからです。
証明書作成リクエスト
リージョンを変更したら、AWS Certificate Manager(ACM)のところから証明書リクエストを行います。
まず、完全修飾ドメイン名は、説明通りドメイン名を指定します。
検証方法は、今回はDNS検証にします。
続けて、キーアルゴリズムとタグは任意の内容で指定します。
すべて入力・指定できたらリクエストします。
証明書 DNS設定(Route53)
リクエストできたら検証を完了させます。
証明書の詳細のドメイン部分に表示されている、
Route53でレコードを作成ボタンを使用して、CNAMEレコードを作成します。
※自身でRoute53で登録しても完了できます。
(CNAME名とCNAME値を確認して、ホストゾーンにレコードを登録します)
CNAMEレコードを登録すると、検証処理が行われます。
正常に処理されると、ドメインのステータスも成功になり、証明書も発行済みになります。
(今回試した際には、数秒で検証が完了し成功となりました)
CloudFrontディストリビューション設定
ディストリビューション作成
続けて、CloudFrontの設定を行います。
まず、Origin domainのところは、対象のS3バケット名を指定します。
Origin domainをS3のバケットで指定すると、
Webサイトのエンドポイントを使用のボタンが表示されるため、こちらをクリックします。
次のプロトコルは、目的の値を指定します。
続けて、Origin path – optionalは、ドメイン名を指定します。
※別日に試したら、「/」を先頭に指定するように指示されました。
「/」+ ドメイン名の形で入力します。(例:/www.test.com)
尚、名前(オリジン名を入力)は、S3バケットの名称が自動的に入力されるはずです。
もしも自動的に入力されなかった場合、
名前(オリジン名を入力)に、Origin domainと同じ名称を入力します。
次のEnable Origin Shieldや追加設定も任意で行います。
続けて、デフォルトのキャッシュビヘイビアのところも任意で設定します。
その下のキャッシュキーとオリジンリクエストは、
Cache policy and origin request policy(recommended)で設定します。
レスポンスヘッダーポリシーは、必要に応じて指定してください。
※キャッシュさせたくない場合、キャッシュポリシーをCashingDisabledで指定して下さい。
ウェブアプリケーションファイアウォール(WAF)も必要に応じて有効化してください。
次の設定の部分は、Custom SSL certificate – optional以外は任意の内容を指定します。
Custom SSL certificate – optionalは、登録済みの証明書を選択します。
以降の設定も必要に応じて指定して作成を行います。
ディストリビューション DNS設定(Route53)
ディストリビューションを作成後、Route53でDNS設定を行います。
Route53のところから、ドメインのホストゾーンを開きます。
既にS3の機能でWebサイトを独自ドメインで公開している場合、
公開用のタイプAレコードが存在すると思います。
こちらをディストリビューション用の設定に変更します。
(httpでのアクセスは出来なくなります)
トラフィックのルーティング先は、CloudFrontのディストリビューションを選択します。
下の値指定の部分は、CloudFrontを選択していれば、
先ほど作成したディストリビューションが候補に出てくると思いますので、選択して保存します。
ここまで設定できたら、
最後にブラウザ等でアクセスして設定が反映されていることを確認します。
DNSの設定などが反映されるまでに時間がかかることもあるようですが、今回はすぐに反映されました。
今回のメモは以上となります。
S3でWebサイトをホスティングできるのは便利ですが、
独自ドメインのSSL化は直接サポートされていないので、
CloudFrontの機能を利用する必要があります。
HTTPS対応以外にも、パフォーマンスの向上、
セキュリティ強化などを目的にCloudFrontはよく利用すると思うので、
色々とメモしていきたいと思います。