Posted at

S3の特定バケットへのアクセスを特定のCloudFrontからのみ許可する。

More than 3 years have passed since last update.


はじめに

S3内のコンテンツをCloudFrontを使って配信する際に、直接外部からS3へアクセスすることは制限しつつ、CloudFrontを通してはアクセスができるという設定をしてみました。

cloudfront.png

今回は拡張子が「.png」のアクセスがあった場合にS3へ振り分ける設定を入れ、さらにCloudFrontからのみしかそのバケットへはアクセスできないようにします。


設定


1.S3の設定


1-1.バケットを作成しコンテンツをアップロードします。

今回はバケット名を「from-cloudfront-to-s3-test」とし、コンテンツには「test.png

」を利用します。


1-2.アップロードしたコンテンツへブラウザからアクセスし、閲覧できないことを確認します。

20151127_S3_Object-2-URL.png

それでは設定をしてみます。


2.サービス画面の表示


2-1.コントロールパネルの「Services」から「CloudFront」を選択します。


3.Originの作成


3-1.対象の「Distribution」にチェックをし「Distribution Settings」を選択します。

20151127_CloudFront_Distributions-1-1.png

または対象のIDをクリックでもOKです。

20151127_CloudFront_Distributions-1-2.png


3-2.タブ「Origins」を選択し「Create Origin」をクリックします。

20151127_CloudFront_Distributions-2-1.png


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」を選択。

20151127_CloudFront_Distributions-2.png


3-6.「Create」をクリックすると一覧に作成した「Origin」がリストされます。

20151127_CloudFront_Distributions-3.png


4.Behaviorの作成


4-1.タブ「Behaviors」を選択し、「Create Behavior」をクリックします。

20151127_CloudFront_Distributions-4.png


4-2.「Path Pattern」を「/*.png」と入力し、「Origin」は「S3-from-cloudfront-to-s3-test」を選択します。(今回はその他はデフォルトのままにします。)

20151127_CloudFront_Distributions-5.png


4-3.「Create」をクリックすると一覧に「Behavior」がリストされます。

20151127_CloudFront_Distributions-6.png


5.反映確認


5-1.左サイドばーの「Distributions」または中央画面上部の「CloudFront Distributions」をクリックします。

20151127_CloudFront_Distributions-8.png


5-2.「Status」項目が「In Progress」となっているのが確認できます。

20151127_CloudFront_Distributions-7.png


5-3.しばらく時間が経つと「Status」項目が「Deployed」となったら反映完了です。

20151127_CloudFront_Distributions-9.png


5-4.CloudFront経由で「/test.png」へアクセスするとS3にアップ画像が表示されます。

20151127_CloudFront_Distributions-10.png

「CloudFront Distribution」画面からタブ「General」をクリックすると「Domain Name」が確認できるので、今回の場合はそれに続けて「/test.png」を入力してあげればOKです。


おまけ

念のため、アップした際のS3の「Link」をアクセスすると「AccessDenied」の画面が表示されます。

20151127_S3_AccessDenied.png

また、バケットのPermissionについても確認してみます。

20151127_S3_Object-3.png

「Edit bucket policy」をクリック。

20151127_S3_Object-4.png

CloudFrontの「from-cloudfront-to-s3-test」からアクセスができる設定が入っているのを確認できます。この設定はCloudFrontの「Origin」作成時に、「Grant Read Permission on Bucket」を[Yes]にすると追加されます。

また、「from-cloudfront-to-s3-test」はCloudFrontの「Origin Access Identity」で確認できます。

20151127_CloudFront_AccessIdentity-5.png

これもCloudFrontの「Origin」作成時に「Origin Access Identity」を[Create a New Identity]にすることで今回は新規に作成しています。

ということでアクセス許可設定が完了しました。

  • 2.サービス画面の表示
  • 3.Originの作成
  • 4.Behaviorの作成
  • 5.反映確認
  • おまけ