1
0

More than 1 year has passed since last update.

CloudFrontのIP範囲の変更を検知してnginxのset_real_ip_fromを変更するプルリクを自動で作成する

Last updated at Posted at 2021-12-19

CloudFrontを用いたWebアプリの構成にしている場合、接続元のクライアントのIPを正確に取得するにはCloudFrontのIP範囲を把握して管理しておく必要があります。
しかしCloudFrontのIP範囲は変更されるので、それを検知して都度対応する必要があるので少々面倒です。
なのでこの作業を簡略化したいと思います。

CloudFrontのIPを設定すると何ができるか

CloudFrontのIPをnginxのset_real_ip_fromに設定することで信頼できるIPだと判断されるので、接続元クライアントのIPがREMOTE_ADDRで判断できるようになります。そのためX_FORWARDED_FORで判断することをせずに済み安全になります。

IP範囲の変更をどうやって検知するか

Amazon SNSで通知してくれるものもありますが、今回はhttps://ip-ranges.amazonaws.com/ip-ranges.jsonを定期的に確認することで対応します。

プルリク自動作成までのステップ

1. 公開されているIP範囲がnginxのconfと差分があるか確認
2.  差分があればプルリクを作成  

やることはこれだけなのでGithubActionを使用して実現してみます。

GithubAction

jobs:
  update-if-ip-changed:

    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: checkout master
        uses: actions/checkout@v2
        with:
          ref: master

      - name: update CloudFront IPs
        id: update-cloudfront
        env:
          FILE_PATH: path/to/set_real_ip_fromを記述するファイル
        run: |
          curl https://ip-ranges.amazonaws.com/ip-ranges.json \
          | jq -r '.prefixes | map(select(.service == "CLOUDFRONT")) | sort_by(.ip_prefix)[] | .ip_prefix' | awk '{print "set_real_ip_from " $1 ";"}' > $FILE_PATH

      - name: create PullRequest
        uses: peter-evans/create-pull-request@v3
        with:
          title: 'CloudFrontのIP範囲が変わったのでnginxに設定する'
          commit-message: 'feat: CloudFrontのIPをset_real_ip_fromで設定'
          branch: automated/update-cloudfront-ips
          base: master
          delete-branch: true
          reviewers: |
            hoge
            fuga

IP範囲を取得する際にsort_by(.ip_prefix)[]をすることで、管理しているIP範囲と差分が発生した時になるようにしています。
またステップがこれだけ簡易化できたのは、peter-evans/create-pull-requestのおかげです。このアクションが、コミットしてプルリク作成までを全て担ってくれるので、特にこちらで差分確認などの制御をする必要がありませんでした。(とても感動しました。)

動作確認

※動作確認のため、適当なIP範囲を設定しておきました。

スクリーンショット 2021-12-19 0.19.07.png

無事に正しいIP範囲に変更するプルリクが作成されました。

最後に

作業的なプルリク作成って意外とあると思うのでpeter-evans/create-pull-requestこちらを使用すると色々できるかもしれません。
他にも、リリースイメージ作成時にイメージタグ更新のプルリクを自動で作成することをこのアクションを使用して行なっています。
ぜひ何かに使ってみてはいかがでしょうか。

1
0
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
1
0