プログラミング備忘録

仕事で覚えたことのまとめ

AWSコンテンツへのアクセスを限定開放する黒田如水の画像下さい!!!!(4)AWSWAFのアクセスルールをCloudFrontに適応する

あらすじ

黒田家のAWSのS3にあるファイルやAPIを特定の相手のみが利用できる形で公開するために、CloudFrontを使ってみよう。 だって、亡き友竹中半兵衛重治が言い残したのだから...(エモポイント)

前回CloudFrontから複数のコンテンツへのアクセスを可能にするマルチオリジンを実現した黒田如水、今回は肝心のアクセス制限ルールを適用するようだ。

大まかな流れ

  • WAFの中のIP SetでIPアドレスAWSに登録する。
  • 登録したIPアドレスを元に、IPアドレスアクセス許可(ないし拒否)のルールを作る
  • 作成したアクセス許可ルールをCloudFrontに適用する

アクセス制限のためのルールを作成する v20210607

ここではCloudFrontの外の仕組みである、WAFというサービスを使用します。 このWAFで作成したアクセス制限のルールを、CloudFrontDistributionに適用する、という流れです。

ルールに使用するIPアドレスを登録する

サービス一覧からAWSWAFを立ち上げます。 f:id:nigou2:20210710173327p:plain

左のペインから IP setsを選び、画面右上のCreate IP setを選びます。 f:id:nigou2:20210710173406p:plain

IPアドレスを入力します。 RegionはデフォルトからGlobalに変更してください。 IP addressesにアクセスを許可する(あるいは拒否する)IPアドレスを入力します。

f:id:nigou2:20210710173454p:plain

アクセスルールを作る

画面左のペインからWeb ACLを選び、画面左上のCreate web ACLを押下します f:id:nigou2:20210710173531p:plain

表示される画面のうちResource typeは 今回のようにCloudFrontに対して適用するルールの場合は CloudFront distributionに必ず設定してください。

f:id:nigou2:20210710173639p:plain

Nextを押し、表示される画面のAddRuleのプルダウンから Add my own rules and rule groupsを選択します。

f:id:nigou2:20210710173747p:plain

下図の画面が表示されるので Rule TypeからIP Setを選び、 ル―ルの名前の入力とルールが適用されるIPセットのプルダウンの選択を済ませます。 最後にActionの箇所でプルダウンから選択した IPセットにしたいして動作(ここでいうとCloudFrontのアクセス)を 許可(Allow)するのか、拒否(Block)するのかを選びます。 ここでは、IPセットのみアクセス可能にしたいので、Allowとします。

f:id:nigou2:20210710173814p:plain

右下のAdd ruleでルールの作成を終了します。 最後に戻ってきた画面でBlockを選びます。

f:id:nigou2:20210710173840p:plain

これで、IPアドレスに合致するものはアクションが可能、合致しないIPアドレスの場合はアクションを拒否、というルールが出来ました。

次のSet rule priorityは、複数のルールを登録した場合の処理の優先順位です。 1つしかルールを作成、設定していないので、何もせずNextを押します。 さらに次のConfigure metricsは、CloudWatch上の表示を決める部分なので、デフォルト値で問題ないです。

最後に、Review and create web ACLで、自分の作成したルールを確認し、画面最下部のCreate web ACLで完了です。

作ったアクセスルールをCloudFrontに設定する

CloudFrontに戻り、ルールを適用するDistributionを開き、Editのボタンから編集画面に移動します。 f:id:nigou2:20210710173926p:plain

開いた画面のAWS WAF Web ACLのプルダウンから、先ほどAWFで作成したルールを選んで、右下の「yes,Edit」で完了です。 f:id:nigou2:20210710174019p:plainf:id:nigou2:20210710174019p:plain

テスト

登録したIPアドレスでアクセスすると図のように正常にアクセスが、

f:id:nigou2:20210710174342p:plain

それ以外でアクセスすると下記のようなアクセス拒否のメッセージが表示されます。

403 ERROR
The request could not be satisfied.
Request blocked. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
Generated by cloudfront (CloudFront)
Request ID: **********************************

できたこと

一つのアクセスルールを複数のS3、APIゲートウェイに適用する。

f:id:nigou2:20210710174443p:plain

まとめ

  • 旗印がIPアドレス、つまりWeb上の所属を表す
  • CloudFrontに適用したAWFのルールが門番となり、通行を許可したり、拒否したりという判断を行っている。
  • アクセス時のBehaviorが目的となるOriginへの分岐をつかさどる
  • Originはコンテンツそのものを表す。

黒田家のその後

慶長5年9月、ついに関ヶ原にて石田三成徳川家康が衝突。

黒田如水とその息子長政はAWSというクラウドストレージに寝返りに必要な情報を置き、その成果を十分に発揮。 家康は戦後、黒田長政の右手を三度取って礼を言ったとされる。

このことを聞いた如水は息子に対し「その間左手は何をしていたのか」と長政に尋ねた。自分なら家康○して天下を取るだろうに。

長政は答えて言う。

「某しかAWSのアカウントを持っていない故、福島殿のファイルを代わりにアップしていた」

豊前の大名黒田家の受難は続く。