#author("2024-11-01T17:38:29+09:00","default:dex","dex")
#author("2024-11-27T11:59:17+09:00","default:dex","dex")
#contents

*CloudFront CDN [#e357e0e8]


-[[Amazon CloudFront(コンテンツ・ストリーミング配信サービス) | アマゾン ウェブ サービス (AWS 日本語):http://aws.amazon.com/jp/cloudfront/]]
--CloudFront専用ドメインにCNAMEを付けて使う。例:xxxxxxxxxxxxx.cloudfront.net CNAME www.example.com
--コンテンツキャッシュのTTLは0秒以上で設定できるようになった
--Restrict Bucket Access:YesにするとS3への直接アクセスは禁止、CloudFrontからのみアクセスできるようになる
--/hoge/ ではコンテンツは表示されず、/hoge/index.html と記載する必要がある
--SSLでのアクセスの場合、Hostヘッダーを許可すると「502 Bad Gateway」になるため。許可しない。
---[[Cloudfront-Origin間のHTTPS通信エラー原因と対策(502:Bad Gateway) - Qiita:http://qiita.com/kaojiri/items/4e2d2f112acfca14970e]]

-無効リクエスト(Invalidating)
--[[Invalidating Objects (Download Distributions Only):http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html]] APIドキュメント
--毎月1,000ファイルまで無償で無効化できる。それ以上は有償
--[[Q: Amazon CloudFront の価格はいくらですか?:http://aws.amazon.com/jp/cloudfront/faqs/#What_is_the_price_of_Amazon_CloudFront]]
--[[Q: 無効リクエスト数には制限がありますか?:http://aws.amazon.com/jp/cloudfront/faqs/#Is_there_a_limit_to_the_number_of_invalidation_requests]]
--[[(PDF)エッジロケーションからファイルを削除する方法に関する一般的な注意:http://adsj-contents.s3.amazonaws.com/product/CloudFront%E3%81%AEinvaliadtion%E6%96%B9%E6%B3%95_20120704.pdf]]
--[[How to invalidate items in AWS CloudFront:https://gist.github.com/claylo/1009169]] PHP製ツール
--[[AWS SDK fot .NET で CloudFrontのInvalidationを使う - hayashihがOSをインストールする日記:http://d.hatena.ne.jp/hayashih/20111204/p1]]

-記事
-- [[[アップデート] CloudFront で動的に Brotli 形式の圧縮をできるようになりました! | Developers.IO:https://dev.classmethod.jp/articles/update-cloudfront-support-brotli/]]
-- [[Amazon CloudFront を活用したウェブサイトの可用性向上 | Amazon Web Services ブログ:https://aws.amazon.com/jp/blogs/news/improve-your-website-availability-with-amazon-cloudfront/]]
-- [[[小ネタ] CloudFrontでクエリ文字列を転送しているときのInvalidationにはクエリ文字列を忘れないように注意しよう | Developers.IO:https://dev.classmethod.jp/articles/amazon-cloudfront-invalidation-querystring/]]
-- [[オリジンを S3 とした CloudFront に対して、存在しないオブジェクトへアクセスした際の HTTP ステータスコードが 403 Forbidden になったときの対処方法 | Developers.IO:https://dev.classmethod.jp/articles/tsnote-cloudfront-s3-notexistobject-403-001/]]
-- [[Amazon CloudFrontはボディを含むGETリクエストに403(Forbidden)を返します | Developers.IO:https://dev.classmethod.jp/articles/cloudfront-return-403-for-get-method-with-message-body/]]
-- [[CloudFrontの作成や更新時間が約5倍高速になりました | Developers.IO:https://dev.classmethod.jp/articles/slashing-cloudfront-change/]]
-- [[[アップデート] Amazon CloudFrontでリソースレベルとタグベースでのアクセス許可が設定できるようになりました! | DevelopersIO:https://dev.classmethod.jp/cloud/aws/amazon-cloudfront-resource-level-tag-based-permission/]]
-- [[AWS再入門ブログリレー Amazon CloudFront 編 | DevelopersIO:https://dev.classmethod.jp/cloud/aws/blogrelay2019_cloudfront/]]

-- [[Amazon CloudFront の代替ドメイン名(CNAMEs)設定に SSL 証明書が必須になりました | DevelopersIO:https://dev.classmethod.jp/cloud/aws/201904_enhancing-domain-security-on-cloudfront/]]
--[[WP管理者必見!AWSで構築する新スケーラブルなWordPress構成~CloudFront as Reverse Proxy | Developers.IO:http://dev.classmethod.jp/cloud/aws/wordpress_with_cloudfront_front-ended/]]
--[[[新機能] Amazon CloudFrontでHostヘッダを転送する | Developers.IO:http://dev.classmethod.jp/cloud/cloudfront-host-header-forward/]]
--[[[新機能] Amazon CloudFrontがジオターゲティングに対応しました | Developers.IO:http://dev.classmethod.jp/cloud/aws/cloudfront-geo-targeting/]]
--[[CloudFrontのオリジンサーバによる機能の違い | Developers.IO:http://dev.classmethod.jp/cloud/aws/difference-between-cf-origin/]]
--[[Amazon CloudFrontの強化されたアクセス分析機能を整理してみた | Developers.IO:http://dev.classmethod.jp/cloud/cloudfront-enhanced-analyze-features/]]
--[[Amazon S3 + CloudFrontによるYumリポジトリにリダイレクトルールを適用する | Developers.IO:http://dev.classmethod.jp/cloud/yum-repo-s3cf-redirect/]]
--[[Amazon CloudFrontのキャッシュ期間をコントロールする(2015年6月版) | Developers.IO:http://dev.classmethod.jp/cloud/cloudfront-cache-control/]]
--[[[CloudFront + S3]特定バケットに特定ディストリビューションのみからアクセスできるよう設定する | Developers.IO:http://dev.classmethod.jp/cloud/aws/cloudfront-s3-origin-access-identity/]]
--[[memorycraft: S3ってなんじゃ?(CloudFrontでアクセス制御:Origin Access Identity × 署名付きURL):http://memocra.blogspot.jp/2013/02/s3cloudfrontorigin-access-identity-url.html]]
--[[memorycraft: S3ってなんじゃ?(CloudFrontでストリーミングログを取得):http://memocra.blogspot.jp/2012/02/s3cloudfront.html]]

----
** CSP(Content-Security-Policy)を設定する [#z73c5fc5]

- [[Content-Security-Policy - レスポンスヘッダーポリシーを理解する - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/understanding-response-headers-policies.html#understanding-response-headers-policies-security]]
- terraformで設定する場合は[[aws_cloudfront_response_headers_policy:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudfront_response_headers_policy]]を使うようだ

記事:
- [[CSPのざっくり概要:https://zenn.dev/yuu104/articles/content-secutity-policy]]


検証ツール:
- [[CSP Evaluator:https://csp-evaluator.withgoogle.com/]]


---
** コスト分析 [#c675024c]

記事:
- [[コスト観点で見る CloudFront - Speaker Deck:https://speakerdeck.com/4hei4hei/kosutoguan-dian-dejian-ru-cloudfront]]


----
** CloudFront を経由しないアクセスのブロック [#y9c6e57c]

記事
- [[TerraformでCloudFrontのManaged Prefix Listを取得してみた | DevelopersIO:https://dev.classmethod.jp/articles/terraform-cloudfromt-managed-prefix-list/]]
- [[【アップデート】Amazon CloudFront を経由しないアクセスのブロックが簡単になりました | DevelopersIO:https://dev.classmethod.jp/articles/amazon-cloudfront-managed-prefix-list/]]


----
** カスタムエラーレスポンス [#fbfed92a]

- [[カスタムエラーレスポンスの生成 - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html#custom-error-pages-response-code]]


----
** 署名(有効期限)付きURL、署名付きCookie [#e360ca1a]

- [[署名付き URL と署名付き Cookie を使用したプライベートコンテンツの提供 - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html]]

- 記事
-- [[【SAP対策】CloudFrontで署名付きURLを発行する【やってみた】 | Developers.IO:https://dev.classmethod.jp/articles/sap-exam-study-2/]]


----
** 不明なAWSアカウントIDのCloudFront [#zc91c051]

問題:
- us-east-1のACMに、見覚えのないCloudFrontとAWS account id(969236854626)がある
#geshi(text){{
arn:aws:cloudfront::969236854626:distribution/0123456789ABCD
}}
- us-east-1のCloudFrontを見ても、該当のdistribution IDは無い。
- どこから使われてるのか分からない。ACMは参照元がある限り消せない。

対処:
- API Gatewayでカスタムドメインを使い、httpsを設定すると、自動でCloudFrontが作られる。リージョン毎に固定のAWSアカウントIDが使われる。
-- [[エッジ最適化のカスタムドメイン名を作成する方法 - Amazon API Gateway:https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-edge-optimized-custom-domain-name.html]]
> リージョン固有の API Gateway アカウント ID の 1 つにより識別されます
> ap-northeast-1	969236854626
-- 使用していないカスタムドメインなら消す。そうすると、ACM側も消せるようになる。

- 記事
-- [[[AWS] 知らないアカウントIDのCloudFrontが自分のACM証明書を使っていると思ったけど違った:http://blog.tearthesky.com/2018/09/aws-idcloudfrontacm.html]]

----
** アクセスログと検索 [#f0dad996]

- [[標準ログ (アクセスログ) の設定および使用 - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html]]
-- S3上に保存できる
-- 2023-06: ACLを無効化したs3 bucketには保存できない



- [[Amazon CloudFront ログのクエリ - Amazon Athena:https://docs.aws.amazon.com/ja_jp/athena/latest/ug/cloudfront-logs.html]]
-- Athenaから検索できる

- 記事
-- [[Amazon CloudFrontに2019年12月から追加されていたアクセスログの7つの新フィールドについて確認してみた | Developers.IO:https://dev.classmethod.jp/articles/amazon-cloudfront-access-logs-new-field-201912/]]
-- [[CloudFrontログを別のAWSアカウントのS3バケットに出力する | DevelopersIO:https://dev.classmethod.jp/cloud/aws/cloudfront-logs-to-cross-account-bucket/]]

----
** Basic認証 [#q51e2702]

記事:
- [[CloudFront FunctionsでBasic認証のパスワードをかける | DevelopersIO:https://dev.classmethod.jp/articles/apply-basic-authentication-password-with-cloudfront-functions/]]

- [[Basic認証のあるサイトをCloudFrontでキャッシュする | Developers.IO:https://dev.classmethod.jp/cloud/aws/how-do-i-enable-basic-authentication-behind-cloudfront/]]
-[[周回遅れエンジニアノート: CloudFront で Basic 認証使う:http://lapped-lapped.blogspot.jp/2014/07/cloudfront-basic.html]]

----
** トラブルシューティング [#c0e6a714]

- 記事
-- [[[こんな時どうする]CloudFrontのログが出力されない時の確認と対応事例 | DevelopersIO:https://dev.classmethod.jp/cloud/aws/cloudfront-log-settings-check/]]

----
** 証明書のpublic keyサイズは2048bitまで [#y52149d2]

4096bitの証明書はACMへインポートはできるが、CloudFrontでは使えない。

- [[CloudFront で SSL/TLS の証明書を使用するための要件 - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-requirements.html#https-requirements-size-of-public-key]]
> パブリックキーのサイズ
> 証明書のパブリックキーの長さは、その保存場所によって異なります。
> AWS Certificate Manager (ACM) への証明書のインポート: パブリックキーの長さは 1,024 ビットまたは 2,048 ビットであることが必要です。ACM ではより大規模なキーがサポートされていますが、CloudFront で使用する証明書の制限は 2048 ビットです。
> AWS Identity and Access Management (IAM) 証明書ストアへの証明書のアップロード: パブリックキーの最大サイズは 2,048 ビットです。
> 2,048 ビットを使用することをお勧めします。

-記事
--[[CloudFront用に証明書をインポートするときは鍵長に注意しよう 〜ZeroSSLでデフォルトで作成される鍵を例にして〜 | DevelopersIO:https://dev.classmethod.jp/cloud/aws/cloudfront-pay-attention-to-key-length/]]

----
** https対応 [#eb6e562c]

httpsコンテンツ中にhttpが混ざると警告を発する。

- [[CloudFront で HTTPS を使用する - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/using-https.html]]

- https://xxxxx.cloudfront.net/
-- cloudfront自体のSSL証明書を使う

- https://www.example.com/
-- 独自ドメイン + 独自SSL証明書を使う

- 記事
-- [[Amazon CloudFrontで専用IPによる独自SSLを試してみた | Developers.IO:https://dev.classmethod.jp/articles/amazon-cloudfront-dedicated-ip-custom-ssl/]] SNI非対応のクライアントの場合


----
** キャッシュの削除 [#z226e224]

-[[オブジェクトの無効化 (ウェブディストリビューションのみ) - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html]]

--有効期限前にキャッシュを無効化できる

-記事

--[[【朗報】Amazon CloudFrontのキャッシュ削除(Invalidation)が速くなりました【5秒で90%】 | Developers.IO:https://dev.classmethod.jp/cloud/aws/cloudfront-fast-invalidation/]]

-awscliの場合:

#geshi(bash){{
# curlでキャッシュの状態を確認
curl -I https://example1234.cloudfront.net/path/to/image.jpg
...
X-Cache: Hit from cloudfront

# distribution-id一覧
AWS_PROFILE=default
aws cloudfront list-distributions --profile $AWS_PROFILE --query 'DistributionList.Items[].[Id,DomainName,Origins.Items[].DomainName]'

# distribution-idとpathを指定してキャッシュを削除
aws cloudfront create-invalidation \
 --distribution-id ABCD1234 \
 --paths /path/to/image.jpg \
 --profile $AWS_PROFILE

# invalidationsの一覧と進行状況表示。Status: Completedなら完了
aws cloudfront list-invalidations \
 --distribution-id invalidation \
 --profile $AWS_PROFILE

# curlでキャッシュの有効期限が切れた事を確認
curl -I https://example1234.cloudfront.net/path/to/image.jpg
...
X-Cache: Miss from cloudfront
}}


----
** S3 + CloudFront時にindex.htmlの省略 [#u6bd02a0]

- S3 Origin + CloudFrontの場合、「DefaultRootObject = index.html」と設定をすると http://example.cloudfront.net/ へのリクエストでindex.htmlは読み込んでくれる。しかし、/subpage/ では index.htmlは読まずにエラーになる
-- [[デフォルトのルートオブジェクトの指定 - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html]]


CloudFront Functionsを使う方法:
- [[index.html を追加してファイル名を含まない URL をリクエストする - Amazon CloudFront:https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/example-function-add-index.html]]
- [[CloudFront FunctionsをTerraformで書いてみた #AWS - Qiita:https://qiita.com/yoshuuua/items/08f6df850ef36ac41d4d]]


Lambda@edgeを使う方法:
--[[できた!S3 オリジンへの直接アクセス制限と、インデックスドキュメント機能を共存させる方法 | DevelopersIO:https://dev.classmethod.jp/articles/directory-indexes-in-s3-origin-backed-cloudfront/]]

Custom OriginでS3バケットを指定 + CloudFrontの場合はサブページ以下のindex.htmlも読んでくれるようだ。(未確認)
--[[CloudFront に S3 bucket のサブディレクトリパスのコンテンツを参照させる - Qiita:http://qiita.com/naoiwata/items/3c6626cbeacbb44d4aa8]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS