Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Google Cloudの未使用ファイアウォールルールを特定する

By Ami MahloofJun 25, 20193 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

1 ypmxzr3hay0 4kvzxka5eq

共有VPCで運用するGoogle Cloudの規模が大きくなると、環境に適用されているファイアウォールルールを把握しきれなくなりがちです。本記事では、私が未使用ファイアウォールルールの問題をどう解決したかをご紹介します。

1 ypmxzr3hay0 4kvzxka5eq画像提供: Information Age

共有VPCを使ったホストプロジェクトでファイアウォール構成をまとめて管理したほうが運用しやすい、というケースは少なくありません。

しかし現状では、ネットワーク内のどのインスタンスにも適用されていないルールを簡単に抽出する手段がありません。ファイアウォールルール数の上限に達したときには、未使用または孤立したルールを洗い出して整理する必要があります。

gcp-discover-orphaned-firewall-rules ツールを使えば、こうした未使用ルールを特定できます。

仕組み

このツールはホストプロジェクトのIDを受け取り、そこに紐づくすべての共有VPCプロジェクトを検出します。続いてホストプロジェクトのファイアウォールルール(ingressタイプのみ)を取得し、そこからアクティブなルールを除外していくための新しいリストを作成します。

各プロジェクト(ホストプロジェクトを含む)についてVMインスタンスを調べ、ネットワークタグやサービスアカウントがファイアウォールルールのターゲットタグと一致するかをチェックします。一致したルールは除外用リストから取り除かれ、残ったリストが次のプロジェクトへ引き継がれます。すべてのプロジェクトを処理し終えると、最終的に未使用ルールだけがリストに残る仕組みです。

このリストは画面にテーブル形式で出力されるほか、CSVファイルにも書き出されます。

本ツール自体はルールの削除は行いません。実際の削除は手動で行うか、出力されたCSVファイルをもとに削除用スクリプトを作成して実行してください。

インストール方法

バイナリをダウンロードするか、リポジトリをクローンします。

git clone [email protected]:doitintl/gcp-discover-orphaned-firewall-rules.git
cd gcp-discover-orphaned-firewall-rules
go mod download
go run main.go

Google 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 client
INFO[2019-06-12T12:57:54+03:00] host project: host-project-123ewquiyt
INFO[2019-06-12T12:57:56+03:00] firewall Rules for host project: host-project-123ewquiyt
INFO[0001] listing only TargetTags rules...
INFO[0001] number of TargetTags Rules: 3
INFO[2019-06-12T12:57:56+03:00] child project: deleted-project-1268522
WARN[0001] error listing VM instances googleapi: Error 404: Failed to find project deleted-project-1268522, notFound
WARN[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, notFound
INFO[2019-06-12T12:57:56+03:00] child project: resource-project-12iuyt2854
INFO[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-rule
INFO[0001] 2 potential orphaned firewall rules to evalute...
INFO[2019-06-12T12:57:56+03:00] child project: resource-2-23ouyrwe9
INFO[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-rule
INFO[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.csv
INFO[2019-06-12T12:57:57+03:00] done!

あわせて、次のようなCSVファイルも生成されます。

rule-name,rule-tags
ghost,dead
real-rule,"real-1,real2,real-3"

ほかの記事もぜひご覧ください。ブログのチェック、またはAmiのTwitterのフォローもおすすめです。