はじめに
S3内のコンテンツをCloudFrontを使って配信する際に、直接外部からS3へアクセスすることは制限しつつ、CloudFrontを通してはアクセスができるという設定をしてみました。
今回は拡張子が「.png」のアクセスがあった場合にS3へ振り分ける設定を入れ、さらにCloudFrontからのみしかそのバケットへはアクセスできないようにします。
設定
1.S3の設定
1-1.バケットを作成しコンテンツをアップロードします。
今回はバケット名を「from-cloudfront-to-s3-test」とし、コンテンツには「test.png
」を利用します。
1-2.アップロードしたコンテンツへブラウザからアクセスし、閲覧できないことを確認します。
それでは設定をしてみます。
2.サービス画面の表示
2-1.コントロールパネルの「Services」から「CloudFront」を選択します。
3.Originの作成
3-1.対象の「Distribution」にチェックをし「Distribution Settings」を選択します。
3-2.タブ「Origins」を選択し「Create Origin」をクリックします。
3-3.「Origin Domain Name」を今回準備したS3バケット(from-cloudfront-to-s3-test)に設定します。
3-4.「Restrict Bucket Access」を[Yes]を選択します。
すると「Origin Access Identity」、「Comment」、「Grant Read Permission on Bucket」の項目が現れます。
3-5.現れた項目に対し以下の内容を選択または入力します。
・「Origin Access Identity」→「Create a New Identity」を選択。
・「Comment」→「access-idenntity-s3-access-test」と入力。
・「Grant Read Permission on Bucket」→「Yes,Update Bucket Policy」を選択。
3-6.「Create」をクリックすると一覧に作成した「Origin」がリストされます。
4.Behaviorの作成
4-1.タブ「Behaviors」を選択し、「Create Behavior」をクリックします。
4-2.「Path Pattern」を「/*.png」と入力し、「Origin」は「S3-from-cloudfront-to-s3-test」を選択します。(今回はその他はデフォルトのままにします。)
4-3.「Create」をクリックすると一覧に「Behavior」がリストされます。
5.反映確認
5-1.左サイドばーの「Distributions」または中央画面上部の「CloudFront Distributions」をクリックします。
5-2.「Status」項目が「In Progress」となっているのが確認できます。
5-3.しばらく時間が経つと「Status」項目が「Deployed」となったら反映完了です。
5-4.CloudFront経由で「/test.png」へアクセスするとS3にアップ画像が表示されます。
「CloudFront Distribution」画面からタブ「General」をクリックすると「Domain Name」が確認できるので、今回の場合はそれに続けて「/test.png」を入力してあげればOKです。
おまけ
念のため、アップした際のS3の「Link」をアクセスすると「AccessDenied」の画面が表示されます。
また、バケットのPermissionについても確認してみます。
「Edit bucket policy」をクリック。
CloudFrontの「from-cloudfront-to-s3-test」からアクセスができる設定が入っているのを確認できます。この設定はCloudFrontの「Origin」作成時に、「Grant Read Permission on Bucket」を[Yes]にすると追加されます。
また、「from-cloudfront-to-s3-test」はCloudFrontの「Origin Access Identity」で確認できます。
これもCloudFrontの「Origin」作成時に「Origin Access Identity」を[Create a New Identity]にすることで今回は新規に作成しています。
ということでアクセス許可設定が完了しました。