Amazon CloudFront
Amazon CloudFrontは、安全でプログラミング可能なコンテンツデリバリネットワーク(CDN)です。こちらのページでは、MyKinstaでサイトを立ち上げた後、弊社CDNの代わりにAmazon CloudFrontを使用する手順をご紹介します。
フィールドレベル暗号化、DDoS攻撃からのネットワークとアプリケーション層の保護などのセキュリティ機能も備わっています。
独自SSL証明書の申請
CloudFront ディストリビューションの設定には、独自SSL証明書の適用が必要です。この作業には、数分から長くて数時間かかる可能性がありますので、ディストリビューションの作成を始める前に、独自SSL証明書を申請することをおすすめします。
AWSのアカウントを持っていない場合は、アカウントの作成を行ってください。AWSアカウントにログイン後、メニューバーの検索ボックスで「certificate manager」と検索し、「Service(サービス)」の「Certificate Manager」をクリックしてください。
「Certificate Manager」で「Request a certificate(証明書のリクエスト)」をクリックします。
次のページで、「Request a public certificate(パブリック証明書のリクエスト)」を選択して、「Next(次へ)」をクリックします。
「Request public certificate(パブリック証明書のリクエスト)」フォームに以下のように記入します。
- Domain names(ドメイン名):独自ドメイン(Kinstaサイトのプライマリドメイン)を追加します。ルートドメインを追加する場合は、必ずwww以外のドメインとwwwドメインの両方を追加するか、*.example.comのようなワイルドカードドメインを追加してください)。
- Validation method(検証方法):SSL証明書の認証方法として、メール認証またはDNS認証のいずれかを選択します。ドメイン登録がWHOIS検索から連絡先情報を隠すプライバシー保護機能を備えていない場合、またはプロキシのメールアドレスに送信されたメールがお客様のメールアドレスに転送される場合、メール検証方法を使用することができます。証明書に追加したドメインごとに最大8通のメールが送信され、各ドメインの少なくとも1通のメールに対応して検証を完了します。WHOIS検索で表示されるメールアドレスでメールを受信できない場合は、DNS検証を使用してください。
- Key algorithm(キーアルゴリズム):「RSA 2048」を選択します。
- Tags(タグ):必要に応じて任意のタグを追加します。
「Request(リクエスト)」をクリックして、検証に進みます。
「Domains(ドメイン)」セクションには検証用のCNAME情報が表示されます。この情報で独自ドメインのCNAMEレコードを作成します。
CNAMEレコードを追加するには、ドメインのDNSを管理する場所にログインします。この例では、弊社のDNSでCNAMEレコードを追加する方法をご紹介します。別のDNSサービス(レジストラまたは別のDNSサービスなど、ドメインのネームサーバーを指定した場所によって異なります)を使用している場合は、手順が少し異なる場合があります。
- MyKinstaの左側メニューで「DNS」をクリックします
- DNSレコードを追加するドメインをクリックします
- 「DNSレコードの追加」をクリックします
- 「CNAME」タブを選択し、「ホスト名」(CloudFrontの「Name」フィールドの独自ドメインの前のすべての文字列)と「指定先」(CloudFrontの値)を追加して、「DNSレコードを追加」をクリックします
注)DNSレコードのTTL設定によっては、DNSレコードが伝播するまでに数分から数時間かかる場合があります。
CNAMEレコードが伝播し、検証されると、SSL証明書のステータスは「Pending(検証保留中)」から「Issued(発行済み)」に変わります。
これで、CloudFrontディストリビューションで使用するSSL証明書の準備が整いました。
CloudFront ホストゾーンの設定とデプロイ
次は、CloudFront ホストゾーンの設定とデプロイを行います。AWSアカウントにて、メニューバーの検索ボックスで「CloudFront」と検索し、「Service(サービス)」の「CloudFront」をクリックします。
その後、「Create a CloudFront distribution(CloudFront ディストリビューションを作成する)」をクリックします。ホストゾーンの詳細は、ディストリビューションの作成ページで設定することができます。Cloudflare統合との互換性を最大化するために、以下の構成を推奨します。
オリジン
「オリジン」の設定は以下をお勧めします。
- オリジンドメイン:サイトのcloudドメイン(例: myawewsomesite.kinsta.cloud)。CloudFrontはオリジンとしてIPアドレスを受け付けないため、フィールドにサイトのkinsta.cloudドメインを使用します。
オリジンドメインを入力すると、以下の3つのフィールドが表示されます。- プロトコル:HTTPSのみ
- HTTPSポート:443
- 最小限のオリジン SSL プロトコル:TLSv1
- オリジンのパス:空欄
- 名前(任意):オリジンに名前をつけられますが、必須ではありません
- Origin Shield を有効にする:No
デフォルトのキャッシュ動作の設定
キャッシュの動作設定を行う際に、CloudFrontの2つのポリシー(キャッシュポリシーとリクエストポリシー)を作成する必要があります。以下、概要をご紹介します。
「デフォルトのキャッシュ動作の設定」の推奨設定値は以下のとおりです。
- パスパターン:デフォルト
- オブジェクトを自動的に圧縮する:Yes
- ビューワープロトコルポリシー:Redirect HTTP to HTTPS
- 許可される HTTP メソッド:GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
- ビューワーのアクセス制限:No
- キャッシュキーとオリジンリクエスト:キャッシュポリシーとオリジンリクエストポリシー
- キャッシュポリシー:作成したキャッシュポリシーを選択します(以下の作成手順を参照してください)
- オリジンリクエストポリシー:作成したオリジンリクエストポリシーを選択します(以下の作成手順を参照してください)
CloudFront キャッシュポリシー作成方法
「Cache policy(キャッシュポリシー)」セクションにある「Create cache policy(ポリシーの作成)」をクリックすると、ブラウザの新規タブにキャッシュポリシー作成ページが表示されます。
「Details(詳細)」セクションで、キャッシュポリシーの名前(例: KinstaCachePolicy)を指定します。
「TTL Settings(TTL設定)」は以下を推奨します。
- 最小TTL:0
- 最大TTL:31536000
- デフォルトTTL:86400
「キャッシュキー設定」は以下を推奨します。
- ヘッダー:None
- クエリ文字列:All
- Cookies:All
「Compression support(圧縮サポート)」セクションで「Gzip」と「Brotli」にチェックを入れて有効にし、「Create(作成)」をクリックしてください。
このブラウザタブを閉じ、CloudFront ディストリビューションを作成しているタブに戻ります。
「Cache policy(キャッシュポリシー)」のドロップダウン横にある更新ボタンをクリックし、作成したキャッシュポリシーを選択します。
CloudFront オリジンリクエストポリシー作成方法
「Origin request policy(オリジンリクエストポリシー)」セクションで、「 Create origin request policy(オリジンリクエストポリシーの作成)」をクリックすると、ブラウザの新規タブに、「 Create origin request policy(オリジンリクエストポリシーの作成)」ページが表示されます。
「Details(詳細)」セクションで、キャッシュポリシーの名前(例: KinstaOriginPolicy)を指定します。
「Origin request settings(オリジンリクエスト設定)」セクションは、それぞれ以下に設定してください。
- ヘッダー:All viewer headers
- クエリ文字列:All
- Cookies:All
「Create(作成)」をクリックして、リクエストポリシーを確定します。
このブラウザタブを閉じ、CloudFront ディストリビューションを作成しているタブに戻ります。
「Origin request policy(オリジンリクエストポリシー)」ドロップダウン横にある更新ボタンをクリックし、ドロップダウンから作成したオリジンリクエストポリシーを選択します。
関数の関連付け
関数の関連付けとは、リクエストのライフサイクル内の異なるトリガー(ビューワーリクエスト、ビューワーレスポンス、オリジンリクエストなど)にAWS Lambdaのサーバーレス関数を割り当てることができるというものです。基本的には、関数の関連付けは推奨されません。
弊社CDNと並行して関数の関連付けを使用することは可能ですが、Lambda関数は弊社CDNが競合する可能性があります。独自のLambda関数をサイトで使用したい場合、万が一問題が発生した際のトラブルシューティングを考慮し、開発者と一緒に作業を行うことをお勧めします。
設定
「設定」の設定は、以下がお勧めです。
- 価格クラス:サイトで使用するCloudFrontリージョンを選択してください
- AWS WAF ウェブ ACL:ファイアウォールのルールでACLを作成する必要がある場合、弊社CDNとの競合を避けるために、AWSのプロの力を借りながら作業することをおすすめします
- 代替ドメイン名:「Add item(項目の追加)」をクリックし、ドメイン(Kinstaサイトのプライマリドメイン)を指定してください
- SSL証明書:こちらのページ冒頭で作成したSSL証明書を選択してください
SSL証明書を選択した後に、以下の追加オプションが表示されます。- レガシークライアントサポート:チェックなし、または無効
- セキュリティーポリシー:TLSv1.2_2021
- サポートされる HTTP バージョン:HTTP/2
- 標準ログ記録:オフ
- IPv6:オン
「Create distribution(ディストリビューションを作成)」をクリックすると、CloudFront ホストゾーンの作成が完了します。
CloudFront よくある問題のトラブルシューティング
502エラー
CloudFront ディストリビューションの作成後、502エラーが表示された場合は、オリジン設定のオリジンドメインを再確認してください。このドメインはメインのドメインではなく、お客様のサイトのkinsta.cloudドメインでなくてはいけません。
変更内容がサイトに反映されない
CloudFrontに合わせてサイトを設定すると、キャッシュの追加レイヤーが作成され、これはキャッシュのクリアが必要になるときにその都度合わせて削除しなくてはいけません。プラグインをインストール、または再インストールした後、サイトの変更がうまく表示されない、もしくはプラグインがうまく動作しない場合は、以下を含むすべての階層でキャッシュをクリアしてください。
- プラグイン(該当する場合)
- テーマ(該当する場合)
- Kinstaサイトまたはサーバーキャッシュ(MyKinstaまたはKinsta MUプラグイン)
- CloudFrontのキャッシュ(オブジェクトを無効化します。無効化するオブジェクトパスに /* を使用すると、すべてのキャッシュがクリアされます)
- ブラウザのキャッシュ
誤検出でブロックされたIPアドレス
CloudFrontでDDoS攻撃の軽減や、ボットコントロールを有効にした結果、お客様、または訪問者がサイトへのアクセスを不正にブロックされる場合には、誤検出が疑われます。この問題が発生した際には、AWSサポートと弊社カスタマーサポートの両方に連絡を取り、ブロックが発生している場所を特定する必要があります。
HTTPからHTTPSへのリダイレクトループ
HTTPからHTTPSへのリダイレクトループが発生した場合、ドメインのCloudFront オリジン設定で、プロトコルが「HTTPSのみ」に設定されていることを確認してください。
IPジオロケーションリダイレクトが正しく動作しない
CloudFrontで、デフォルトで有効になっているページキャッシュは、MyKinstaで設定したIPジオロケーションのリダイレクトに干渉する場合があります。これが発生した際は、CloudFrontでのキャッシュを無効にするか、キャッシュポリシーで特定の場所にないファイルのみをキャッシュするように設定する必要があります。
WordPress管理画面にログインできない
POST対応がないとログインができず、ウェブサイト内の他の機能にも影響が出る恐れがあります。「デフォルトのキャッシュ動作の設定」の「許可されるHTTPメソッド」が、「GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE」に設定されていることを確認してください。
詳細設定と互換性
署名付きURLと署名付きCookieによるビューワーのアクセス制限
独自のオリジンでファイルへのアクセスを制限するなどのオプションは、Cloudflareが常に静的なリクエストをキャッシュすることが原因で機能しない場合があります。