AWSコンテンツへのアクセスを限定開放する黒田如水の画像下さい!!!!(2)CloudFrontを設定する
あらすじ
黒田家のAWSのS3にあるファイルやAPIを特定の相手のみが利用できる形で公開するために、CloudFrontを使用する。
亡き友、竹中半兵衛重治が残した言葉を胸に刻み・・・(エモポイント)
CloudFrontとは
S3やAPIをAWSのアカウントを持っていない人でも、条件に合致するならアクセスできるようにする、という仕組みです。 もしくはWeb上のアクセスの関所。
設定をしていく ver20210531
AWSコンソールからCloudFrontを立ち上げる
コンソールにログイン後、一番上の検索フィールドでCloudFrontと入力します。 サービスに表示されるCloudFrontを押下しましょう。
下図のように左上にCloudFrontと表示される画面が立ち上がります。
今回の目的 Distribution
を作る
Distribution
とは
Distribution
とは、Web上に置かれるアクセスの関所そのものを指します。
Distribution
の設定要素はいくつかありますが、
Origin | 関所を通ってアクセスを許可するAWSの何か(APIやAPIなど) |
Behabior | アクセスをどのOriginに振り分けるかのルール |
の2つだけ押さえておけば一旦は大丈夫です。
逆に言えば、Distribution
を作成する際に、最低でも一つずつOrigin
とBehabior
は必要になります。
Distribution
初期設定
画面左のペインから一番上のDistributions
を押下します。
表示された画面の一番上部のCreate Distribution
を押下します。
英語で記載されたページに遷移したかと思います。
一応、英文の内容ですが
以下のことがしたい場合はDistributionを作成します。 ・静的および動的コンテンツ (.html、.css、.php、グラフィック ファイルなど) の配布を高速化します。 ・HTTP または HTTPS を使用してメディア ファイルを配布します ・オブジェクトを追加、更新、または削除し、Web フォームからデータを送信します。 ・ライブ ストリーミングを使用して、イベントをリアルタイムでストリーミングします。 ファイルをオリジン (Amazon S3 バケットまたはウェブサーバー) に保存します。 ディストリビューションを作成した後、ディストリビューションにオリジンを追加できます。
つまりDistribution
でできることを説明しています。Get Started
しましょう。
するとやたら入力ボックスのある画面が表示されます。
ただし、これを全部入力する必要はありません。
ここで行うのは上から、前掲の必須の2要素、Origin
とBehavior
、最後にDistibution
の設定になります。
Origin
設定
Origin
にS3バケットを設定する場合
先頭のOriginDomainName
の枠をクリックし、プルダウン表示される中から対象のバケットを選びます。
加えてバケット内の特定のフォルダオブジェクトを対象に取りたい場合は、Origin Path
にスラッシュとフォルダ名を記載します。
Restrict Bucket Access
はYesにします。
Origin Access Identity
はそのまま、Grant Read Permissions on Bucket
はYes, Update Bucket Policy
とします。
これをしないと、S3側のバケットポリシーが更新されず、Distribution
からのアクセスも弾いてしまうので注意が必要です。
また、Distribution
の初期設定が終わったらバケットのアクセス状態は公開になっていることを確認してください。
これがONになっていると、Distribution
からのアクセスも拒否されてしまいます。
Origin
にAPI Gatewayを設定する場合
エンドポイントのURLのうち、ステージ名以降を除いた部分をOriginDomainName
の枠に貼り付けます。
勝手にhttps://
が省略されますが問題ございません。
加えてOrigin Path
にスラッシュとステージ名を記載します。
共通
Enable Origin Shield
は指定しなくても大丈夫です。
指定すると、Origin Shield Region
を指定できるようになります。
Origin Shield Region
を指定すると、レイテンシが小さくなる=そのリージョンに通信が最適化される、らしいです。
Origin ID
を入力します。デフォルトで入るものは長いので、管理する際に分かりやすい文字列に差し替えることをお勧めします。
Minimum Origin SSL Protocol
はTLSv1.2
、Origin Protocol Policy
はHTTPS Only
を指定します。
詳細が気になる方は「こちら(外部)」を確認してください。
他、接続のタイムアウト、レスポンスのタイムアウト、ヘッダー指定もありますが、基本はデフォルト値で大丈夫です。
Behavior
設定
Viewer Protocol Policy
はHTTP and HTTPS
にします。HTTPリクエスト、HTTPSリクエストいずれも可という状態です。
Allowed HTTP Methods
は許容するHTTPリクエストの種類です。POSTされて動くAPIをOrigin
に指定しているのであればに一番下のものにしないと動かないので、何も考えず一番下のものでいいと思います。
その他は一切操作は不要ですが、Real-time Log Configuration
については,
リアルタイムでログを蓄積したい、且Kinesisを導入しているなら有効化が可能です。
参考
Distribution
設定
ここについても基本的には操作は不要です。
強いて言うと下図のAWS WAF Web ACL
は、後から使用します。
これが、Distribution
に対して適用するアクセス制限のルールをつかさどります。
※逆に言うとDistribution
を作成するだけだと門番がいない関所を立てたにすぎないので注意
最後に画面最後のCreate Distribution
を押下したら完成です。
テスト
再び、左のペインからDistributionsに戻ります。
Create Distributions
の下に、今まで作ったDistribution
が並んでいるので、作成したもののIDをクリックします。
下図のような画面が表示されたら、Domain Name
をコピーしましょう。
Origin
にS3バケットを設定した場合
ブラウザのURLにDomain Name
/[ファイル名]を入力します。
例)
Origin Domain Name
を「my_bucket」、Origin Path
を「my_folder」、Domain Name
を「hogehoge.cloudfront.net」と設定しているとします。
画像ファイルであるhttps://my_bucket.s3-ap-northeast-1.amazonaws.com/my_folder/myImage.png
のhttps://my_bucket.s3-ap-northeast-1.amazonaws.com/my_folder
までがDomain Name
であるhogehoge.cloudfront.net
で代替されているので、
ブラウザにはhogehoge.cloudfront.net/myImage.png
と入力します。
Origin
にAPI Gatewayを設定した場合
実際にHTTPリクエストを実行して動作を確認します。 例えばPOSTメソッドのAPIなら下図のようになります。
もし、POSTしたにもかかわらずThe request could not be satisfied.
のようなHTML形式のアラートが返った場合は
タブのBehavior
のAllowed HTTP Methods
でPOSTが許可されているか確認して下図の通りに設定してください。
ここまででできたこと
関所と、関所を通らないと辿り着けない場所1個の設定
やらないといけないこと
アクセス制限のルールの設定 (関所に門番を立てる) 関所を通らなければ辿り着けない場所の追加
流石「今世の張良」とうたわれた名軍師、黒田如水。今時点で使い道がイメージできている・・・・ 次は複数のコンテンツをCloudFrontに紐づかせる、通称マルチオリジンについてです。