7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【AWS】OACを設定してCloudFront経由でS3に格納したコンテンツを公開する

Posted at

みなさんこんにちは。
株式会社エーエスエル システム部事業推進室の萩原です。

今回はS3に格納したコンテンツをCloudFrontを経由して公開する方法についてメモを残します。
image.png

目的

CloudFrontの設定で、オリジンアクセスアイデンティティー(OAI)がレガシーな設定となったため、オリジンアクセスコントロール(OAC)で実装するための検証備忘として。

流れ

・オリジンアクセスコントロール(OAC)とは
・S3バケットの作成
・CloudFrontディストリビューションの作成
・S3バケットにポリシーを設定する
・動作確認
・補足1:デフォルトルート
・補足2:verify permissions to access-analyzer

オリジンアクセスコントロール(OAC)とは

そもそも「オリジン」とは、CloudFrontにアクセスされたリクエストが送信される場所のことです。

アクセスコントロールの種類は、オリジンアクセスコントロール (OAC) とオリジンアクセスアイデンティティ (OAI) の2つがあります。

現在OAIはレガシーな設定となっており、OACが推奨されています。
OACでは、以下がサポートされています。

・すべての AWS リージョンのすべての Amazon S3 バケット
(2022 年 12 月以降に開始されたオプトインリージョンを含む)
・AWS KMS による Amazon S3 サーバー側の暗号化 (SSE-KMS)
・Amazon S3 に対する動的なリクエスト (PUT と DELETE)

※最新の情報は公式サイトを確認してください。

かみ砕くと、CloudFrontからオリジンであるS3にアクセスするための権限を設定してあげようということですね。
ということで、今回はOACの設定で進めていきます。

S3バケットの作成

CloudFrontにアクセスが来た時に受けてくれるオリジンを作成します。
今回は検証なので、適当な静的コンテンツとしてindex.htmlファイルをアップロードしておきます。

バケット名入力やリージョン選択以外は、特に設定の変更は必要ありません。
image.png

バケットの作成が成功したら、index.htmlファイルをアップロードしておきます。
image.png

CloudFrontディストリビューションの作成

ディストリビューション作成時、オリジンドメインで先ほど作成したS3バケットを選択します。
image.png

次に、オリジンアクセスで「Origin access control settings」を選択し、「コントロール設定を作成」をクリックします。
image.png

特に要件が無い限り設定はそのままで「作成」をクリックします。
image.png

その他の項目は任意で設定を変更してください。
「ディストリビューション作成」をクリックします。

ディストリビューションが正常に作成されたメッセージの下に、
「S3 バケットポリシーを更新する必要があります」という警告が表示されます。
S3はリソースベースのアクセスポリシーを設定して、他のリソースからのアクセスを許可してあげる必要があるためです。
「ポリシーをコピー」をクリックします。
image.png

S3バケットにポリシーを設定する

オリジンに設定したS3バケットのアクセス許可タブから、バケットポリシーの「編集」をクリックします。
image.png
image.png
先ほどコピーしたポリシーを貼り付けましょう。

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::cloudfront-test-asl/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::<アカウントID>:distribution/<ディストリビューションID>"
                }
            }
        }
    ]
}

動作確認

CloudFrontのディストリビューションドメイン名/S3バケットオブジェクト名
をWebブラウザのURLに入力し、格納したindex.htmlのページが表示されることを確認しましょう。
(例)https://XXXXXXXXXXX.cloudfront.net/index.html
image.png

image.png

補足1:デフォルトルート

ディストリビューションドメイン名にアクセスした際、index.htmlを返す設定をしたい場合は、ディストリビューションの設定で「デフォルトルートオブジェクト」を入力します。
image.png

補足2:verify permissions to access-analyzer

今回の検証にあたり、作業用のIAMユーザーにはCloudFrontとS3に対してフルコン権限を与えていました。
S3のバケットポリシー編集時、
「verify permissions to access-analyzer:ValidatePolicy in IAM to use policy validation.」
のエラーメッセージが表示されましたが、ポリシーの編集には成功します。
image.png
このメッセージはバケットポリシーの編集とは関係なく、access-analyzerを使用する権限が無いために表示されるエラーです。
access-analyzerについてはここでは深追いしませんが、以下公式サイトを掲載しておきます。

おわり

今回は最低限、S3コンテンツの公開に必要な設定でした。
CloudFrontを使うメリットはCDNとして柔軟なキャッシュ設定や、SSL証明書の適用、カスタムドメインの設定など様々です。
是非色々試して有効活用してください。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?