
共有VPCで運用するGoogle Cloudの規模が大きくなると、環境に適用されているファイアウォールルールを把握しきれなくなりがちです。本記事では、私が未使用ファイアウォールルールの問題をどう解決したかをご紹介します。
画像提供: Information Age
共有VPCを使ったホストプロジェクトでファイアウォール構成をまとめて管理したほうが運用しやすい、というケースは少なくありません。
しかし現状では、ネットワーク内のどのインスタンスにも適用されていないルールを簡単に抽出する手段がありません。ファイアウォールルール数の上限に達したときには、未使用または孤立したルールを洗い出して整理する必要があります。
gcp-discover-orphaned-firewall-rules ツールを使えば、こうした未使用ルールを特定できます。
仕組み
このツールはホストプロジェクトのIDを受け取り、そこに紐づくすべての共有VPCプロジェクトを検出します。続いてホストプロジェクトのファイアウォールルール(ingressタイプのみ)を取得し、そこからアクティブなルールを除外していくための新しいリストを作成します。
各プロジェクト(ホストプロジェクトを含む)についてVMインスタンスを調べ、ネットワークタグやサービスアカウントがファイアウォールルールのターゲットタグと一致するかをチェックします。一致したルールは除外用リストから取り除かれ、残ったリストが次のプロジェクトへ引き継がれます。すべてのプロジェクトを処理し終えると、最終的に未使用ルールだけがリストに残る仕組みです。
このリストは画面にテーブル形式で出力されるほか、CSVファイルにも書き出されます。
本ツール自体はルールの削除は行いません。実際の削除は手動で行うか、出力されたCSVファイルをもとに削除用スクリプトを作成して実行してください。
インストール方法
バイナリをダウンロードするか、リポジトリをクローンします。
git clone [email protected]:doitintl/gcp-discover-orphaned-firewall-rules.gitcd gcp-discover-orphaned-firewall-rulesgo mod downloadgo run main.goGoogle Cloudへの認証
本プロジェクトでは Google Application Default Credentials (ADC) を使用します。
ターミナルからgcloudのデフォルト設定でログインする場合は、次のコマンドを実行します。
gcloud auth application-default loginサービスアカウントを使う場合は、次の環境変数を設定してください。
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/[FILE_NAME].json"実行方法
利用可能なフラグは次のとおりです。
--debug Set log level--host string Host Project ID <Required>--running Filter only running VM instances./discover-orphaned-rules-darwin-amd64 --host=host-project-123ewquiyt
INFO[2019-06-12T12:57:54+03:00] creating a new Compute API clientINFO[2019-06-12T12:57:54+03:00] host project: host-project-123ewquiytINFO[2019-06-12T12:57:56+03:00] firewall Rules for host project: host-project-123ewquiytINFO[0001] listing only TargetTags rules...INFO[0001] number of TargetTags Rules: 3INFO[2019-06-12T12:57:56+03:00] child project: deleted-project-1268522WARN[0001] error listing VM instances googleapi: Error 404: Failed to find project deleted-project-1268522, notFoundWARN[2019-06-12T12:57:56+03:00] Could not check project deleted-project-1268522 for orphaned rules: googleapi: Error 404: Failed to find project deleted-project-1268522, notFoundINFO[2019-06-12T12:57:56+03:00] child project: resource-project-12iuyt2854INFO[0001] making a list of orphaned rules with all rules (active rules will be removed from it)resource-project-12iuyt2854, ghostresource-project-12iuyt2854, instance-target-demo-ruleresource-project-12iuyt2854, real-ruleINFO[0001] looking for orphaned rules in project..INFO[0001] remove active rule from orphans list: instance-target-demo-ruleINFO[0001] 2 potential orphaned firewall rules to evalute...INFO[2019-06-12T12:57:56+03:00] child project: resource-2-23ouyrwe9INFO[0002] making a list of orphaned rules with all rules (active rules will be removed from it)resource-2-23ouyrwe9, ghostami-resource-2-23ouyrwe9, instance-target-demo-ruleami-resource-2-23ouyrwe9, real-ruleINFO[0002] looking for orphaned rules in project..INFO[0002] remove active rule from orphans list: instance-target-demo-ruleINFO[0002] 2 potential orphaned firewall rules to evalute...INFO[2019-06-12T12:57:57+03:00] generating CSV file for orphaned rules...INFO[0002] creating a new CSV file: orphaned-rules.csvINFO[2019-06-12T12:57:57+03:00] done!あわせて、次のようなCSVファイルも生成されます。
rule-name,rule-tagsghost,deadreal-rule,"real-1,real2,real-3"ほかの記事もぜひご覧ください。ブログのチェック、またはAmiのTwitterのフォローもおすすめです。