当記事では、AWSのCoudFrontとS3を使って、WebアプリケーションをHTTPSで公開する手順を解説します。
AWSなどのサーバーレスサービスは、サーバーやミドルウェアのインストールが不要で、すぐにアプリケーションを公開できて便利ですよね。
一方で、サーバーレスサービスでのWebアプリの構築経験がないと、どのような手順で開発したら良いかわかりません。
今回紹介するWebアプリケーションの公開もその一つで、HTTPSでアプリを公開するにはサービスを組み合わせる必要があります。
Webアプリケーションでは通信内容の漏洩防止のため、HTTPSによる通信の暗号化が必須です。
ストレージサービスのS3だけでもWebアプリケーションを公開できますが、HTTP通信のみでの公開となり通信が漏洩する可能性があります。
HTTPS通信を利用するにはCloudFrontを利用することが一般的ですが、サービスを組み合わせるため手順が複雑になりがちです。
そこでこの記事では、CoudFrontとS3を連携してWebアプリを公開する手順を解説します。
CloufFrontを利用することで、HTTPS通信が可能となりセキュリティが大幅に向上します。
実際の開発に役立つ内容となってますので、ぜひ最後までご覧ください。
S3だけでWebアプリを公開した場合の弱点
最初にも紹介しましたが、S3のみでもWebアプリを公開することが可能です。
「静的Webホスティング機能」を利用することでS3のみでWebアプリを公開できます。
しかし、この機能を利用してWebアプリを公開した場合、二つの問題点が存在します。
問題点1:HTTPS通信ができない
通常、Webアプリケーションを利用する際には、ユーザーとの通信内容が傍受されないようにHTTPS通信を行います。
しかし、S3のみでWebアプリケーションを公開するとHTTP通信しか利用できません。通信内容が暗号化されないため、悪意のある第三者によって通信内容が盗み見られる可能性があります。
問題点2:ブロックパブリックアクセスを許可しなければならない
S3でのみで、Webアプリを公開するには「静的Webサイトホスティング機能」を利用します。
S3では、「ブロックパブリックアクセス」は通常「無効」となっています。
「静的Webサイトホスティング機能」を利用するには「ブロックパブリックアクセス」を「有効」にする必要があります。
セキュリティレベルが低下する設定となるため、あまり実施したくありません。
CloudFrontと組み合わせることで得られるメリット
CloudFrontを利用することで、上で紹介した二つの問題が解消され、以下のことが可能になります。
HTTPS通信でのWebアプリへのアクセス
CloudFrontはHTTPS通信をサポートしています。利用者はCloudFrontが発行したURLにアクセスすることでHTTPS通信でWebアプリを利用できます。
不必要なファイルへのアクセス防止
CloudFrontを利用することで、S3はCloudFrontからのアクセスのみ許可され、利用者がS3のコンテンツへ直接アクセスできなくなります。
ユーザーがWebアプリを利用する際は、CloudFrontがユーザーとS3のコンテンツの橋渡しを行います。
ユーザーからの不必要なコンテンツへのアクセスを防止できることでセキュリティが向上します。
ブロックパブリックアクセスを有効のままWebアプリケーションの公開
S3の対象バケットはCloudFrontからのアクセスしか許可しなくなります。
これにより、S3側のブロックパブリックアクセスを有効のままでWebアプリを公開できます。
この設定により、S3のバケットをグローバルに公開せずにアプリケーションを公開できます。
CloudFrontの設定方法
ここからは、CloudFrontとS3を連携する設定を解説します。
利用にあたっての料金
CloudFrontには無期限の無料枠があります。通常利用するくらいでは充分な量で無料で試せます。
AWS クラウド無料利用枠 | AWS (amazon.com)
公式ドキュメントの内容
AWSのS3のドキュメントには以下の記載があります。
簡単に説明すると「HTTPSを使用する場合は、CloudFrontを利用しなさい」という内容です。CloudFrontはCDNで利用するサービスだと思ってましたが、ウェブサイトを公開するためにも利用されるサービスらしいです。
詳細はAWS公式サイトの以下を参照ください。
Amazon S3 を使用して静的ウェブサイトをホスティングする – Amazon Simple Storage Service
CloudFrontとS3の連携設定方法
CloudFrontとs3を連携する設定を行っていきます。
検証用のS3バケットの作成
CloudFrontと連携させるS3のバケットを作成しておきます。作成するバケットは、すべてデフォルト値で作成します。
バケット作成後、後ほどの動作確認用にindex.htmlを配置しておきます。
CloudFrontの作成
CloudFrontのサービスに移動して、「ディストリビューションを作成」をクリックします。
オリジンドメインに先ほど作成したS3のバケットを選択します。
オリジンアクセスにはOACを選択します。他の設定はすべてデフォルトです。
プロトコルはHTTPのみしか選択できないため、そのまま作成します。
オリジンパスや名前などもそのままです。試行回数やタイムアウトの設定もできますが、これもデフォルトで作成します。
キャッシュや通信方式も設定できますが、今回は作業を単純にするため、必要箇所以外はデフォルトのまま進めます。
関数の関連付けも特に設定しません。
WAFの設定もしません。
以下の項目も、デフォルト値。
以上で作成完了です。
作成後、「S3のバケットポリシーを編集が必要」というメッセージが表示されます。
CloudFrontからアクセスできるようにS3のバケットポリシーを編集します。S3のバケットの設定画面で、バケットポリシーを編集してください。
バケットポリシーはこちら。CloudFrontからのみアクセスを許可するポリシーとなります。
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "AllowCloudFrontServicePrincipal",
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::test-cloud-front-app/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::578278346296:distribution/[各自のcloudFrontが設定される]"
}
}
}
]
}
動作確認
CloudFrontのURLとファイル名を指定することで、以下のようにファイルにアクセスすることができます。
まとめ
この記事のまとめです。
- S3のみではWebアプリをHTTP通信でしか公開できずセキュリティが低い
- CloudFrontを利用することでHTTPS通信の利用など、セキュリティを上げてWebアプリを公開できる
- Webアプリの公開は、CloudFrontとS3を組み合わせることが一般的
S3のみでもWebアプリケーションを公開することができますが、セキュリティを考慮するとCloudFrontを組みわせて利用する必要があります。
CloudFrontを利用することでS3単体ではできなかったHTTPS通信が可能となりWebアプリケーションのセキュリティを向上させることができます。
サーバーレスサービスは、最初は学習することが多く大変ですが、一度開発を経験してしまえば、以降は簡単にアプリケーションを開発することができます。
サーバーレスサービスでの開発知識の有無は、開発生産性に直結しますので、ぜひ習得してみてください!
本記事が皆様の参考になりましたら幸いです。
コメント