ファイアウォール ポリシー ルール ロギングを使用すると、ファイアウォール ルールの効果を監査、検証、分析できます。たとえば、トラフィックを拒否するように設計されたファイアウォール ルールが意図したとおりに機能しているかどうかを判別できます。ファイアウォール ルールロギングは、特定のファイアウォール ルールによって影響を受ける接続数を判別する必要がある場合にも役立ちます。
Virtual Private Cloud(VPC)ファイアウォール ルールのファイアウォール ポリシー ルールのロギングを有効または無効にする方法について説明します。ファイアウォール ポリシー ルールのロギングの手順については、階層型ファイアウォール ポリシーとルールの使用をご覧ください。
生成されたログを表示する方法についても説明します。記録される内容、ロギングの例、ログ形式の詳細については、ファイアウォール ポリシールール ロギングの概要をご覧ください。
ファイアウォール ルールのロギングを有効にすると、ファイアウォール インサイトからその分析情報と推奨事項を表示できます。詳細については、Network Intelligence Center のドキュメントのファイアウォール インサイトをご覧ください。
権限
ファイアウォール ルールの変更や、ログへのアクセスを行うには、IAM プリンシパルに次のいずれかのロールが割り当てられている必要があります。
| タスク | 必要なロール |
|---|---|
| ファイアウォール ルールの作成、削除、または更新 | プロジェクトのオーナーまたは編集者、あるいはセキュリティ管理者のロール(roles/compute.securityAdmin) |
| ログを表示 | プロジェクトのオーナー、編集者、閲覧者またはログ閲覧者ロール(roles/logging.viewer)
Logging IAM のロールと権限の詳細については、 Logging アクセス制御ガイドをご覧ください。 |
ファイアウォール ポリシー ルールのロギングを有効または無効にする
ファイアウォール ルールを作成するときに、そのファイアウォール ルールのロギングを有効にできます。詳細については、ファイアウォール ルールを作成するをご覧ください。
既存のファイアウォール ルールに対してファイアウォール ポリシー ルール ロギングを有効化または無効化する場合は、以下の手順に沿って行います。ロギングを有効にする際には、メタデータ フィールドを含めるかどうかを制御できます。省略すると、ストレージ費用の節約が可能です。
ファイアウォール ポリシー ルールのロギングを有効にする
コンソール
Google Cloud コンソールで、[ファイアウォール ポリシー] ページに移動します。
[ログ] 列で、各ファイアウォール ルールのファイアウォール ロギングがオンかオフかを確認します。
1 つ以上のファイアウォール ルールのロギングを有効にするには、更新するルールの横にあるチェックボックスをオンにします。
[VPC ファイアウォール ルール] アクションバーで [ログを構成] をクリックします。
[ログを構成] ダイアログで [オン] を選択します。
メタデータ フィールドを省略するには、[ログの詳細を表示する] を開いて [メタデータを含める] チェックボックスをオフにします。
[設定を保存] をクリックします。
gcloud
gcloud compute firewall-rules update RULE_NAME \
--enable-logging \
--logging-metadata=LOGGING_METADATA
次のように置き換えます。
RULE_NAME: ファイアウォール ルールの名前。LOGGING_METADATA: ファイアウォール ポリシールール ロギングについて、ファイアウォール ルールのログにメタデータ フィールドを含めるかどうかを指定します。このフィールドは、ロギングが有効になっている場合にのみ構成できます。値はexclude-allまたはinclude-allにする必要があります。デフォルトでは、メタデータ フィールドが含まれます。
詳細については、SDK リファレンス ドキュメントをご覧ください。
Terraform
Terraform リソースを使用して、ロギングを有効にしたファイアウォール ルールを作成できます。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
API
既存のファイアウォール ルールに対してファイアウォール ポリシー ルールのロギングを有効にします。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
{
"name": "RULE_NAME",
"logConfig": {
"enable": true,
"metadata": "LOGGING_METADATA"
}
}
プレースホルダを有効な値に置き換えます。
PROJECT_ID: ファイアウォール ルールが配置されているプロジェクトの ID。RULE_NAME: ファイアウォール ルールの名前。LOGGING_METADATA: ファイアウォール ポリシールール ロギングについて、ファイアウォール ルールのログにメタデータ フィールドを含めるかどうかを指定します。このフィールドは、ロギングが有効になっている場合にのみ構成できます。値はexclude-allまたはinclude-allにする必要があります。デフォルトでは、メタデータ フィールドが含まれます。
詳細については、firewalls.patch メソッドをご覧ください。
ファイアウォール ポリシー ルールのロギングを無効にする
コンソール
Google Cloud コンソールで、[ファイアウォール ポリシー] ページに移動します。
[ログ] 列で、各ファイアウォール ルールのファイアウォール ロギングがオンかオフかを確認します。
1 つ以上のファイアウォール ルールのロギングを無効にするには、更新する各ルールの横にあるチェックボックスをオンにします。
[VPC ファイアウォール ルール] アクションバーで [ログを構成] をクリックします。
[ログを構成] ダイアログで [オフ] を選択し、[構成を保存] をクリックします。
gcloud
gcloud compute firewall-rules update RULE_NAME \
--no-enable-logging
RULE_NAME の部分は、ファイアウォール ルールの名前に置き換えます。
API
既存のファイアウォール ルールに対してファイアウォール ポリシー ルールのロギングを無効にします。
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
{
"name": "RULE_NAME",
"logConfig": {
"enable": false
}
}
次のように置き換えます。
PROJECT_ID: ファイアウォール ルールが配置されているプロジェクトの ID。RULE_NAME: ファイアウォール ルールの名前。
詳細については、firewalls.patch メソッドをご覧ください。
ログを表示する
ファイアウォール ルールのログは、VM インスタンスとファイアウォール ルールが含まれるネットワークをホストしているプロジェクト内で作成されます。共有 VPC では、VM インスタンスはサービス プロジェクト内で作成されますが、これらのインスタンスはホスト プロジェクト内にある共有 VPC ネットワークを使用します。ファイアウォール ルールのログは、そのホスト プロジェクト内に保管されます。
ファイアウォール ルールのログを表示するには、 Google Cloud コンソールの [ログ エクスプローラ] セクションを使用します。
次のフィルタは、特定のファイアウォール イベントを検索する方法を示しています。
すべてのファイアウォール ログを表示する
ファイアウォール ログを表示するには、オプション 1 またはオプション 2 を実行します。
オプション 1
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[リソース] をクリックします。
[リソースの選択] リストで [サブネットワーク] をクリックし、[適用] をクリックします。
[ログ名] をクリックし、リストから [ファイアウォール] を選択します。
[適用] をクリックします。
オプション 2
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[クエリ] をクリックします。
[クエリ] ペインにクエリ エディタ フィールドが表示されない場合は、[クエリを表示] をクリックします。
[クエリ] ペインのクエリエディタ フィールドに次の文字列を貼り付けます。
PROJECT_IDは、実際のプロジェクト ID に置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall"
[クエリを実行] をクリックします。
特定のサブネットのログを表示する
特定のサブネットのファイアウォール ログを表示するには、オプション 1 またはオプション 2 を実行します。
オプション 1
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[リソース] をクリックします。
[リソースの選択] リストで、[サブネットワーク] をクリックします。
ログを表示するサブネットワークを選択し、[適用] をクリックします。
[ログ名] をクリックし、リストから [ファイアウォール] を選択します。
[適用] をクリックします。
オプション 2
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[クエリ] をクリックします。
[クエリ] ペインにクエリ エディタ フィールドが表示されない場合は、[クエリを表示] をクリックします。
[クエリ] ペインのクエリエディタ フィールドに次の文字列を貼り付けます。
PROJECT_IDをプロジェクト ID に、SUBNET_NAMEをサブネットワークに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" resource.labels.subnetwork_name="SUBNET_NAME"
[クエリを実行] をクリックします。
特定の VM のログを表示する
特定の VM のファイアウォール ログを表示するには、オプション 1 またはオプション 2 を実行します。
オプション 1
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[リソース] をクリックします。
[リソースの選択] リストで、[VM インスタンス] をクリックします。
ログを表示するインスタンスを選択し、[適用] をクリックします。
[ログ名] をクリックし、リストから [ファイアウォール] を選択します。
[適用] をクリックします。
オプション 2
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[クエリ] をクリックします。
[クエリ] ペインにクエリ エディタ フィールドが表示されない場合は、[クエリを表示] をクリックします。
[クエリ] ペインのクエリエディタ フィールドに次の文字列を貼り付けます。
PROJECT_IDはプロジェクト ID に、INSTANCE_IDはログを表示する VM の ID に置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" jsonPayload.instance.vm_name="INSTANCE_ID"
[クエリを実行] をクリックします。
特定の国からの接続のログを表示する
特定の国のファイアウォール ログを表示する手順は次のとおりです。
Google Cloud コンソールで、[ログ エクスプローラ] ページに移動します。
[クエリ] をクリックします。
[クエリ] ペインにクエリ エディタ フィールドが表示されない場合は、[クエリを表示] をクリックします。
[クエリ] ペインのクエリエディタ フィールドに次の文字列を貼り付けます。
PROJECT_IDは実際のプロジェクト ID に、COUNTRYは ISO 3166-1alpha-3 コードに置き換えます。resource.type="gce_subnetwork" logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Ffirewall" jsonPayload.remote_location.country=COUNTRY
ログをエクスポートする
ファイアウォール ルールのログをエクスポートするには、シンクの構成と管理をご覧ください。
クエリの例を使用して、エクスポートするログを絞り込むことができます。
相互作用の表
- VM 間通信の場合、それぞれに適用されているファイアウォール ルールによっては、両方の VM がログレコードを生成することもあります。
- 最初のパケットがファイアウォールで許可された場合、ログに記録される接続には双方向に流れるパケットが含まれます。
- 特定の VM への受信接続は、その VM 上に構成されているファイアウォール ルールと照合されます。また、特定の VM からの発信接続は、その VM 上に構成されている下りファイアウォール ルールと照合されます。
- 「許可してログに記録」するように指定しているファイアウォール ルールに一致して許可された接続は、一度だけログに記録されます。接続が維持されたとしても、ログエントリが 5 秒ごとに繰り返し記録されることはありません。
- 「拒否してログに記録」するように指定しているファイアウォール ルールに一致して拒否された接続は、その拒否対象の接続でパケットが観測される限り、5 秒ごとに繰り返しログに記録されます。
- すでにアクティブな TCP 接続または UDP 接続に一致するファイアウォール ルールでロギングを有効にしても、新しいログエントリは生成されません。ログエントリが作成されるのは、接続が 10 分以上アイドル状態のままで、同じ接続で新しいパケットが送信された場合のみです。アイドル期間が 10 分未満の継続的なトラフィックの場合、接続に対して 1 つのログエントリのみが生成されます。
この表は、単一の VM の観点からのファイアウォールのロギング動作を示しています。
VM1 の上り(内向き)ルール R1 がパケットを照合し、下り(外向き)ルール R2 でもパケットを照合するというシナリオでは、ファイアウォールのロギング動作は次のようになります。
| VM1 の上り(内向き)ルール R1(パケットを照合) | VM1 の下り(外向き)ルール R2(パケットを照合) | 接続方向 | アクション | ログ |
|---|---|---|---|---|
| 許可してログに記録 | 許可 | 上り(内向き) | 許可 | 1 つのログエントリ: disposition=allow, rule=R1 |
| 拒否 | ||||
| 許可してログに記録 | ||||
| 拒否してログに記録 | ||||
| 許可 | 許可 | 上り(内向き) | 許可 | ロギングなし |
| 拒否 | ||||
| 許可してログに記録 | ||||
| 拒否してログに記録 | ||||
| 拒否してログに記録 | 該当なし | 上り(内向き) | 拒否 | 5 秒ごとに 1 つのログエントリ: disposition=deny, rule=R1 |
| 拒否 | 該当なし | 上り(内向き) | 拒否 | ロギングなし |
| 許可 | 許可してログに記録 | 下り | 許可 | 1 つのログエントリ: disposition=allow, rule=R2 |
| 拒否 | ||||
| 許可してログに記録 | ||||
| 拒否してログに記録 | ||||
| 許可 | 許可 | 下り | 許可 | ロギングなし |
| 拒否 | ||||
| 許可してログに記録 | ||||
| 拒否してログに記録 | ||||
| 該当なし | 拒否してログに記録 | 下り | 拒否 | 5 秒ごとに 1 つのログエントリ: disposition=deny, rule=R2 |
| 該当なし | 拒否 | 下り | 拒否 | ロギングなし |
上りと下りは対称であるので注意してください。
以下に、ファイアウォール ログのセマンティクスについて詳しく説明します。
許可してログに記録(ロギングは TCP と UDP でサポートされています)
- ルールが適用される方向で接続が開始されると、1 つのログレコードが作成されます。
- 接続トラッキングにより、応答トラフィックは許可されます。該当する方向に適用されるファイアウォール ルールに関係なく、応答トラフィックによってロギングが行われることはありません。
- ファイアウォールにより接続が失効すると(10 分間にわたり非アクティブであるか、TCP RST を受信した場合)、いずれかの方向での別のパケットによってロギングがトリガーされる場合があります。
- ロギングは 5 タプルに基づきます。TCP フラグはロギング動作に影響を与えません。
拒否してログに記録(ロギングは TCP と UDP でサポートされます)
- パケットはドロップされます(接続は開始されません)。
- 一意の 5 タプルに対応する各パケットが、失敗した接続試行としてログに記録されます。
- 引き続きパケットを受信する場合、同じ 5 タプルが 5 分ごとに繰り返しログに記録されます。