の続きです。 ここから、https でアクセス可能なWebサイトの公開のための作業になります。
Amazon Certificate Manager によるSSL証明書の取得
ドメイン所有者宛てに送られるメールを受け取れるようになったので、SSL証明書の申請を行います。 SSL証明書は、リージョン毎に作成されるようです。
ただし、CloudFront で使用できる証明書は us-east-1 のリージョンのもののみなので、このリージョンに対して証明書の申請をすることに注意してください。
詳しくは、
よくある質問 - AWS Certificate Manager | AWS
にある『Q: 複数の AWS リージョンで同じ証明書を使用できますか?』に記載されています。
AWSのコンソールにログインして、Certificate Manager を開きます。 リージョンとして、us-east-1 (米国東部(バージニア北部))を選択します。 『証明書のリクエスト』を押します。
ドメイン名を入力する欄があるので、今回使用する独自ドメイン名を入力します(Zone Apexとして入力します)。 ワイルドカード証明書も取ることができるので、『この証明書に別の名前を追加』ボタンを押して、サブドメインのワイルドカード証明書も申請しておきます(今回の目的には不要なのですが、別件で使うかもしれないので)。
ちなみに、ワイルドカード証明書だけでは、Zone Apex はカバーされないのでご注意ください。
次に進むと確認画面が表示されます。
ここで、『確定とリクエスト』を押すと、ドメイン所有者に対してメールによる確認が行われます。
メール記載のリンクをクリックして、表示される確認内容に問題がなければ、承認します。 承認後、コンソールの画面に戻り『続行』と押すと、問題なければ、証明書一覧の画面が表示され、ステータスが『発行済み』となります。
こんな感じになってれば、証明書が発行できてます。
S3のホスティング
さて、いよいよホスティングするS3の設定をします。
まずは、バケットを作成します。S3で独自ドメインを割り当てる場合は、サブドメインでもZone Apexでもバケット名をそのドメインの形式にする必要があります。
例えば、独自ドメイン名が example.com なら、バケット名も example.com になります。
また、S3でホスティングする場合、誰でも見れる必要があるため、アクセス許可(アクセスコントロールリストやバケットポリシー)を追加しますが、今回は、CloudFront経由でのアクセスのみに制限するので、現時点では、アクセス許可はデフォルトのままとします(パブリックアクセス許可を与えません)。
なので、この時点ではブラウザで確認できないのでご注意ください。
表示するためのファイルをindex.htmlとしてアップロードしておきます。
Hello WOrld!
公開するバケットの『プロパティ』『Static website hosting』を選択して
設定画面で、
『このバケットを使用してウェブサイトをホストする』を選んでおきます。
CloudFront の設定
S3の設定ができたら、CloudFrontでディストリビューションを作成します。
設定内容としては、httpsでのアクセス(httpはhttpsにリダイレクト)とし、必ずCloudFront経由でS3にアクセスするようにしています。
デフォルトの設定値と異なる箇所を以下に示します。
- Origin Domain Name : S3のバケット名を選択
- Restrict Bucket Access : Yes
- Origin Access Identity : Create a New Identity
- Grant Read Permissions on Bucket : Yes, Update Bucket Policy
- Viewer Protocol Policy : Redirect HTTP to HTTPS
- Alternate Domain Names : 独自ドメイン名
- Default Root Object : index.html
なぜか、この時点で SSL Certificate として Custom SSL Certificate を選択できなかったので、一旦このままディストリビューションを作成します。
なお、CloudFront経由でS3にアクセスする方法については
に記載があるので、ご参考にしてください。
Route53 の設定
独自ドメインに対して Alias レコードを設定します。
レコードタイプとして Aレコードを選択して、AliasをYesにします。
Alias Target として、CloudFront のアドレスを選択します。
CloudFront で証明書を指定
最後に、CloudFrontのディストリビューションを再度開き、『General』タブで『Edit』を行います。
SSL Certificate として Custom SSL Certificate を選択し、その下のドロップダウンリストからACMで取得した証明書を選択します。
これで設定完了です。
確認
さて、ブラウザでアクセスしてみましょう。
httpsでアクセスしてもちゃんと表示されています。 ちなみに、http//独自ドメイン/ でアクセスしても表示されます。
さいごに
設定は非常に楽しかったのですが、実際の料金がどれぐらいになるかはちょっと気になるところです。
Route53, CloudFront, S3
でそれぞれ費用が発生するので、アクセス数次第では結構いいお値段になるかもしれません(まあ、そうなったらうれしくもあるんですが)。
これについては、載せたい内容が固まって、本格的にリリースできてから改めて検証したいと思います。
参考
メールの部分以外はこちらを参考にしました。