VPC ファイアウォール ルールの概要

Virtual Private Cloud(VPC)ファイアウォール ルールは、特定のプロジェクトとネットワークに適用されます。ファイアウォール ルールを組織全体に適用する場合は、ファイアウォール ポリシーをご覧ください。このページの残りの部分では VPC ファイアウォール ルールについてのみ説明します。

VPC ファイアウォール ルールを使用すると、指定した構成に基づいて、仮想マシン(VM)インスタンスとの接続を許可または拒否できます。有効になっている VPC ファイアウォール ルールは常に適用され、構成やオペレーティング システムに関係なくインスタンスを保護します。起動していないインスタンスも保護されます。

すべての VPC ネットワークは、分散ファイアウォールとして機能します。ファイアウォール ルールはネットワーク レベルで定義されますが、接続はインスタンスごとに許可または拒否されます。VPC ファイアウォール ルールはインスタンスと他のネットワークの間だけでなく、同じネットワーク内の個々のインスタンスの間にも存在します。

ファイアウォールの詳細については、ファイアウォール(コンピューティング)をご覧ください。

Google Cloud のファイアウォール ルール

VPC ファイアウォール ルールを作成する場合は、VPC ネットワークと、ルールの動作を定義する一連のコンポーネントを指定します。コンポーネントを使用することで、トラフィックのプロトコル、ポート、送信元、宛先に基づいて、特定の種類のトラフィックをターゲットにできます。詳細については、ファイアウォール ルールのコンポーネントをご覧ください。

VPC ファイアウォール ルールを作成または変更するには、Google Cloud Consolegcloud コマンドライン ツールREST API を使用します。ファイアウォール ルールを作成または変更するときに、ルールのターゲット コンポーネントを使用して、ルールを適用するインスタンスを指定できます。

Google Cloud には、ユーザーが作成するファイアウォール ルールのほかに、受信(内向き)トラフィックと送信(外向き)接続に影響を与える可能性のあるルールが用意されています。

  • Google Cloud では、VPC ネットワーク内の TCP ポート 25 への下り(外向き)トラフィックなど、特定の IP プロトコルは許可されません。詳細については、常にブロックされるトラフィックをご覧ください。

  • Google Cloud では、VM インスタンスとそれに対応するメタデータ サーバー(169.254.169.254)との間の通信が常に許可されます。詳細については、常に許可されるトラフィックをご覧ください。

  • すべてのネットワークには、送信接続を許可し、受信接続をブロックする 2 つの暗黙のファイアウォール ルールがあります。作成したファイアウォール ルールによってこれらの暗黙のルールをオーバーライドできます。

  • デフォルト ネットワークには、削除や変更が可能なファイアウォール ルールが事前に設定されています。

仕様

VPC ファイアウォール ルールには、以下の特性があります。

  • ファイアウォール ルールは、双方向ではなく、受信(内向き)接続または送信(外向き)接続に適用されます。詳細については、接続の方向をご覧ください。

  • ファイアウォール ルールでは IPv4 接続のみがサポートされます。上り(内向き)ルールの送信元または下り(外向き)ルールの宛先をアドレスで指定するときは、CIDR 表記での IPv4 アドレスまたは IPv4 ブロックのみを使用できます。

  • ファイアウォール ルールの動作は allow または deny です。ルールは、適用されている限り、接続に適用されます。たとえば、トラブルシューティングの目的でルールを無効にできます。

  • ファイアウォール ルールを作成するときに、VPC ネットワークを選択する必要があります。ルールはインスタンス レベルで適用されますが、その構成は VPC ネットワークに関連付けられています。VPC ネットワーク ピアリングCloud VPN トンネルで接続されているネットワークなど、VPC ネットワーク間でファイアウォール ルールを共有することはできません。

  • VPC ファイアウォール ルールはステートフルです。

    • ファイアウォールでいずれかの方向の接続が許可されると、この接続に一致する戻りのトラフィックも許可されます。関連するレスポンス トラフィックを拒否するようにファイアウォール ルールを構成することはできません。
    • 戻りトラフィックは、承認されたリクエスト トラフィックの 5 タプル(送信元 IP、宛先 IP、送信元ポート、宛先ポート、プロトコル)と一致する必要がありますが、送信元アドレスと宛先アドレス、ポートが逆になっている必要があります。
    • Google Cloud は、接続トラッキング テーブルを使用して、受信パケットとそれに対応する送信パケットを関連付けます。
    • プロトコルが接続をサポートしているかどうかにかかわらず、Google Cloud は接続トラッキングを実装します。接続が送信元とターゲットの間で許可されている場合(内向きルール)またはターゲットと宛先の間で許可されている場合(外向きルール)、接続トラッキング テーブルの状態がアクティブである限り、すべてのレスポンス トラフィックが許可されます。10 分ごとに 1 つ以上のパケットが送信された場合、ファイアウォール ルールのトラッキング状態はアクティブになります。
    • 許可された TCP / UDP 接続に応じて、「ICMP TYPE 3, DESTINATION UNREACHABLE」などの ICMP レスポンス トラフィックが許可されます。この動作は RFC 792 と一致しています。
  • VPC ファイアウォール ルールでは、断片化された TCP パケットは再構成されません。したがって、TCP プロトコルに適用されるファイアウォール ルールは、最初のフラグメントにのみ適用されます(TCP ヘッダーが含まれているため)。TCP プロトコルに適用されるファイアウォール ルールは、以降の TCP フラグメントには適用されません。

  • ファイアウォール ルールテーブルのトラッキングされる接続の最大数は、インスタンスのマシンタイプによってサポートされるステートフル接続の数によって異なります。

    インスタンスのマシンタイプ ステートフル接続の最大数
    共有コア マシンタイプ 130,000
    vCPU が 1~8 個のインスタンス vCPU あたり 130,000 接続
    vCPU が 8 個を超えるインスタンス 合計 1,040,000(130,000×8)接続

暗黙のルール

すべての VPC ネットワークには、2 つの暗黙のファイアウォール ルールがあります。これらのルールは存在していますが、Cloud Console には表示されません。

  • 暗黙の下り(外向き)許可ルール。アクションが allow、宛先が 0.0.0.0/0、優先度が可能な限り低い(65535)下り(外向き)ルールでは、Google Cloud によってブロックされたトラフィックを除き、すべてのインスタンスが任意の宛先にトラフィックを送信できます。優先度の高いファイアウォール ルールにより、送信アクセスが制限される場合があります。他のファイアウォール ルールによって送信トラフィックが拒否されない場合、またインスタンスが外部 IP アドレスを持っているか、NAT インスタンスを使用している場合、インターネット アクセスが許可されます。詳細については、インターネット アクセスの要件をご覧ください。

  • 暗黙の上り(内向き)拒否ルール。アクションが deny、送信元が 0.0.0.0/0、優先度が可能な限り低い(65535)上り(内向き)ルールでは、受信接続をブロックすることによって、すべてのインスタンスが保護されます。優先度の高いルールにより、受信アクセスが許可される場合があります。デフォルト ネットワークには、このルールをオーバーライドする追加ルールがいくつか含まれており、特定のタイプの受信接続が許可されます。

暗黙のルールは削除できませんが、優先度は可能な限り低くなっています。作成したルールの優先度が高い場合(優先度の数値が 65535 未満)、作成したルールによってこれらをオーバーライドできます。deny ルールは同じ優先度の allow ルールより常に優先されるため、優先度 65535 の上り(内向き)allow ルールが有効になることはありません。

デフォルト ネットワークの事前設定ルール

デフォルト ネットワークには、インスタンスへの受信接続を許可するファイアウォール ルールが事前に設定されています。これらのルールは、必要に応じて削除または変更できます。

  • default-allow-internal
    ネットワーク内のインスタンス間で、すべてのプロトコルおよびポートの上り(内向き)接続を許可します。このルールの優先度は 2 番目に低い 65534 で、同じネットワーク内の他の VM インスタンスから VM インスタンスへの受信接続を実質的に許可します。
  • default-allow-ssh
    任意の送信元からネットワーク内の任意のインスタンスへの TCP ポート 22 での上り(内向き)接続を許可します。このルールの優先度は 65534 です。
  • default-allow-rdp
    任意の送信元からネットワーク内の任意のインスタンスへの TCP ポート 3389 での上り(内向き)接続を許可します。このルールの優先度は 65534 で、Microsoft リモート デスクトップ プロトコル(RDP)を実行しているインスタンスへの接続を有効にします。
  • default-allow-icmp
    任意の送信元からネットワーク内の任意のインスタンスへの ICMP 上り(内向き)トラフィックを許可します。このルールの優先度は 65534 で、ping などのツールを有効にします。

常にブロックされるトラフィック

Google Cloud は、次の表にあるトラフィックを常にブロックします。ファイアウォール ルールを使用して、このトラフィックを許可することはできません。

常にブロックされるトラフィック 適用先
特定の GRE トラフィック(ベータ版) • Cloud VPN トンネルのトラフィック
• Cloud Interconnect アタッチメント(VLAN)のトラフィック
• 転送ルール(負荷分散またはプロトコル転送)のトラフィック

GRE は、VPC ネットワーク内で許可されます。
Google Cloud リソースの外部 IP アドレスに対する TCP、UDP、ICMP、AH、ESP、SCTP、GRE 以外のプロトコル リソースのタイプによってプロトコルはさらに制限されます。たとえば、ネットワーク TCP / UDP 負荷分散は TCP と UDP のみをサポートします。また、プロトコル転送の転送ルールでは、単一のプロトコルのみを処理します。サポートされているプロトコルの一覧については、プロトコル転送のドキュメントをご覧ください。
TCP 宛先ポート 25 への下り(外向き)トラフィック(SMTP) 次のトラフィック:
• インスタンスからインターネット上の外部 IP アドレスへのトラフィック
• インスタンスからインスタンスの外部 IP アドレスへのトラフィック

常に許可されるトラフィック

Google Cloud では、各インスタンスと一緒に 169.254.169.254 でローカル メタデータ サーバーを実行しています。このサーバーはインスタンスのオペレーションに不可欠で、構成したファイアウォール ルールに関係なく、インスタンスはこのサーバーにアクセスできます。メタデータ サーバーは、次の基本サービスをインスタンスに提供します。

ファイアウォール ルールのコンポーネント

各ファイアウォール ルールは、次の構成コンポーネントで構成されています。

  • 接続の方向: 上り(内向き)ルールは、指定された送信元から Google Cloud ターゲットへの受信接続に適用されます。下り(外向き)ルールは、ターゲットから指定の宛先への接続に適用されます。

  • 数値での優先度。ルールが適用されるかどうかの決定に使用されます。他のコンポーネントがトラフィックと一致する、優先度が最も高い(優先度の数値が最小)ルールのみが適用されます。優先度の低い、競合するルールは無視されます。

  • 一致したときのアクションallow または deny)。ルールによって接続が許可されるかブロックされるかを決定します。

  • ファイアウォール ルールの適用ステータス。ファイアウォール ルールを削除せずに有効または無効にできます。

  • ターゲット。ルールを適用するインスタンス(GKE クラスタ、App Engine フレキシブル環境インスタンスなど)を定義します。

  • 上り(内向き)ルールの送信元または下り(外向き)ルールの宛先

  • プロトコル(TCP、UDP、ICMP など)とポート

コンポーネントの概要

上り(受信)ルール
優先度 アクション 適用 ターゲット(宛先を定義) 送信元 プロトコルとポート
0 から 65535 までの整数。デフォルトは 1000 です。
allow または deny enabled(デフォルト)または disabled target パラメータには宛先を指定します。次のいずれかになります。 次のいずれかです。
  • IPv4 アドレスの範囲。デフォルトは任意(0.0.0.0/0
  • ネットワーク タグによるインスタンス
  • サービス アカウントによるインスタンス
プロトコルを指定するか、プロトコルとポートを指定します。

設定しない場合、すべてのプロトコルにルールが適用されます。
下り(外向き)ルール
優先度 アクション 適用 ターゲット(送信元を定義) 宛先 プロトコルとポート
0 から 65535 までの整数。デフォルトは 1000 です。
allow または deny enabled(デフォルト)または disabled target パラメータには送信元を指定します。次のいずれかになります。
  • VPC ネットワーク内のすべてのインスタンス
  • ネットワーク タグによるインスタンス
  • サービス アカウントによるインスタンス
任意のネットワークまたは IPv4 アドレスの特定の範囲。デフォルトは任意(0.0.0.0/0)です。 プロトコルを指定するか、プロトコルとポートを指定します。

設定しない場合、すべてのプロトコルにルールが適用されます。

トラフィックの方向

ファイアウォール ルールの方向は、上り(内向き)と下り(外向き)のいずれかです。方向は常にターゲットの視点から定義されます。

  • 上り(内向き)方向は、送信元からターゲットに送信される接続を表します。上り(内向き)ルールは、パケットの宛先がターゲットである、新しいセッションに適用されます。

  • 下り(外向き)方向は、ターゲットから宛先に送信されるトラフィックを表します。下り(外向き)ルールは、パケットの送信元がターゲットである、新しいセッションのパケットに適用されます。

  • 方向を指定しない場合、Google Cloud は上り(内向き)を使用します。

同じネットワーク内の 2 つの VM 間の接続例を考えてみましょう。VM1 から VM2 へのトラフィックは、次のいずれかのファイアウォール ルールを使用して制御できます。

  • ターゲットが VM2、送信元が VM1 の上り(内向き)ルール。

  • ターゲットが VM1、宛先が VM2 の下り(外向き)ルール。

優先度

ファイアウォール ルールの優先度は、0 から 65535 までの整数です。小さい整数が高い優先度を示します。ルールの作成時に優先度を指定しない場合、優先度 1000 が割り当てられます。

ファイアウォール ルールの相対的な優先度によって、他のルールに対して評価されたときに、適用されるかどうかが決まります。評価ロジックは次のように機能します。

  • 特定のタイプのトラフィックで、ターゲットに適用可能な優先度が最も高いルールが優先されます。ターゲットの特性は関係ありません。たとえば、すべてのターゲット向けの、特定のポートとプロトコルで優先度の高い上り(内向き)ルールにより、特定のターゲット向けの、同じポートとプロトコルに対して同様に定義されたルールはオーバーライドされます。

  • プロトコルとポートの定義がより一般的であっても、特定のプロトコルとポートの定義に適用可能な、優先度が最も高いルールが優先されます。たとえば、特定のターゲット向けの、すべてのポートとプロトコルでトラフィックを許可する優先度の高い上り(内向き)ルールにより、同じターゲット向けの、TCP 22 を拒否する優先度の低い上り(内向き)ルールはオーバーライドされます。

  • deny アクションのルールが別の allow アクションのルールをオーバーライドするのは、2 つのルールの優先度が同じ場合に限られます。相対的な優先度を使用すると、deny ルールをオーバーライドする allow ルールや、allow ルールをオーバーライドする deny ルールを作成できます。

  • 同じ優先順位と同じアクションを持つルールは同じ結果になります。ただし、評価中に使用されるルールは不確定です。通常、ファイアウォール ルールのロギングを有効にしている場合を除き、どのルールが使用されても問題はありません。一定の明確な順序でファイアウォール ルールが評価されていることをログで確認できるようにするには、これらのルールに一意の優先順位を割り当てます。

2 つのファイアウォール ルールが存在する次の例について考えてみましょう。

  • すべてのターゲット、すべてのプロトコル、すべてのポートに適用可能な、送信元が 0.0.0.0/0(任意の場所)の上り(内向き)ルール。アクションは deny で、優先度は 1000 です。

  • TCP 80 のトラフィックで、タグ webserver を持つ特定のターゲットに適用可能な、送信元が 0.0.0.0/0(任意の場所)の上り(内向き)ルール。アクションは allow です。

2 番目のルールの優先度によって、ポート 80 での TCP トラフィックが webserver ターゲットに対して許可されるかどうかが決まります。

  • 2 番目のルールの優先度が 1000 よりも大きい数値に設定された場合、優先度が低いため、すべてのトラフィックを拒否する最初のルールが適用されます。

  • 2 番目のルールの優先度が 1000 に設定されている場合、2 つのルールは同じ優先度になるため、すべてのトラフィックを拒否する最初のルールが適用されます。

  • 2 番目のルールの優先度が 1000 よりも小さい数値に設定された場合、優先度が高いため、webserver ターゲットに対する TCP 80 でのトラフィックが許可されます。他のルールがない場合、最初のルールによって webserver ターゲットへの他のタイプのトラフィックは引き続き拒否され、TCP 80 を含め、webserver タグがないインスタンスへのトラフィックもすべて拒否されます。

上記の例は、優先度を使用して個別の allow ルールとグローバルな deny ルールを作成し、最小権限のセキュリティに関するベスト プラクティスの実装方法を示しています。

一致したときのアクション

ファイアウォール ルールのアクション コンポーネントでは、ルールの他のコンポーネントに従って、トラフィックを許可するかブロックするかが決定されます。

  • allow アクションは、他の指定されたコンポーネントと一致する接続を許可します。

  • deny アクションは、他の指定されたコンポーネントと一致する接続をブロックします。

適用

ルールの状態を enabled または disabled に設定することで、ファイアウォール ルールを適用するかどうかを変更できます。ルールの無効化は、トラブルシューティングする場合やインスタンスへの一時的なアクセス権を付与する場合に便利です。ルールを無効化し、テストしてから再度有効化するほうが、ルールを削除して再度作成するよりはるかに簡単です。

特に指定しない限り、すべてのファイアウォール ルールは作成時に enabled になります。また、disabled 状態のルールを作成することもできます。

ルールを更新することで、ファイアウォール ルールの適用状態を enabled から disabled に戻すことができます。

以下のような状況ではファイアウォール ルールの無効化を検討してください。

  • トラブルシューティング: ファイアウォール ルールがトラフィックをブロックしているか許可しているかが不明な場合、ルールを一時的に無効にして、トラフィックが許可されているかブロックされているかを判断します。これは、あるルールを他のルールと組み合わせた場合の影響をトラブルシューティングする場合に便利です。
  • メンテナンス: ファイアウォール ルールを無効化することで、定期的なメンテナンスが簡単になります。たとえば、ターゲット(ターゲットタグによるインスタンスなど)に対する受信 SSH をブロックするファイアウォール ルールがあり、そのルールが enabled であるとします。メンテナンスが必要なとき、このルールを無効にできます。メンテナンスが終了したら、ルールを再び有効にします。

ターゲット

上り(受信)ルールの場合、target パラメータは GKE クラスタや App Engine フレキシブル環境インスタンスなどの宛先 VM インスタンスを指定します。下り(送信)ルールの場合、target には送信元のインスタンスを指定します。したがって target パラメータは常に Google Cloud インスタンスの指定に使用されますが、ターゲットがトラフィックの宛先なのか送信元なのかはルールの方向によって異なります。

ターゲットを指定するには、次のいずれかのオプションを使用します。

  • ネットワーク上のすべてのインスタンス。ファイアウォール ルールは、ネットワーク内のすべてのインスタンスに適用されます。

  • ターゲットタグによるインスタンス: ファイアウォール ルールは、一致するネットワーク タグを持つインスタンスにのみ適用されます。

  • ターゲット サービス アカウントによるインスタンス。ファイアウォール ルールは、特定のサービス アカウントを使用するインスタンスにのみ適用されます。ファイアウォール ルールごとに適用可能なターゲット サービス アカウントの最大数については、VPC リソース割り当てをご覧ください。

ターゲットタグとターゲット サービス アカウントの利点と制限については、サービス アカウントとネットワーク タグによるフィルタリングをご覧ください。

ターゲットと IP アドレス

上り(内向き)ファイアウォール ルールのターゲットは、ターゲットの指定方法に関係なく、VPC ネットワーク内のインスタンスのネットワーク インターフェース(NIC)に到着したすべてのトラフィックに適用されます。上り(内向き)ファイアウォール ルールは、宛先が次のいずれかの IP アドレスに一致するパケットに適用されます。

  • VPC ネットワークに存在するインスタンスのネットワーク インターフェースに割り当てられているプライマリ内部 IP アドレス。

  • VPC ネットワークに存在するインスタンスのネットワーク インターフェースに構成されているエイリアス IP 範囲

  • VPC ネットワークに存在するインスタンスのネットワーク インターフェースに関連付けられている外部 IP アドレス。

  • インスタンスがロードバランサのバックエンドまたはプロトコル転送のターゲット インスタンスである場合、負荷分散またはプロトコル転送用の転送ルールに関連付けられた内部 IP アドレスまたは外部 IP アドレス

下り(外向き)ファイアウォール ルールのターゲットは、ターゲットの指定方法に関係なく、VPC ネットワーク内の VM インスタンスのネットワーク インターフェースを離れるすべてのトラフィックに適用されます。

  • デフォルトでは、IP 転送は無効になっています。下り(外向き)ファイアウォール ルールは、送信元が次のいずれかに一致するパケットに適用されます。
    • インスタンスの NIC のプライマリ内部 IP アドレス
    • インスタンスの NIC に構成されたエイリアス IP 範囲
    • インスタンスがロードバランサのバックエンドまたはプロトコル転送のターゲット インスタンスである場合、負荷分散またはプロトコル転送用の転送ルールに関連付けられた内部 IP アドレスまたは外部 IP アドレス
  • IP 転送が有効になっている場合、VM はすべての送信元のパケット送信を許可されます。

送信元または宛先

作成するファイアウォールの方向に応じて、送信元または宛先のいずれか(両方ではありません)を指定します。

  • 上り(受信)ルールの場合、target パラメータにトラフィックの宛先インスタンスを指定します。destination パラメータは使用できません。送信元は、source パラメータを使用して指定します。

  • 下り(送信)ルールの場合、target パラメータにトラフィックの送信元インスタンスを指定します。source パラメータは使用できません。宛先は、destination パラメータを使用して指定します。

送信元

source パラメータを適用できるのは、上り(内向き)ルールのみです。以下のいずれかにする必要があります。

  • ソース IP 範囲: パケットの送信元として IP アドレスの範囲を指定できます。範囲には、VPC ネットワークの内部と外部のアドレスを含めることができます。Google Cloud の内部と外部の送信元を定義する際に、ソース IP 範囲を使用できます。

  • ソースタグ: 同じ VPC ネットワーク内にある VM インスタンスのネットワーク インターフェースのプライマリ内部 IP アドレスとしてパケットの送信元を定義すると、一致するネットワーク タグで送信元のインスタンスを識別できます。ソースタグは、VPC ネットワーク内で該当する別のインスタンスのネットワーク インターフェースから送信されたトラフィックにのみ適用されます。外部 IP アドレスがインスタンスに属している場合でも、ソースタグを使用して、送信元が外部 IP アドレスのパケットを制御することはできません。ファイアウォール ルールごとに適用できるソースタグの最大数については、VPC リソースの割り当てをご覧ください。

  • ソースサービス アカウント: 同じ VPC ネットワークにあるインスタンスのネットワーク インターフェースのプライマリ内部 IP アドレスとしてパケットの送信元を定義すると、使用するサービス アカウントで送信元のインスタンスを識別できます。ソースサービス アカウントは、VPC ネットワーク内で該当する別のインスタンスのネットワーク インターフェースから送信されたトラフィックにのみ適用されます。外部 IP アドレスがインスタンスに属している場合でも、ソースサービス アカウントを使用して、送信元が外部 IP アドレスのパケットを制御することはできません。ファイアウォール ルールごとに適用可能なソースサービス アカウントの最大数については、VPC リソース割り当てをご覧ください。

  • ソース IP 範囲とソースタグは組み合わせて使用できます。

  • ソース IP 範囲とソースサービス アカウントは組み合わせて使用できます。

  • ソース IP 範囲、ソースタグ、ソースサービス アカウントがすべて省略されている場合、Google Cloud は送信元を任意の IP アドレス(0.0.0.0/0)として定義します。

送信元と IP アドレス

次のいずれかの方法で送信元を指定すると、Google Cloud は送信元を VPC ネットワーク内の VM のネットワーク インターフェースのプライマリ内部 IP アドレスとだけみなします。

  • ソースタグ
  • ソース サービス アカウント
  • ソースタグまたはソース サービス アカウントのいずれかを含むソース仕様

ソースタグまたはソース サービス アカウントを使用する場合、その NIC のエイリアス IP 範囲と関連付けられた転送ルールの IP アドレスは含まれません。

VM のエイリアス IP 範囲を含める必要がある場合は、上り(内向き)ルールのソース範囲リストに追加します。ソース範囲とソースタグは併用できます。ソース範囲とソース サービス アカウントも併用できます

宛先

destination パラメータを適用できるのは、下り(外向き)ルールのみです。destination パラメータは、IP アドレス範囲のみ受け入れます。範囲には、VPC ネットワークの内部と外部のアドレスを含めることができます。

宛先範囲を指定しない場合、Google Cloud は宛先をすべての IP アドレス(0.0.0.0/0)になるように定義します。

プロトコルとポート

プロトコル、またはプロトコルとポートを指定すると、ファイアウォール ルールの範囲を狭めることができます。プロトコル、またはプロトコルとポートの組み合わせを指定できます。プロトコルとポートの両方を省略した場合、ファイアウォール ルールは、任意のプロトコルと任意のポートの、すべてのトラフィックに適用されます。

ファイアウォール ルールを具体的にするため、最初にプロトコルを指定する必要があります。プロトコルでポートがサポートされている場合、任意でポート番号またはポート範囲を指定できます。ただし、すべてのプロトコルでポートがサポートされているわけではありません。たとえば、ポートは TCP と UDP には存在しますが、ICMP には存在しません(ICMP にはさまざまな ICMP タイプがありますが、ポートではありません)。

プロトコルは、名前(tcpudpicmpespahsctpipip)または 10 進数の IP プロトコル番号を使用して指定できます。

Google Cloud ファイアウォール ルールはポート情報を使用して、パケットの宛先ポートを参照します(送信元ポートではありません)。

  • 上り(受信)ファイアウォール ルールの場合、宛先ポートは、ルールの target パラメータで識別されるシステム上のポートです(上りルールの場合、target パラメータはトラフィックのターゲット VM を指定します)。

  • 下り(送信)ファイアウォール ルールの場合、宛先ポートは、ルールの destination パラメータで識別されるシステム上のポートを表します。

次の表は、Google Cloud ファイアウォール ルールに対するプロトコルとポートの指定の、有効な組み合わせをまとめたものです。

仕様 説明
プロトコルもポートもなし プロトコルを指定しない場合、ファイアウォール ルールは、すべてのプロトコルと適用可能なポートに適用されます。
プロトコル tcp ポート情報を指定せずにプロトコルを指定した場合、ファイアウォール ルールは、そのプロトコルと適用可能なすべてのポートに適用されます。
プロトコルと単一のポート tcp:80 プロトコルと単一のポートを指定した場合、ファイアウォール ルールは、そのプロトコルのそのポートに適用されます。
プロトコルとポート範囲 tcp:20-22 プロトコルとポート範囲を指定した場合、ファイアウォール ルールは、そのプロトコルのポート範囲に適用されます。
組み合わせ icmp,tcp:80
tcp:443
udp:67-69
ファイアウォール ルールには、プロトコルとポートのさまざまな組み合わせを指定できます。詳細については、ファイアウォール ルールの作成をご覧ください。

サービス アカウントによる送信元とターゲットのフィルタリング

サービス アカウントを使用すると、より具体的なファイアウォール ルールを作成できます。

  • 上り(内向き)ルールと下り(外向き)ルールの両方で、サービス アカウントを使用してターゲットを指定できます。

  • 上り(内向き)ルールでは、VM が特定のサービス アカウントを使用しているネットワーク内の、任意の VM のプライマリ内部 IP アドレスとして、受信パケットの送信元を指定できます。

サービス アカウントに依存するファイアウォール ルールを作成する前に、ファイアウォール ルールと同じプロジェクトにサービス アカウントを作成する必要があります。別のプロジェクトのサービス アカウントを使用するルールを作成することもできますが、ファイアウォール ルールのプロジェクトにサービス アカウントが存在しないと、そのルールは適用されません。

インスタンスの識別にサービス アカウントを使用するファイアウォール ルールは、作成されてサービス アカウントに関連付けられた新しいインスタンスと、既存のインスタンス(サービス アカウントを変更した場合)の両方に適用されます。インスタンスに関連付けられたサービス アカウントを変更するには、インスタンスを停止して再起動する必要があります。サービス アカウントは、個々のインスタンスと、マネージド インスタンス グループで使用されるインスタンス テンプレートに関連付けることができます。

サービス アカウントによるフィルタリングとネットワーク タグによるフィルタリング

このセクションでは、ターゲットと送信元を定義するためにサービス アカウントとネットワーク タグのどちらを使用する必要があるかを判断する際に考慮すべき、重要なポイントを示します(上りルール用)。

ファイアウォール ルールを VM に適用する方法を厳密に制御する必要がある場合、ターゲットタグとソースタグではなく、ターゲット サービス アカウントとソースサービス アカウントを使用します。

  • ネットワーク タグは任意の属性です。編集権限のある Identity and Access Management(IAM)メンバーは、インスタンスを 1 つ以上のネットワーク タグを関連付けることができます。プロジェクトに対して Compute Engine インスタンス管理者のロールを持つ IAM メンバーが、この権限を持っています。インスタンスを編集できる IAM メンバーは、そのネットワーク タグを変更できます。これにより、そのインスタンスに適用可能な一連のファイアウォール ルールが変更される可能性があります。

  • サービス アカウントは、インスタンスに関連付けられた ID を表します。インスタンスに関連付けることができるサービス アカウントは 1 つのみです。他の IAM メンバーに対するサービス アカウント ユーザーのロールの付与を制御することで、サービス アカウントへのアクセスを制御します。IAM メンバーがサービス アカウントを使用してインスタンスを開始する場合、そのメンバーには少なくともそのサービス アカウントに対するサービス アカウント ユーザーのロールが必要です。また、インスタンスを作成するための権限(たとえば、プロジェクトに対する Compute Engine インスタンス管理者ロール)も必要です。

ファイアウォール ルールでは、サービス アカウントとネットワーク タグを混在させて一致させることはできません。

  • ターゲット サービス アカウントとターゲットタグは、ファイアウォール ルール(上りまたは下り)で一緒に使用できません。

  • ターゲット タグまたはターゲット サービス アカウントでターゲットを指定する場合、上り(内向き)ファイアウォール ルールのソースとして次のものは無効になります。

    ターゲット 無効な送信元
    ターゲットタグ ソースサービス アカウント

    ソース IP 範囲とソースサービス アカウントの組み合わせ
    ターゲット サービス アカウント ソースタグ

    ソース IP 範囲とソースタグの組み合わせ

サービス アカウントとネットワーク タグを使用する場合は、次のことに注意してください。

  • インスタンスのサービス アカウントを変更するには、そのインスタンスを停止して再起動する必要があります。タグの追加や削除は、インスタンスの実行中に行えます。

  • ファイアウォール ルールに指定できるターゲット サービス アカウント、ソースサービス アカウント、ターゲット ネットワーク タグ、ソース ネットワーク タグの数には上限があります。詳細については、VPC リソースの割り当てをご覧ください。

  • ネットワーク タグでインスタンスを識別する場合、ファイアウォール ルールはインスタンスのプライマリ内部 IP アドレスに適用されます。

  • サービス アカウントのファイアウォール ルールは GKE ノードに適用されます。GKE Pod には適用されません。

ユースケース

以下のユースケースでは、ファイアウォール ルールが機能する仕組みを示しています。これらの例では、すべてのファイアウォール ルールが有効になっています。

上り(内向き)の場合

上り(内向き)ファイアウォール ルールは、VPC ネットワーク内の送信元からターゲット インスタンスへの受信接続を制御します。上り(内向き)ルールの送信元は、次のいずれかとして定義できます。

  • IPv4 アドレスの範囲。デフォルトは任意(0.0.0.0/0
  • サービス アカウントで識別される VPC ネットワーク内の他のインスタンス
  • ネットワーク タグで識別される VPC ネットワーク内の他のインスタンス

デフォルトの送信元は任意の IP アドレス(0.0.0.0/0)です。インターネット上の他の送信元など、VPC ネットワーク外の送信元からの受信接続を制御する場合は、CIDR 形式の IPv4 アドレス範囲を使用します。

allow アクションを含む上り(内向き)ルールでは、ルールの他のコンポーネントに基づいて、受信トラフィックを許可します。ルールの送信元とターゲットを指定するだけでなく、特定のプロトコルとポートに適用されるようにルールを制限できます。同様に、deny アクションを含む上り(内向き)ルールを使用すると、ファイアウォール ルールのコンポーネントに基づいて受信トラフィックをブロックすることで、インスタンスを保護できます。

上り(内向き)の例

次の図に、ファイアウォールルールで上り(内向き)接続を制御している例を示します。この例では、ルールの割り当てで target パラメータを使用して、特定のインスタンスにルールを適用しています。

上り(内向き)ファイアウォール ルールの例(クリックして拡大)
上り(内向き)ファイアウォール ルールの例(クリックして拡大)
  • 優先度 1000 の上り(内向き)ルールが VM 1 に適用されます。このルールは、任意の送信元(0.0.0.0/0)からの受信 TCP トラフィックを許可します。VPC ネットワーク内の他のインスタンスからの TCP トラフィックは、そのインスタンスに適用される下り(外向き)ルールに応じて許可されます。VM 4 は、VM 1 と TCP で通信できます。これは VM 4 にはそのような通信をブロックする下り(外向き)ルールがないためです(暗黙の下り許可ルールのみが適用されます)。VM 1 には外部 IP があるため、このルールはインターネット上の外部ホストからの受信 TCP トラフィックも許可します。

  • VM 2 には上り(内向き)ファイアウォール ルールが指定されていないため、暗黙の上り(内向き)拒否ルールによってすべての受信トラフィックがブロックされます。ネットワーク内の他のインスタンスからの接続は、他のインスタンスの下り(外向き)ルールに関係なく、ブロックされます。VM 2 には外部 IP があるため、インターネット上の外部ホストから VM 2 へのパスが存在しますが、暗黙の上り(内向き)拒否ルールによって外部からの受信トラフィックもブロックされます。

  • 優先度 1000 の上り(内向き)ルールが VM 3 に適用されます。このルールでは、ネットワーク タグ client を持つネットワーク内のインスタンス(VM 4 など)からの TCP トラフィックが許可されます。VM 4 から VM 3 への TCP トラフィックは許可されます。VM 4 にはそのような通信をブロックする下り(外向き)ルールがないためです。暗黙の下り(外向き)許可ルールのみが適用されます。VM 3 には外部 IP がないため、インターネット上の外部ホストからのパスはありません。

下り(外向き)の場合

下り(外向き)ファイアウォール ルールは、VPC ネットワーク内のターゲット インスタンスからの送信接続を制御します。allow アクションを含む下り(外向き)ルールは、ルールの他のコンポーネントに基づいて、インスタンスからのトラフィックを許可します。たとえば、指定したプロトコルとポートでの特定の宛先(IPv4 アドレスの範囲など)への送信トラフィックを許可できます。同様に、deny アクションを含む下り(外向き)ルールでは、ルールの他のコンポーネントに基づいてトラフィックをブロックします。

すべての下り(外向き) ルールに宛先が必要です。デフォルトの宛先は任意の IP アドレス(0.0.0.0/0)ですが、CIDR 形式の IPv4 アドレスの範囲を使用して、特定の宛先を作成できます。IPv4 アドレスの範囲を指定すると、ネットワーク内のインスタンスや、インターネット上の宛先を含むネットワーク外の宛先へのトラフィックを制御できます。

下り(外向き)の例

次の図に、ファイアウォールルールで下り(外向き)接続を制御している例を示します。この例では、ルールの割り当てで target パラメータを使用して、特定のインスタンスにルールを適用しています。

下り(外向き)ファイアウォール ルールの例(クリックして拡大)
下り(外向き)ファイアウォール ルールの例(クリックして拡大)
  • VM 1 には指定された下り(外向き)ファイアウォール ルールがないため、暗黙の下り(外向き)許可ルールによって、任意の宛先にトラフィックを送信できます。VPC ネットワーク内の他のインスタンスへの接続は、そのインスタンスに適用される上り(内向き)ルールに応じて許可されます。VM 4 には任意の IP アドレス範囲からの受信トラフィックを許可する上り(内向き)ルールがあるため、VM 1VM 4 にトラフィックを送信できます。VM 1 には外部 IP アドレスがあるため、インターネット上の外部ホストにトラフィックを送信できます。ファイアウォール ルールはステートフルであるため、VM 1 によって送信されたトラフィックへの受信レスポンスは許可されます。

  • 優先度 1000 の下り(外向き)ルールが VM 2 に適用されます。このルールは、すべての宛先(0.0.0.0/0)へのすべての送信トラフィックを拒否します。VPC 内の他のインスタンスへの送信トラフィックは、そのインスタンスに適用される上り(内向き)ルールに関係なく、ブロックされます。VM 2 には外部 IP アドレスがありますが、このファイアウォール ルールは、インターネット上の外部ホストへの送信トラフィックをブロックします。

  • 優先度 1000 の下り(外向き)ルールが VM 3 に適用されます。このルールは、IP 範囲 192.168.1.0/24 内の任意の宛先への送信 TCP トラフィックをブロックします。VM 4 の上り(内向き)ルールはすべての受信トラフィックを許可しますが、VM 3 は TCP トラフィックを VM 4 に送信できません。ただし、この下り(外向き)ルールは TCP プロトコルにのみ適用されるため、VM 3VM 4 に UDP トラフィックを自由に送信できます。

    さらに VM 3 は、VPC ネットワーク内の IP 範囲 192.168.1.0/24 外の他のインスタンスにトラフィックを許可する上り(内向き)ルールがある限り、それらのインスタンスにそのようなトラフィックを送信できます。外部 IP アドレスがないため、VPC ネットワークの外部にトラフィックを送信するパスはありません。

次のステップ