それなりに適当にやってます

なんとなくそれっぽいメモとか備忘録とか適当に。 2018年5月にブログ移転しました。 古い記事は未整理です。

Stackdriver Uptimeチェックのアクセス元IPアドレス取得と、ファイアウォールルールの更新

聞かれたので少し整理してメモを残しとく。

(2018/09時点で) Stackdriver Uptimeチェック のアクセス元IPを取得するには2通りの方法がある。

IPリスト自体は四半期に1度の更新頻度というのをドキュメントで見たけど、一々手でやるのは面倒なので結局こんな感じのスクリプトをサクッと作って確認した。

  1. Python で Stackdriver Uptimeチェック の IP取得
  2. "1" で取得したIPリストを元に、シェルスクリプト (gcloudコマンド) でファイアウォールルールを更新

以下、やったことのメモ

Stackdriver IPアドレスの取得スクリプト

pipgoogle-cloud-monitoring を入れて、とりあえず Github のコードを参考にIPリストだけ返すスクリプトを作った。

$ pip install google-cloud-monitoring
$ vi iplist.py
#!/usr/bin/env python
from google.cloud import monitoring_v3

client = monitoring_v3.UptimeCheckServiceClient()
ips = client.list_uptime_check_ips()

iplist = []
iplist_str = ''
for ip in ips:
  iplist.append(ip.ip_address)
iplist_str = ','.join(iplist)
print(iplist_str)

んで、実行して IPアドレスのリスト が取得できた事を確認

$ chmod +x iplist.py
$ ./iplist.py
104.155.77.122,104.155.110.139,146.148.119.250,146.148.59.114,23.251.144.62,146.148.41.163,35.197.117.125,35.203.157.42,35.199.157.7,35.186.164.184,35.188.230.101,35.199.27.30,35.187.242.246,35.186.144.97,35.198.221.49,35.199.66.47,35.198.18.224,35.199.67.79
ファイアウォールルールの作成

IPアドレスのリストが取得出来たので、gcloud コマンドで更新対象となるファイアウォールルールを作成

$ gcloud compute firewall-rules create default-allow-uptimecheck \
    --allow=tcp \
    --description="Allow stackdriver uptime check" \
    --network=default \
    --source-ranges="104.155.77.122,104.155.110.139,146.148.119.250,146.148.59.114,23.251.144.62,146.148.41.163,35.197.117.125,35.203.157.42,35.199.157.7,35.186.164.184,35.188.230.101,35.199.27.30,35.187.242.246,35.186.144.97,35.198.221.49,35.199.66.47,35.198.18.224,35.199.67.79"
ファイアウォールルールの更新

今度はシェルスクリプトでサクッとルールを更新するようなスクリプトを作成

$ vi stackdriver.sh
#!/bin/bash
IPLIST=`./iplist.py`
gcloud compute firewall-rules update default-allow-uptimecheck \
    --allow=tcp \
    --description="Allow stackdriver uptime check" \
    --source-ranges="${IPLIST}"
$ chmod +x stackdriver.sh
$ ./stackdriver.sh
Updated [https://www.googleapis.com/compute/v1/projects/xxxxxxxx/global/firewalls/default-allow-uptimecheck].

これでIPアドレスの取得〜更新までの流れは出来た。 実際には更新(差分)の確認とかエラー処理とか色々足さないとダメだけどね(;^ω^)

とりあえずこんな感じで出来るよーと返したとこまで c⌒っ゚д゚)っφ メモメモ...