コンテンツに移動
デベロッパー

Terraform による階層型ファイアウォール ポリシーの自動化

2023年2月1日
Google Cloud Japan Team

Infrastructure as Code を使用して、Google Cloud 環境でガードレールを一貫して実装するための階層型ファイアウォール ポリシーを作成する方法

※この投稿は米国時間 2023 年 1 月 10 日に、Google Cloud blog に投稿されたものの抄訳です。

ファイアウォール ルールは、Google Cloud のネットワーク セキュリティに不可欠な要素です。Google Cloud のファイアウォールは、ネットワーク ファイアウォール ポリシー階層型ファイアウォール ポリシーの 2 種類に大別されます。ネットワーク ファイアウォールは VPC に直接関連付けられてトラフィックを許可 / 拒否しますが、階層型ファイアウォールは、リソース階層を使用して組織全体のポリシーを作成および適用するためのポリシー エンジンと考えることができます。階層型ポリシーは、組織レベルでもフォルダレベルでも適用できます。階層型ファイアウォール ポリシー ルールは、ネットワーク ファイアウォール ルールのようにトラフィックを許可または拒否できます。さらに、go_next を使用して、評価を下位レベルのポリシーまたはネットワーク ファイアウォール ルール自体に委任することもできます。下位レベルのルールは、リソース階層の上位にあるルールをオーバーライドできません。これにより、組織全体の管理者が重要なファイアウォール ルールを 1 か所で管理できます。

では、階層型ファイアウォール ポリシーが役立つシナリオをいくつか考えてみましょう。

1. ネットワーク ファイアウォールの数を減らす

例: xyz.com は事業分野に基づいた 6 つの共有 VPC を持っているとします。セキュリティ ポリシーで、社内のどの VM に対しても SSH アクセスを拒否(つまり、TCP ポート 22 のトラフィックを拒否)するよう定められています。ネットワーク ファイアウォールでは、このルールを 6 か所(各共有 VPC)に適用する必要があります。しかし、各ネットワーク セグメントに細かいネットワーク ファイアウォール ルールが増えると、タッチポイントも増加するため、ドリフトや問題が発生する可能性が高まります。セキュリティ管理者は業務の支援で忙しく、ほとんどの場合、単純なファイアウォールの変更でさえボトルネックになります。階層型ファイアウォール ポリシーでは、セキュリティ管理者は TCP ポート 22 のトラフィックを拒否する共通かつ単一のポリシーを作成して xyz.com の組織に適用できます。もしくは、ポリシーにより明示的に 1 つまたは多数の共有 VPC をターゲットにすることもできます。このように、単一のポリシーで幅広いトラフィック制御への対応を定義することが可能です。 

2. 一元化されたポリシーを使用して重要なファイアウォール ルールを管理し、重要でない制御を VPC レベルで安全に委任する

例: xyz.com で、GCE への SSH アクセスは絶対に固く禁じられており、監査担当者はこれが必要だとします。ポート 443 への TCP トラフィックの許可 / 拒否は、トラフィックがどの共有 VPC に向かうかによって異なります。この場合、セキュリティ管理者は、TCP ポート 22 のトラフィックを拒否するポリシーを作成し、このポリシーを xyz.com に適用できます。また、TCP ポート 443 のトラフィックに対して「go_next」アクションを行う別のポリシーを作成し、このトラフィックを許可するかどうかを次の下位レベルで決定できます。その後で、共有 VPC レベルで 443 のトラフィックを許可 / 拒否するネットワーク ファイアウォール ルールを設定します。

こうすることで、セキュリティ管理者は上位のレベルでトラフィック制御ポリシーを適用してより広範な制御を行い、可能な場合は委任できます。最も重要なファイアウォール ルールを 1 か所で管理できるため、プロジェクト レベルの管理者(プロジェクト オーナー、編集者、セキュリティ管理者など)は、組織全体のポリシーの変更に対応する必要がなくなります。

階層型ファイアウォール ポリシーでは、セキュリティ管理者はトラフィック制御のパターンを一元的に適用、管理、監視することができます。

階層型ファイアウォール ポリシーの作成、構成、適用

階層型ファイアウォール ポリシーには、「ルール」「ポリシー」「関連付け」の 3 つの主要コンポーネントがあります。

大まかに言うと、「ルール」は、トラフィックを許可、拒否、または判断を任せるために次のレベルに委任するかどうかを宣言するための意思決定を構成します。「ポリシー」はルールのコレクションであり、1 つのポリシーに 1 つ以上のルールを関連付けることができます。「関連付け」は、Google Cloud のリソース階層におけるポリシーの適用ポイントを示します。

これらの概念については、プロダクト ページに詳しい説明があります。

ルール、ポリシー、関連付けを簡単な図にすると、以下のようになります。

https://storage.googleapis.com/gweb-cloudblog-publish/images/0201ja.max-1000x1000.png

Infrastructure as Code(Terraform)で階層型ファイアウォール ポリシーを実現

階層型ファイアウォール ポリシーを作成し適用するためには、3 つの Terraform リソースをつなぎ合わせる必要があります。  

#1 ポリシー Terraform リソース - google_compute_firewall_policy

このモジュールで最も重要なパラメータは、「parent」パラメータです。プロジェクトなどの階層型ファイアウォール ポリシーは、フォルダまたは組織リソースを親として持ちます。なお、このフォルダは、ポリシーが適用されたり関連付けられたりするフォルダではないことにご注意ください。このフォルダは作成したポリシーを所有するためだけのフォルダとなります。フォルダを使用して階層型ファイアウォール ポリシーを所有すると、これらのポリシーを作成または変更できるユーザーを管理する IAM も簡素化されます。IAM をこのフォルダに割り当てるだけだからです。

スケールされた環境では、すべての階層型ファイアウォール ポリシーをホストするために、別の「firewall-policy」フォルダを作成することをおすすめします。

サンプル

読み込んでいます...

以下のコマンドを使用して、「firewall-policy」フォルダのフォルダ ID を取得できます。

gcloud resource-manager folders list --organization=<your organization ID> --filter='<name of the folder>'

たとえば、ファイアウォール ポリシーのフォルダが「firewall-policy」である場合、次のようになります。

gcloud resource-manager folders list --organization=<your organization ID> --filter='firewall-policy' 

#2 ルール Terraform リソース - google_compute_firewall_policy_rule

このリソース定義のパラメータのほとんどは非常に明白ですが、特別な配慮が必要なパラメータがいくつかあります。

  • disabled - ファイアウォール ポリシー ルールが無効かどうかを示します。true に設定すると、ファイアウォール ポリシー ルールは適用されず、トラフィックはルールが存在しないかのように動作します。指定しない場合は、ファイアウォール ポリシー ルールが有効になります。

  • enable_logging - ファイアウォールのロギングを有効にすることは、将来多くの運用上のメリットをもたらすため、強く推奨されています。有効にするには、このパラメータに true を渡します。

  • target_resources - このパラメータは、特定の共有 VPC をこのルールのターゲットにする場合に便利です。共有 VPC の URI パスを渡す必要があります。VPC の URI を取得するには、以下のコマンドを使用します。

読み込んでいます...

サンプル

以下は、Terraform のサンプルコードの一部です。35.235.240.0/20 CIDR ブロックからの TCP ポート 22 のトラフィックを拒否する、優先度 9000 のファイアウォール ポリシー ルールを作成します(Identity-Aware Proxy に使用)。

読み込んでいます...

#3 関連付け Terraform リソース - google_compute_firewall_policy_association

attachment_target では、このポリシーを適用するフォルダ ID を渡します。つまり、このフォルダ下のすべてのプロジェクトにこのポリシーが適用されることになります。共有 VPC の場合、ターゲット フォルダはホスト プロジェクトの親フォルダである必要があります。

サンプル

読み込んでいます...

これらのポリシーが適用されると、コンソールの「VPC Network->Firewall」の下に、以下のように表示されます。

ファイアウォール ポリシーのフォルダには、作成した階層型ファイアウォール ポリシーが表示されます。各ポリシーにはデフォルトで 4 つのファイアウォール ルールがあるため、ポリシーで 1 つのルールを作成しても、下のパネルで示すようにルール数は 5 となる点に注意してください。

https://storage.googleapis.com/gweb-cloudblog-publish/images/10201ja.max-800x800.png

ポリシーに移動して、作成したルールとポリシーの関連付けを確認します(2 つのパネルに表示)。

https://storage.googleapis.com/gweb-cloudblog-publish/images/20201ja.max-900x900.png
https://storage.googleapis.com/gweb-cloudblog-publish/images/30201ja.max-800x800.png

まとめ

階層型ファイアウォール ポリシーは、Google Cloud 環境全体に一貫したトラフィック制御ポリシーを適用するための複雑なプロセスを簡素化します。この記事で紹介した Terraform モジュールと自動化により、セキュリティ管理者はポリシー エンジンと既知の Infrastructure as Code プラットフォームを使用してガードレールを構築できます。

階層型ファイアウォール ポリシーのドキュメントとその使い方をご確認ください。

- カスタマー エンジニア Kapil Gupta

投稿先