このページでは、Virtual Private Cloud(VPC)ファイアウォール ルールの処理のためのコマンドについて説明し、それらの使用例を紹介します。VPC ファイアウォール ルールを使用すると、ポート番号、タグ、プロトコルに基づいて、VPC ネットワーク内の仮想マシン(VM)インスタンスとの間で送受信されるトラフィックを許可または拒否できます。
始める前に
暗黙のルールやデフォルト ネットワークのシステム生成ルールなど、VPC ファイアウォール ルールの詳細については、VPC ファイアウォール ルールをご覧ください。
ファイアウォール ルールを構成する前に、ファイアウォール ルールのコンポーネントを確認して、Google Cloud で使用されるファイアウォールのコンポーネントについて理解してください。
VPC ファイアウォール ルールを作成する
VPC ファイアウォール ルールはネットワーク レベルで定義され、ルールが作成されたネットワークにのみ適用されます。ただし、それぞれの名前はプロジェクトごとに一意である必要があります。
ファイアウォール ルールには IPv4 範囲または IPv6 範囲のいずれかを含めることができます。両方を含めることはできません。
ファイアウォール ルールを作成する際に、ファイアウォール ルールロギングを有効にするかどうかを選択できます。ロギングを有効にすると、ストレージ フィールドを節約するためにメタデータ フィールドを省略できます。詳細については、ファイアウォール ルール ロギングの使用をご覧ください。
ターゲットまたはソースのサービス アカウントのフィールドに複数のサービス アカウントを指定する場合は、Google Cloud CLI、API、またはクライアント ライブラリを使用します。
デフォルトのネットワークでは、作成時に自動ファイアウォール ルールが提供されます。カスタムモードと自動モードのネットワークでは、Google Cloud コンソールでネットワークを作成するときに、類似のファイアウォールを簡単に作成できます。gcloud CLI または API で、デフォルトのネットワークと類似のファイアウォール ルールを作成する場合は、一般的なユースケース向けのファイアウォール ルールを構成するをご覧ください。
コンソール
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ルールを作成] をクリックします。
ファイアウォール ルールの [名前] を入力します。
この名前は、プロジェクト内で一意にする必要があります。
(省略可)ファイアウォール ルール ロギングを有効にできます。
- [ログ] > [オン] をクリックします。
- メタデータを省略するには、[ログの詳細を表示] をクリックして [メタデータを含める] チェックボックスをオフにします。
ファイアウォール ルールの [ネットワーク] を指定します。
ルールの [優先度] を指定します。
数字が小さいほど、優先度が高くなります。
[トラフィックの方向] には、上り(内向き)と下り(外向き)のいずれかを選択します。
[一致したときのアクション] には、許可と拒否のいずれかを選択します。
ルールの [ターゲット] を指定します。
- ネットワーク内のすべてのインスタンスにルールを適用する場合は、[All instances in the network] を選択します。
- ネットワーク(ターゲット)のタグを使用して一部のインスタンスにルールを適用する場合は、[指定されたターゲットタグ] を選択し、[ターゲットタグ] フィールドでルールを適用するタグを入力します。
- 関連するサービス アカウントで一部のインスタンスにルールを適用する場合は、[指定されたサービス アカウント] を選択し、サービス アカウントが現在のプロジェクトにあるか、[サービス アカウントのスコープ] の別のプロジェクトにあるかを指定します。その後、[ターゲット サービス アカウント] フィールドでサービス アカウント名を選択または入力します。
上り(内向き)ルールの場合、送信元フィルタを指定します。
- 送信元 IPv4 の範囲で受信トラフィックをフィルタするには、[IPv4 範囲] を選択し、CIDR ブロックを [送信元 IPv4 範囲] フィールドに入力します。任意の IPv4 送信元の場合は、
0.0.0.0/0
を使用します。 - 送信元 IPv6 の範囲で受信トラフィックをフィルタするには、[IPv6 範囲] を選択し、CIDR ブロックを [送信元 IPv6 範囲] フィールドに入力します。任意の IPv6 送信元の場合は、
::/0
を使用します。 - 受信トラフィックをネットワーク タグでフィルタするには、[ソースタグ] を選択し、ネットワーク タグを [ソースタグ] フィールドに入力します。ソースタグ数の上限については、ネットワークごとの上限をご覧ください。ソースタグによるフィルタリングを使用できるのは、サービス アカウントによってターゲットが指定されていない場合に限られます。詳しくは、サービス アカウントによるフィルタリングとネットワーク タグによるフィルタリングをご覧ください。
- サービス アカウントを使用して受信トラフィックをフィルタするには、[サービス アカウント] を選択し、[サービス アカウントのスコープ] でサービス アカウントが現在のプロジェクトにあるか、別のプロジェクトにあるかを示します。その後、[ソースのサービス アカウント] フィールドでサービス アカウント名を選択するか入力します。ソースのサービス アカウントによるフィルタリングを使用できるのは、ネットワーク タグによってターゲットが指定されていない場合に限られます。詳しくは、サービス アカウントによるフィルタリングとネットワーク タグによるフィルタリングをご覧ください。
- 必要に応じて、[2 番目のソースフィルタ] を指定します。2 番目のソースフィルタで、メインのソースフィルタと同じフィルタ条件を使用することはできません。ソース IP の範囲は、ソースタグまたはソースサービス アカウントと組み合わせて使用できます。有効なソースセットは、ソース範囲の IP アドレスと、ネットワーク タグまたはサービス アカウントによって識別されるインスタンスを組み合わせたものです。つまり、ソース IP 範囲、またはソースタグ(またはソースサービス アカウント)のいずれかがフィルタ条件と一致する場合、そのソースは有効なソースセットに含まれています。
- [ソースタグ] と [ソースのサービス アカウント] は併用できません。
- 送信元 IPv4 の範囲で受信トラフィックをフィルタするには、[IPv4 範囲] を選択し、CIDR ブロックを [送信元 IPv4 範囲] フィールドに入力します。任意の IPv4 送信元の場合は、
上り(内向き)ルールの場合は、送信先フィルタを指定します。
- 受信トラフィックを送信先 IPv4 範囲でフィルタするには、[IPv4 範囲] を選択し、[送信先 IPv4 範囲] フィールドに CIDR ブロックを入力します。任意の IPv4 送信先の場合は、
0.0.0.0/0
を使用します。 - 受信トラフィックを送信先 IPv6 範囲でフィルタするには、[IPv6 範囲] を選択し、[送信先 IPv6 範囲] フィールドに CIDR ブロックを入力します。任意の IPv6 送信先の場合は、
::/0
を使用します。詳細については、上り(内向き)ルールの送信先をご覧ください。
- 受信トラフィックを送信先 IPv4 範囲でフィルタするには、[IPv4 範囲] を選択し、[送信先 IPv4 範囲] フィールドに CIDR ブロックを入力します。任意の IPv4 送信先の場合は、
下り(外向き)ルールの場合は、送信先フィルタを指定します。
- 送信トラフィックを送信先 IPv4 範囲でフィルタするには、[IPv4 範囲] を選択し、[送信先 IPv4 範囲] フィールドに CIDR ブロックを入力します。任意の IPv4 送信先の場合は、
0.0.0.0/0
を使用します。 - 送信トラフィックを送信先 IPv6 範囲でフィルタするには、[IPv6 範囲] を選択し、[送信先 IPv6 範囲] フィールドに CIDR ブロックを入力します。任意の IPv6 送信先の場合は、
::/0
を使用します。
- 送信トラフィックを送信先 IPv4 範囲でフィルタするには、[IPv4 範囲] を選択し、[送信先 IPv4 範囲] フィールドに CIDR ブロックを入力します。任意の IPv4 送信先の場合は、
下り(外向き)ルールの場合、送信元フィルタを指定します。
- 送信元 IPv4 の範囲で送信トラフィックをフィルタするには、[IPv4 範囲] を選択し、CIDR ブロックを [送信元 IPv4 範囲] フィールドに入力します。任意の IPv4 送信元の場合は、
0.0.0.0/0
を使用します。 - 送信元 IPv6 の範囲で送信トラフィックをフィルタするには、[IPv6 範囲] を選択し、CIDR ブロックを [送信元 IPv6 範囲] フィールドに入力します。任意の IPv6 送信先の場合は、
::/0
を使用します。詳細については、下り(外向き)ルールの送信元をご覧ください。
- 送信元 IPv4 の範囲で送信トラフィックをフィルタするには、[IPv4 範囲] を選択し、CIDR ブロックを [送信元 IPv4 範囲] フィールドに入力します。任意の IPv4 送信元の場合は、
ルールを適用するプロトコルとポートを定義します。
- すべてのプロトコルと宛先ポートにルールを適用する場合は、アクションに応じて [すべて許可] または [すべて拒否] を選択します。
特定のプロトコルと宛先ポートを定義するには、[指定したプロトコルとポート] を選択します。
- TCP のプロトコルと宛先ポートを指定する場合は [TCP] を選択します。「
all
」と入力するか、20-22, 80, 8080
などの宛先ポートのカンマ区切りのリストを入力します。 - UDP のプロトコルと宛先ポートを指定するには [UDP] を選択します。「
all
」と入力するか、67-69, 123
などの宛先ポートのカンマ区切りのリストを入力します。 icmp
やsctp
などのプロトコル、またはプロトコル番号を含めるには [その他] を選択します。たとえば、IPv4 ICMP にはicmp
またはプロトコル番号1
を使用します。IPv6 ICMP にはプロトコル番号58
を使用します。詳細については、プロトコルと宛先ポートをご覧ください。
- TCP のプロトコルと宛先ポートを指定する場合は [TCP] を選択します。「
(省略可)ファイアウォール ルールを作成しても、その適用状態を無効に設定すれば、ルールは適用されません。[ルールを無効にする] をクリックし、[無効] を選択します。
[作成] をクリックします。
gcloud
VPC ファイアウォール ルールを作成するには、gcloud compute firewall-rules create
コマンドを使用します。
gcloud compute firewall-rules create RULE_NAME \ [--network NETWORK; default="default"] \ [--priority PRIORITY;default=1000] \ [--direction (ingress|egress|in|out); default="ingress"] \ [--action (deny | allow )] \ [--target-tags TAG[,TAG,...]] \ [--target-service-accounts=IAM_SERVICE_ACCOUNT[,IAM_SERVICE_ACCOUNT,...]] \ [--source-ranges CIDR_RANGE[,CIDR_RANGE,...]] \ [--source-tags TAG,TAG,] \ [--source-service-accounts=IAM_SERVICE_ACCOUNT[,IAM_SERVICE_ACCOUNT,...]] \ [--destination-ranges CIDR_RANGE[,CIDR_RANGE,...]] \ [--rules (PROTOCOL[:PORT[-PORT]],[PROTOCOL[:PORT[-PORT]],...]] | all ) \ [--disabled | --no-disabled] \ [--enable-logging | --no-enable-logging] \ [--logging-metadata LOGGING_METADATA]
パラメータは以下のように使用します。各パラメータの詳細については、SDK リファレンス ドキュメントをご覧ください。
--network
: ルールのネットワーク。省略した場合、ルールはdefault
ネットワークに作成されます。デフォルト ネットワークがない場合や、特定のネットワークにルールを作成する場合は、このフィールドを使用する必要があります。--priority
: ルールの優先度を示す数値です。数字が小さいほど、優先度が高くなります。--direction
: トラフィックの方向です。ingress
かegress
のいずれかを指定します。--action
: 一致したときのアクションです。allow
かdeny
のいずれかを指定します。--rules
フラグとともに使用する必要があります。- 次のいずれかの方法でターゲットを指定します。
上り(内向き)ルールで送信先をさらに絞り込むには、
--destination-ranges
を使用して IPv4 または IPv6 アドレス範囲を CIDR 形式で指定します。--destination-ranges
が省略されている場合、上り(内向き)の送信先は任意の IPv4 アドレス(0.0.0.0/0
)になります。詳細については、上り(内向き)ルールの送信先と上り(内向き)ルールのターゲットと IP アドレスをご覧ください。上り(内向き)ルールの場合は、送信元を指定します。
--source-ranges
: 送信元 IPv4 または IPv6 アドレスの範囲を CIDR 形式で指定する場合は、このフラグを使用します。--source-ranges
、source-tags
、--source-service-accounts
が省略されている場合、上り(内向き)のソースは任意の IPv4 アドレス(0.0.0.0/0
)になります。--source-tags
: ネットワーク タグを使用してソース インスタンスを指定する場合は、このフラグを使用します。ソースタグによるフィルタリングを使用できるのは、サービス アカウントによってターゲットが指定されていない場合に限られます。詳しくは、サービス アカウントによるフィルタリングとネットワーク タグによるフィルタリングをご覧ください。--source-ranges
と--source-tags
は併用できます。両方が指定されている場合、有効なソースセットは、ソース範囲の IP アドレスと、ネットワーク タグによって特定されるインスタンスを組み合わせたものです(タグ付けされたインスタンスがソース範囲の IP を持たない場合であっても対象に含まれます)。--source-service-accounts
: 使用するサービス アカウントでインスタンスを指定する場合は、このフラグを使用します。ソースのサービス アカウントによるフィルタリングを使用できるのは、ネットワーク タグによってターゲットが指定されていない場合に限られます。詳しくは、サービス アカウントによるフィルタリングとネットワーク タグによるフィルタリングをご覧ください。--source-ranges
と--source-service-accounts
は併用できます。両方が指定されている場合、有効なソースセットは、ソース範囲の IP アドレスと、ソースのサービス アカウントによって特定されるインスタンスを組み合わせたものです(ソースのサービス アカウントによって特定されるインスタンスがソース範囲の IP を持たない場合であっても対象に含まれます)。
下り(外向き)ルールで送信元をさらに絞り込むには、
--source-ranges
を使用して IPv4 または IPv6 アドレス範囲を CIDR 形式で指定します。--source-ranges
が省略されている場合、下り(外向き)の送信元は任意の IPv4 アドレス(0.0.0.0/0
)になります。詳細については、下り(外向き)ルールの送信元と下り(外向き)ルールのターゲットと IP アドレスをご覧ください。下り(外向き)ルールの場合は送信先を指定します。
--destination-ranges
: 送信先 IPv4 または IPv6 アドレスの範囲を CIDR 形式で指定する場合は、このフラグを使用します。--destination-ranges
が省略されている場合、下り(外向き)の宛先は任意の IPv4 アドレス(0.0.0.0/0
)になります。
--rules
: ルールの適用対象となるプロトコルとポートのリスト。すべてのプロトコルと宛先ポートにルールを適用する場合は、all
を使用します。--action
フラグが必要です。デフォルトでは、ファイアウォール ルールが作成されると自動的に適用されますが、この動作は変更できます。
--disabled
と--no-disabled
の両方が省略されている場合は、ファイアウォール ルールが作成され、適用されます。--disabled
: ファイアウォール ルールを作成して適用しない場合は、このフラグを追加します。ファイアウォール ルールを更新して有効にするまで、ファイアウォール ルールは無効のままです。--no-disabled
: ファイアウォール ルールを確実に適用するには、このフラグを追加します。
--enable-logging | --no-enable-logging
ファイアウォール ルールロギングは、ルールの作成時、更新時に適用できます。ファイアウォール ルールロギングを使用すると、ファイアウォール ルールの効果を監査、検証、分析できます。詳しくは、ファイアウォール ルールのロギングをご覧ください--logging-metadata
: ロギングを有効にすると、デフォルトでは、ファイアウォール ルールのロギングにベース フィールドとメタデータ フィールドが含まれます。ストレージ費用を節約するために、メタデータ フィールドを省略できます。詳細については、ファイアウォール ルール ロギングの使用をご覧ください。
Terraform
ファイアウォール ルールを作成するには、google_compute_firewall
リソースを使用します。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
API
VPC ファイアウォール ルールを作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "RULE_NAME", "network": "projects/PROJECT-ID/global/networks/NETWORK", ... other fields }
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。NETWORK
: ファイアウォール ルールを作成する VPC ネットワークの名前。RULE_NAME
: ファイアウォール ルールの名前。上り(内向き)ファイアウォール ルールの場合は、上り(内向き)の送信元と送信先を指定します。
sourceRanges
、sourceTags
、またはsourceServiceAccounts
フィールドを使用して、上り(内向き)の送信元を指定します。sourceRanges
は、IPv4 と IPv6 のどちらの範囲でも指定できます。ただし、両方を組み合わせることはできません。範囲0.0.0.0/0
を使用する場合は、フィールドを指定しないでください。sourceTags
フィールドとsourceServiceAccounts
フィールドは併用できません。ただし、sourceRanges
はsourceTags
またはsourceServiceAccounts
と併用できます。その場合、ファイアウォール ルールを適用するには、接続がどちらか一方と一致する必要があります。ターゲット フィールドで
sourceTags
フィールドを使用している場合は、targetServiceAccounts
フィールドを使用できません。targetTags
フィールドを使用するか、ターゲット フィールドは使用しないでください。同様に、sourceServiceAccounts
フィールドを使用している場合、targetTags
フィールドは使用できません。ターゲット フィールドを指定しない場合、ルールはネットワーク内のすべてのターゲットに適用されます。destinationRanges
フィールドを使用して、上り(内向き)の送信先を指定します。destinationRanges
は、IPv4 と IPv6 のどちらの範囲でも指定できます。ただし、両方を組み合わせることはできません。
送信先を指定しない場合、Google Cloud は0.0.0.0/0
を使用します。詳細については、上り(内向き)ルールの送信先と上り(内向き)ルールのターゲットと IP アドレスをご覧ください。
下り(外向き)ファイアウォール ルールの場合、下り(外向き)の送信元と送信先を指定します。
sourceRanges
フィールドを使用して、下り(外向き)の送信元を指定します。sourceRange
は、IPv4 と IPv6 のどちらの範囲でも指定できます。ただし、両方を組み合わせることはできません。
送信元を指定しない場合、Google Cloud は0.0.0.0/0
を使用します。詳細については、下り(外向き)ルールの送信元と下り(外向き)ルールのターゲットと IP アドレスをご覧ください。destinationRanges
フィールドを使用して、送信先を指定します。destinationRanges
は、IPv4 と IPv6 のどちらの範囲でも指定できます。ただし、両方を組み合わせることはできません。
送信先を指定しない場合、Google Cloud は0.0.0.0/0
を使用します。targetTags
またはtargetServiceAccounts
フィールドを使用して、ルールを適用するターゲットを指定します。ターゲット フィールドを指定しない場合、ルールはネットワーク内のすべてのターゲットに適用されます。
各フィールドの詳細と説明については、firewalls.insert
メソッドをご覧ください。
C#
Go
Java
Node.js
PHP
Python
Ruby
VPC ファイアウォール ルールを更新する
条件を一致させるために、指定されたプロトコルや宛先ポートなど、VPC ファイアウォール ルールのコンポーネントの一部を変更できます。ファイアウォール ルールの名前、ネットワーク、一致したときのアクション、トラフィックの方向は変更できません。
名前、ネットワーク、アクション、方向のコンポーネントを変更する必要がある場合は、ルールを削除して新しいルールを作成する必要があります。
複数のサービス アカウントを追加または削除する場合は、gcloud CLI、API、またはクライアント ライブラリを使用します。Google Cloud コンソールを使用して、複数のターゲット サービス アカウントまたはソースサービス アカウントを指定することはできません。
コンソール
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
変更するファイアウォール ルールをクリックします。
[編集] をクリックします。
いずれかの編集可能コンポーネントをニーズに合うように変更します。
[保存] をクリックします。
gcloud
VPC ファイアウォール ルールを更新するには、gcloud compute firewall-rules update
コマンドを使用します。
gcloud compute firewall-rules update RULE_NAME \ [--priority=PRIORITY] \ [--description=DESCRIPTION] \ [--target-tags=TAG,...] \ [--target-service-accounts=IAM_SERVICE_ACCOUNT,_] \ [--source-ranges=CIDR_RANGE,...] \ [--source-tags=TAG,...] \ [--source-service-accounts=IAM_SERVICE_ACCOUNT,_] \ [--destination-ranges=CIDR_RANGE,...] \ [--rules=[PROTOCOL[:PORT[-PORT]],…]] \ [--disabled | --no-disabled] \ [--enable-logging | --no-enable-logging]
各フラグの説明は、ファイアウォール ルールを作成での説明と同じです。各フラグの詳細については、SDK リファレンス ドキュメントをご覧ください。
API
PATCH を使用して、フィールド allowed
、description
、sourceRanges
、sourceTags
、または targetTags
を更新します。それ以外のフィールドには PUT または POST を使用します。
(PATCH|(POST|PUT)) https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME { "name": "RULE_NAME", "network": "projects/PROJECT-ID/global/networks/NETWORK", ... other fields }
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。NETWORK
: ファイアウォール ルールを配置する VPC ネットワークの名前。RULE_NAME
: 更新するファイアウォール ルールの名前。
各フィールドの詳細と説明については、firewalls.patch
または firewalls.update
メソッドをご覧ください。
C#
Go
Java
Node.js
PHP
Python
Ruby
VPC ネットワークの VPC ファイアウォール ルールを一覧表示する
プロジェクトまたは特定の VPC ネットワークのすべての VPC ファイアウォール ルールを一覧表示できます。ファイアウォール ルールごとに、Google Cloud にルールのタイプ、ターゲット、フィルタなどの詳細が表示されます。
ファイアウォール ルール ロギングを有効にすると、ファイアウォール インサイトでファイアウォール ルールに関する分析情報が示されるため、構成の理解を深め、より安全に最適化できます。たとえば、過去 6 週間に使用されていない allow
ルールを確認できます。詳細については、ファイアウォール インサイトのドキュメントにあるファイアウォール ルールの詳細画面の使用をご覧ください。
コンソール
プロジェクト内のすべてのネットワークの VPC ファイアウォール ルールをすべて表示するには:
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
特定のネットワーク内の VPC ファイアウォール ルールを表示するには:
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
VPC ネットワークの名前をクリックして、その詳細ページに移動します。
ネットワークの詳細ページで、[ファイアウォール] タブをクリックします。
vpc-firewall-rules を開きます。
gcloud
特定のネットワークの VPC ファイアウォール ルールを並べ替えてリストを作成するには、gcloud compute firewall-rules list
コマンドを使用します。
gcloud compute firewall-rules list --filter network=NETWORK \ --sort-by priority \ --format="table( name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW, denied[].map().firewall_rule().list():label=DENY, sourceTags.list():label=SRC_TAGS, targetTags.list():label=TARGET_TAGS )"
NETWORK
は、ファイアウォール ルールを一覧表示するネットワークの名前に置き換えます。
API
指定されたネットワークのすべての VPC ファイアウォール ルールを一覧表示します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/?filter=network="NETWORK
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。NETWORK
: 一覧表示するファイアウォール ルールを含む VPC ネットワークの名前。
詳細については、firewalls.list
メソッドをご覧ください。
C#
Go
Java
Node.js
PHP
Python
Ruby
VM インスタンスのネットワーク インターフェースの VPC ファイアウォール ルールを一覧表示する
Google Cloud コンソールには、インターフェースに適用されるすべての VPC ファイアウォール ルールと、実際にインターフェースで使用されているルールの一覧がネットワーク インターフェースごとに表示されます。ファイアウォール ルールは他のルールをマスキングできるため、インターフェースに適用されるすべてのルールが実際にインターフェースで使用されないことがあります。
ファイアウォール ルールは、ルールの対象パラメータを使用して VM インスタンスに関連付けられ、適用されます。適用されているすべてのルールを表示して、特定のルールがインターフェースに適用されているかどうかを確認できます。
ファイアウォール ルール ロギングを有効にすると、ファイアウォール インサイトでファイアウォール ルールに関する分析情報が示されるため、構成の理解を深め、より安全に最適化できます。たとえば、過去 6 週間にインターフェースでヒットしたルールを確認できます。 詳細については、ファイアウォール インサイトのドキュメントにある VM ネットワーク インターフェースの詳細画面の使用をご覧ください。
コンソール
VM インスタンスの特定のネットワーク インターフェースに適用される VPC ルールを表示するには:
Google Cloud コンソールで [VM インスタンス] ページに移動します。
表示するインスタンスを見つけます。
インスタンスの [その他の操作] メニュー(
)で、[ネットワークの詳細の表示] を選択します。インスタンスに複数のネットワーク インターフェースがある場合は、[選択したネットワーク インターフェース] フィールドに表示するネットワーク インターフェースを選択します。
[ファイアウォールとルートの詳細] セクションで、[ファイアウォール] タブを選択します。
vpc-firewall-rules を開きます。
この表で、特定の IP アドレスとの間のトラフィックが許可されているかどうかを確認します。
VPC ファイアウォール ルールの詳細を表示する
VPC ファイアウォール ルールを調べると、名前、適用されるネットワーク、コンポーネントなどの情報を確認できます(ルールの有効 / 無効も確認できます)。
コンソール
- ファイアウォール ルールを一覧表示します。すべてのルールのリスト、または特定のネットワーク内のルールのみを表示できます。
- 表示するルールをクリックします。
gcloud
次のコマンドを実行すると、個別の VPC ファイアウォール ルールの情報が取得できます。ファイアウォール ルールの名前はプロジェクトで一意であるため、既存のファイアウォール ルールの情報を出力する場合、ネットワークを指定する必要はありません。
gcloud compute firewall-rules describe RULE_NAME
RULE_NAME
の部分は、ファイアウォール ルールの名前に置き換えます。
API
特定の VPC ファイアウォール ルールの説明を取得します。
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
プレースホルダを有効な値に置き換えます。
PROJECT_ID
: ファイアウォール ルールが配置されているプロジェクトの ID。RULE_NAME
: 記述するファイアウォール ルールの名前。
詳細については、firewalls.get
メソッドをご覧ください。
VPC ファイアウォール ルールを削除する
コンソール
- VPC ファイアウォール ルールを一覧表示します。すべてのルールのリスト、または特定のネットワーク内のルールのみを表示できます。
- 削除するルールをクリックします。
- [削除] をクリックします。
- もう一度 [削除] をクリックして確定します。
gcloud
VPC ファイアウォール ルールを削除するには、gcloud compute firewall-rules delete
コマンドを使用します。
gcloud compute firewall-rules delete RULE_NAME
RULE_NAME
は、削除するルールの名前に置き換えます。
API
VPC ファイアウォール ルールを削除します。
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls/RULE_NAME
次のように置き換えます。
PROJECT_ID
: ファイアウォール ルールが配置されているプロジェクトの ID。RULE_NAME
: 削除するファイアウォール ルールの名前。
詳細については、firewalls.delete
メソッドをご覧ください。
C#
Go
Java
Node.js
PHP
Python
Ruby
VPC ファイアウォール ルールをモニタリングする
VPC ファイアウォール ルールのロギングを有効にして、どのルールがどのトラフィックを許可またはブロックしているかを確認できます。詳しくは、ファイアウォール ルール ロギングの使用をご覧ください。
一般的なユースケースの VPC ファイアウォール ルールを構成する
以下のセクションでは、gcloud CLI と API を使用して、デフォルトのネットワーク用に作成された事前定義の VPC ファイアウォール ルールを再作成する例を示します。この例を使用すると、カスタムモードと自動モードのネットワークに同様のルールを作成できます。各ファイアウォール ルールには IPv4 か IPv6 アドレス範囲のいずれかを含めることができます。両方を含めることはできません。
VM 間の内部上り(内向き)接続を許可する
次の例では、VM インスタンスへの内部 TCP、UDP、ICMP 接続を許可するファイアウォール ルールを作成します。これは、デフォルトのネットワークの allow-internal
ルールと類似しています。
gcloud
gcloud compute firewall-rules create
コマンドを使用します。
gcloud compute firewall-rules create RULE_NAME \ --action=ALLOW \ --direction=INGRESS \ --network=NETWORK \ --priority=1000 \ --rules=tcp:0-65535,udp:0-65535,ICMP_PROTOCOL \ --source-ranges=SUBNET_RANGES
次のように置き換えます。
RULE_NAME
: このファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールが適用されるネットワークの名前。デフォルト値はdefault
です。ICMP_PROTOCOL
: ICMP プロトコル タイプ。プロトコル名icmp
またはプロトコル番号1
を使用して、ICMPv4 を指定します。プロトコル番号58
を使用して ICMPv6 を指定します。SUBNET_RANGES
: 1 つ以上の IP アドレス範囲。IP アドレス範囲を指定すると、その範囲からのトラフィックは VPC ネットワーク内の任意の VM 宛先に到達できます。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。IPv4 サブネット範囲:
- 自動モードの VPC ネットワークは、
10.128.0.0/9
内の IP アドレス範囲を使用します。 - カスタムモードのネットワークは、任意の有効な IPv4 範囲を使用できます。VPC ネットワークのサブネットに隣接した範囲を使用しない場合は、複数の範囲の指定が必要になることがあります。
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
を使用して、すべてのプライベート IPv4 アドレス範囲(RFC 1918 範囲)からのトラフィックを許可できます。
IPv6 サブネット範囲:
VPC ネットワークに内部 IPv6 アドレス範囲を割り当てている場合は、その範囲をソース範囲として使用できます。VPC ネットワークの内部 IPv6 範囲を使用すると、ファイアウォール ルールには、現在と将来のすべての内部 IPv6 サブネット範囲が設定されます。VPC ネットワークの内部 IPv6 の範囲は、次のコマンドを使用して確認できます。
gcloud compute networks describe NETWORK \ --format="flattened(internalIpv6Range)"
特定の内部 IPv6 サブネット範囲を指定することもできます。
デュアルスタック サブネットの外部 IPv6 サブネット範囲からのトラフィックを許可するには、対象に含める各サブネットの IPv6 アドレス範囲を指定する必要があります。
- 自動モードの VPC ネットワークは、
API
POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "kind": "compute#firewall", "name": "RULE_NAME", "network": "projects/PROJECT_ID/global/networks/NETWORK", "direction": "INGRESS", "priority": 1000, "targetTags": [], "allowed": [ { "IPProtocol": "tcp", "ports": [ "0-65535" ] }, { "IPProtocol": "udp", "ports": [ "0-65535" ] }, { "IPProtocol": "ICMP_PROTOCOL" } ], "sourceRanges": [ "SUBNET_RANGES" ] }
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。RULE_NAME
: ファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールを作成する VPC ネットワークの名前。デフォルト値はdefault
です。ICMP_PROTOCOL
: ICMP プロトコル タイプ。プロトコル名icmp
またはプロトコル番号1
を使用して、ICMPv4 を指定します。プロトコル番号58
を使用して ICMPv6 を指定します。INTERNAL_SOURCE_RANGES
: 1 つ以上の IP 範囲。VPC ネットワークのすべてのサブネット内の内部トラフィックを許可するには、VPC ネットワークで使用される IP アドレス範囲を指定します。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。IPv4 サブネット範囲:
- 自動モードの VPC ネットワークは、
10.128.0.0/9
内の IP アドレス範囲を使用します。 - カスタムモードのネットワークは、任意の有効な IPv4 範囲を使用できます。VPC ネットワークのサブネットに隣接した範囲を使用しない場合は、複数の範囲の指定が必要になることがあります。
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
を使用して、すべてのプライベート IPv4 アドレス範囲(RFC 1918 範囲)からのトラフィックを許可できます。
IPv6 サブネット範囲:
VPC ネットワークに内部 IPv6 アドレス範囲を割り当てている場合は、その範囲をソース範囲として使用できます。VPC ネットワークの内部 IPv6 範囲を使用すると、ファイアウォール ルールには、現在と将来のすべての内部 IPv6 サブネット範囲が設定されます。VPC ネットワークの内部 IPv6 の範囲は、次のコマンドを使用して確認できます。
gcloud compute networks describe NETWORK \ --format="flattened(internalIpv6Range)"
特定の内部 IPv6 サブネット範囲を指定することもできます。
デュアルスタック サブネットの外部 IPv6 サブネット範囲からのトラフィックを許可するには、対象に含める各サブネットの IPv6 アドレス範囲を指定する必要があります。
- 自動モードの VPC ネットワークは、
VM への上り(内向き)SSH 接続を許可する
次の例では、VM インスタンスへの SSH 接続を許可するファイアウォール ルールを作成します。これは、デフォルトのネットワークの allow-ssh
ルールと類似しています。
gcloud
gcloud compute firewall-rules create
コマンドを使用します。
gcloud compute firewall-rules create RULE_NAME \ --action=ALLOW \ --direction=INGRESS \ --network=NETWORK \ --priority=1000 \ --rules=tcp:22 \ --source-ranges=RANGES_OUTSIDE_VPC_NETWORK
次のように置き換えます。
RULE_NAME
: このファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールが適用されるネットワークの名前。デフォルト値はdefault
です。RANGES_OUTSIDE_VPC_NETWORK
: 1 つ以上の IP アドレス範囲。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。- ソース範囲に
35.235.240.0/20
を含めると、他のすべての前提条件が満たされている場合に、Identity-Aware Proxy(IAP)TCP 転送を使用した SSH 接続が許可されます。詳細については、TCP 転送での IAP の使用をご覧ください。 - ソース範囲として
0.0.0.0/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv4 ソースからのトラフィックが許可されます。 - ソース範囲として
::/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv6 ソースからのトラフィックが許可されます。
- ソース範囲に
API
POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "kind": "compute#firewall", "name": "RULE_NAME", "network": "projects/PROJECT_ID/global/networks/NETWORK", "direction": "INGRESS", "priority": 1000, "targetTags": [], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "sourceRanges": [ "RANGES_OUTSIDE_VPC_NETWORK" ] }
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。RULE_NAME
: ファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールを作成する VPC ネットワークの名前。RANGES_OUTSIDE_VPC_NETWORK
: 1 つ以上の IP アドレス範囲。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。- ソース範囲に
35.235.240.0/20
を含めると、他のすべての前提条件が満たされている場合に、Identity-Aware Proxy(IAP)TCP 転送を使用した SSH 接続が許可されます。詳細については、TCP 転送での IAP の使用をご覧ください。 - ソース範囲として
0.0.0.0/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv4 ソースからのトラフィックが許可されます。 - ソース範囲として
::/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv6 ソースからのトラフィックが許可されます。
- ソース範囲に
VM への上り(内向き)RDP 接続を許可する
次の例では、VM インスタンスへの Microsoft リモート デスクトップ プロトコル(RDP)接続を許可するファイアウォール ルールを作成します。これは、デフォルトのネットワークの allow-rdp
ルールと類似しています。
gcloud
gcloud compute firewall-rules create
コマンドを使用します。
gcloud compute firewall-rules create RULE_NAME \ --action=ALLOW \ --direction=INGRESS \ --network=NETWORK \ --priority=1000 \ --rules=tcp:3389 \ --source-ranges=RANGES_OUTSIDE_VPC_NETWORK
次のように置き換えます。
RULE_NAME
: このファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールが適用されるネットワークの名前。デフォルト値はdefault
です。RANGES_OUTSIDE_VPC_NETWORK
: 1 つ以上の IP アドレス範囲。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。- ソース範囲に
35.235.240.0/20
を含めると、他のすべての前提条件が満たされている場合に、Identity-Aware Proxy(IAP)TCP 転送を使用した RDP 接続が許可されます。詳細については、TCP 転送での IAP の使用をご覧ください。 - ソース範囲として
0.0.0.0/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv4 ソースからのトラフィックが許可されます。 - ソース範囲として
::/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv6 ソースからのトラフィックが許可されます。
- ソース範囲に
API
POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "kind": "compute#firewall", "name": "RULE_NAME", "network": "projects/PROJECT_ID/global/networks/NETWORK", "direction": "INGRESS", "priority": 1000, "allowed": [ { "IPProtocol": "tcp", "ports": [ "3389" ] } ], "sourceRanges": [ "EXTERNAL_SOURCE_RANGES" ] }
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。RULE_NAME
: ファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールを作成する VPC ネットワークの名前。RANGES_OUTSIDE_VPC_NETWORK
: 1 つ以上の IP アドレス範囲。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。- ソース範囲に
35.235.240.0/20
を含めると、他のすべての前提条件が満たされている場合に、Identity-Aware Proxy(IAP)TCP 転送を使用した RDP 接続が許可されます。詳細については、TCP 転送での IAP の使用をご覧ください。 - ソース範囲として
0.0.0.0/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv4 ソースからのトラフィックが許可されます。 - ソース範囲として
::/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv6 ソースからのトラフィックが許可されます。
- ソース範囲に
VM への上り(内向き)ICMP 接続を許可する
次の例では、VM インスタンスへの ICMP 接続を許可するファイアウォール ルールを作成します。これは、デフォルトのネットワークの allow-icmp
ルールと類似しています。
gcloud
gcloud compute firewall-rules create
コマンドを使用します。
gcloud compute firewall-rules create RULE_NAME \ --action=ALLOW \ --direction=INGRESS \ --network=NETWORK \ --priority=1000 \ --rules=ICMP_PROTOCOL \ --source-ranges=RANGES_OUTSIDE_VPC_NETWORK
次のように置き換えます。
RULE_NAME
: ファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールが適用されるネットワークの名前。デフォルト値はdefault
です。ICMP_PROTOCOL
: ICMP プロトコル タイプ。プロトコル名icmp
またはプロトコル番号1
を使用して、ICMPv4 を指定します。プロトコル番号58
を使用して ICMPv6 を指定します。RANGES_OUTSIDE_VPC_NETWORK
: 1 つ以上の IP アドレス範囲。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。- ソース範囲として
0.0.0.0/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv4 ソースからのトラフィックが許可されます。 - ソース範囲として
::/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv6 ソースからのトラフィックが許可されます。
- ソース範囲として
API
POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "kind": "compute#firewall", "name": "RULE_NAME", "network": "projects/PROJECT_ID/global/networks/NETWORK", "direction": "INGRESS", "priority": 1000, "targetTags": [], "allowed": [ { "IPProtocol": "ICMP_PROTOCOL" } ], "sourceRanges": [ "RANGES_OUTSIDE_VPC_NETWORK" ] }
次のように置き換えます。
PROJECT_ID
: VPC ネットワークが配置されているプロジェクトの ID。RULE_NAME
: ファイアウォール ルールの名前。NETWORK
: ファイアウォール ルールを作成する VPC ネットワークの名前。ICMP_PROTOCOL
: 使用する ICMP プロトコルのタイプ。プロトコル名icmp
またはプロトコル番号1
を使用して、ICMPv4 を指定します。プロトコル番号58
を使用して ICMPv6 を指定します。RANGES_OUTSIDE_VPC_NETWORK
: 1 つ以上の IP アドレス範囲。ファイアウォール ルールには、IPv4 範囲か IPv6 範囲のいずれかを指定できます。すべての IPv4 または IPv6 ソースではなく、アクセスを許可する必要がある特定の IP アドレス範囲を指定することをおすすめします。- ソース範囲として
0.0.0.0/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv4 ソースからのトラフィックが許可されます。 - ソース範囲として
::/0
を使用すると、Google Cloud の外部にあるソースを含むすべての IPv6 ソースからのトラフィックが許可されます。
- ソース範囲として
その他の構成例
図 1 は、my-network
という名前の VPC ネットワークの構成例を示しています。このネットワークには次のものが存在します。
- IP 範囲が
10.240.10.0/24
のsubnet1
という名前のサブネット。単一のインスタンスが存在します。 - IP 範囲が
192.168.1.0/24
のsubnet2
という名前のサブネット。 subnet2
のvm1
という名前のインスタンス。タグwebserver
、内部 IP アドレス192.168.1.2
が設定されています。subnet2
のvm2
という名前のインスタンス。タグdatabase
、内部 IP アドレス192.168.1.3
が設定されています。
例 1: subnet1 からポート 80 への接続を除くすべての上り(内向き)TCP 接続を拒否する
この例では、subnet1
からポート 80
への接続を除くすべての上り(内向き)TCP 接続を拒否する VPC ファイアウォール ルールのセットを作成します。
gcloud
webserver
でタグ付けされたインスタンスへのすべての上り(内向き)TCP トラフィックを拒否するファイアウォール ルールを作成します。gcloud compute firewall-rules create deny-subnet1-webserver-access \ --network NETWORK_NAME \ --action deny \ --direction ingress \ --rules tcp \ --source-ranges 0.0.0.0/0 \ --priority 1000 \ --target-tags webserver
NETWORK_NAME
は、ネットワークの名前に置き換えます。subnet1
(10.240.10.0/24
)に、すべての IP アドレスを許可するファイアウォール ルールを作成し、webserver
というタグの付いたインスタンスの TCP ポート80
へのアクセスを許可します。gcloud compute firewall-rules create vm1-allow-ingress-tcp-port80-from-subnet1 \ --network NETWORK_NAME \ --action allow \ --direction ingress \ --rules tcp:80 \ --source-ranges 10.240.10.0/24 \ --priority 50 \ --target-tags webserver
NETWORK_NAME
は、ネットワークの名前に置き換えます。
例 2: vm1 のポート 80 への接続を除くすべての下り(外向き)TCP 接続を拒否する
gcloud
すべての下り(外向き)TCP トラフィックを拒否するファイアウォール ルールを作成します。
gcloud compute firewall-rules create deny-all-access \ --network NETWORK_NAME \ --action deny \ --direction egress \ --rules tcp \ --destination-ranges 0.0.0.0/0 \ --priority 1000
NETWORK_NAME
は、ネットワークの名前に置き換えます。vm1
ポート80
への TCP トラフィックを許可するファイアウォール ルールを作成します。gcloud compute firewall-rules create vm1-allow-egress-tcp-port80-to-vm1 \ --network NETWORK_NAME \ --action allow \ --direction egress \ --rules tcp:80 \ --destination-ranges 192.168.1.2/32 \ --priority 60
NETWORK_NAME
は、ネットワークの名前に置き換えます。
例 3: 外部ホストのポート 443 への下り(外向き)TCP 接続を許可する
webserver
でタグ付けされたインスタンスが、サンプル外部 IP アドレス 192.0.2.5
のポート 443
へ下り(外向き)TCP トラフィックを送信できるように許可するファイアウォール ルールを作成します。
gcloud
gcloud compute firewall-rules create vm1-allow-egress-tcp-port443-to-192-0-2-5 \ --network NETWORK_NAME \ --action allow \ --direction egress \ --rules tcp:443 \ --destination-ranges 192.0.2.5/32 \ --priority 70 \ --target-tags webserver
NETWORK_NAME
は、ネットワークの名前に置き換えます。
例 4: vm2 から vm1 への SSH 接続を許可する
タグ database
(vm2
)が付いたインスタンスからタグ webserver
(vm1
)が付いたインスタンスに到達する SSH トラフィックを許可するファイアウォール ルールを作成します。
gcloud
gcloud compute firewall-rules create vm1-allow-ingress-tcp-ssh-from-vm2 \ --network NETWORK_NAME \ --action allow \ --direction ingress \ --rules tcp:22 \ --source-tags database \ --priority 80 \ --target-tags webserver
NETWORK_NAME
は、ネットワークの名前に置き換えます。
例 5: サービス アカウントを使用し、ウェブサーバーからデータベースへの TCP: 1443 を許可する
サービス アカウントとロールの詳細については、サービス アカウントにロールを付与するをご覧ください。
テンプレートを介して自動スケーリングされる 2 つのアプリケーションがある図 2 のシナリオを考えてみます。my-sa-webserver
サービス アカウントに関連付けられたウェブサーバー アプリケーションと、my-sa-database
サービス アカウントに関連付けられたデータベース アプリケーションです。セキュリティ管理者は、my-sa-webserver
サービス アカウントを持つ VM から my-sa-database
サービス アカウントを持つ VM の宛先ポート 1443
への TCP トラフィックを許可しようと考えています。
サービス アカウントの作成を含む構成手順は次のとおりです。
gcloud
プロジェクトの編集者またはオーナーが、
my-sa-webserver
とmy-sa-database
というサービス アカウントを作成します。gcloud iam service-accounts create my-sa-webserver \ --display-name "webserver service account"
gcloud iam service-accounts create my-sa-database \ --display-name "database service account"
プロジェクト オーナーが Identity and Access Management(IAM)ポリシーを設定して、ウェブサーバーのデベロッパー web-dev@example.com にサービス アカウント
my-sa-webserver
の serviceAccountUser のロールを割り当てます。gcloud iam service-accounts add-iam-policy-binding \ my-sa-webserver@my-project.iam.gserviceaccount.com \ --member='user:web-dev@example.com' \ --role='roles/iam.serviceAccountUser'
プロジェクト オーナーが IAM ポリシーを設定して、データベース デベロッパー
db-dev@example.com
にサービス アカウントmy-sa-database
の serviceAccountUser のロールを割り当てます。gcloud iam service-accounts add-iam-policy-binding \ my-sa-database@my-project.iam.gserviceaccount.com \ --member='user:db-dev@example.com' \ --role='roles/iam.serviceAccountUser'
インスタンス管理者のロールを持つデベロッパー
web-dev@example.com
が、ウェブサーバー インスタンス テンプレートを作成し、インスタンスをサービス アカウントmy-sa-webserver
として実行する権限を与えます。gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --service-account my-sa-webserver@my-project-123.iam.gserviceaccount.com
インスタンス管理者のロールを持つデベロッパー
db-dev@example.com
が、データベース インスタンス テンプレートを作成し、インスタンスをサービス アカウントmy-sa-database
として実行する権限を与えます。gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME \ --service-account my-sa-database@my-project-123.iam.gserviceaccount.com
セキュリティ管理者は、TCP トラフィックがサービス アカウント
my-sa-webserver
の VM からサービス アカウントmy-sa-database
の VM のポート 1443 に到達することを許可するファイアウォール ルールを作成します。gcloud compute firewall-rules create RULE_NAME \ --network network_a \ --allow TCP:1443 \ --source-service-accounts my-sa-webserver@my-project.iam.gserviceaccount.com \ --target-service-accounts my-sa-database@my-project.iam.gserviceaccount.com
トラブルシューティング
VPC ファイアウォール ルールの作成または更新時のエラー メッセージ
以下のエラー メッセージのいずれかが表示される場合があります。
Should not specify destination range for ingress direction.
送信先の範囲が、上り(内向き)のファイアウォール ルールの有効なパラメータではありません。ファイアウォール ルールは、
egress
の方向が特に指定されていない限り、上り(内向き)ルールとみなされます。方向を指定せずにルールを作成すると、上り(内向き)ルールとして作成され、宛先の範囲は許可されません。また、送信元の範囲も下り(外向き)ルールの有効なパラメータではありません。Firewall direction cannot be changed once created.
既存のファイアウォール ルールの方向は変更できません。正しいパラメータで新しいルールを作成してから、古いルールを削除する必要があります。
Firewall traffic control action cannot be changed once created.
既存のファイアウォール ルールのアクションは変更できません。正しいパラメータで新しいルールを作成してから、古いルールを削除する必要があります。
Service accounts must be valid RFC 822 email addresses.
ファイアウォール ルールで指定するサービス アカウントは、RFC 822 形式のメールアドレスである必要があります。gcloud compute firewall-rules create bad --allow tcp --source-service-accounts invalid-email
Creating firewall...failed. ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: – Invalid value for field 'resource.sourceServiceAccounts[0]': 'invalid-email'. Service accounts must be valid RFC 822 email addresses.
ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
同じルール内にサービス アカウントとタグの両方を指定することはできません。gcloud compute firewall-rules create bad --allow tcp --source-service-accounts test@google.com --target-tags target
Creating firewall...failed. ERROR: (gcloud.compute.firewall-rules.create) Could not fetch resource: – ServiceAccounts and Tags are mutually exclusive and can't be combined in the same firewall rule.
リソースが見つからないことを示すエラー
VPC ネットワークまたはファイアウォール ルールを削除すると、次のようなメッセージが表示されることがあります。
The resource "aet-uscentral1-subnet--1-egrfw" was not found.
このエラーにより、暗黙のファイアウォール ルールの削除や詳細の表示がブロックされる可能性があります。ファイアウォール ルールがこの状態であると、VPC ネットワークの削除もブロックされる場合があります。
このようにブロックされているファイアウォール ルールまたはネットワークを削除するには、関連するサーバーレス VPC アクセス コネクタを削除してから、もう一度お試しください。サーバーレス VPC アクセス コネクタを削除する方法については、コネクタを削除するをご覧ください。
ファイアウォール エラーが多すぎる
次のエラー メッセージが表示される場合があります。
Google Compute Engine: The network contains too many large firewalls.
安全性とパフォーマンスを維持するため、VPC ネットワークに実装できるファイアウォール ルールの複雑さと数には上限があります。このエラーが表示された場合は、ファイアウォール ルールを簡素化または統合するようにアカウント管理チームに依頼してください。
VM インスタンスに接続できない
VM インスタンスに接続できない場合、ファイアウォール ルールを確認してください。
gcloud
別の VM インスタンスから接続を開始する場合は、そのインスタンスの下り(外向き)ファイアウォール ルールを一覧表示します。
gcloud compute firewall-rules list --filter network=NETWORK_NAME \ --filter EGRESS \ --sort-by priority \ --format="table( name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW, denied[].map().firewall_rule().list():label=DENY, sourceTags.list():label=SRC_TAGS, sourceServiceAccounts.list():label=SRC_SVC_ACCT, targetTags.list():label=TARGET_TAGS, targetServiceAccounts.list():label=TARGET_SVC_ACCT )"
NETWORK_NAME
は、ネットワークの名前に置き換えます。送信先 IP がすべての下り(外向き)ルールによって拒否されているかどうかを確認します。最も高い優先度(優先度の数字が最も小さいもの)を持つルールは、優先度がより低いルールよりも優先されます。同じ優先度を持つ 2 つのルールの場合、拒否ルールのほうが優先されます。
ネットワークの上り(内向き)ファイアウォール ルールに送信先 VM インスタンスが含まれているかどうか確認します。
gcloud compute firewall-rules list --filter network=NETWORK_NAME \ --filter INGRESS \ --sort-by priority \ --format="table( name, network, direction, priority, sourceRanges.list():label=SRC_RANGES, destinationRanges.list():label=DEST_RANGES, allowed[].map().firewall_rule().list():label=ALLOW, denied[].map().firewall_rule().list():label=DENY, sourceTags.list():label=SRC_TAGS, sourceServiceAccounts.list():label=SRC_SVC_ACCT, targetTags.list():label=TARGET_TAGS, targetServiceAccounts.list():label=TARGET_SVC_ACCT )"
NETWORK_NAME
は、ネットワークの名前に置き換えます。出力例。出力は、ファイアウォール ルールのリストによって異なります。
NAME NETWORK DIRECTION PRIORITY SRC_RANGES DEST_RANGES ALLOW DENY SRC_TAGS SRC_SVC_ACCT TARGET_TAGS TARGET_SVC_ACCT default-allow-icmp default INGRESS 65534 0.0.0.0/0 icmp default-allow-internal default INGRESS 65534 10.128.0.0/9 tcp:0-65535,udp:0-65535,icmp default-allow-rdp default INGRESS 65534 0.0.0.0/0 tcp:3389 default-allow-ssh default INGRESS 65534 0.0.0.0/0 tcp:22 firewall-with-sa default INGRESS 1000 tcp:10000 test1@google.com target@google.com
上り(内向き)または下り(外向き)のファイアウォール ルールによってトラフィックがドロップされているかどうかをトラブルシューティングする場合は、VPC ネットワーク内の VM インスタンスと、別の VPC ネットワークまたは Google Cloud 以外のネットワークとの間で接続テストを実施します。接続テストを実施してさまざまなシナリオのトラブルシューティングを行う方法については、接続テストの実施をご覧ください。
VPC ファイアウォール ルールの有効 / 無効を確認する
ファイアウォール ルールの有効 / 無効を確認するには、ファイアウォール ルールの詳細を表示します。
Google Cloud コンソールの [適用] セクションで、[有効] または [無効] を探します。
gcloud CLI の出力で、disabled
フィールドを探します。disabled:false
の場合、ルールは有効で、適用されています。disabled: true
の場合、ルールは無効です。
VM インスタンスに適用されているルールを確認する
ルールを作成したら、そのルールが特定のインスタンスに正しく適用されているかどうかを確認できます。詳細については、VM インスタンスのネットワーク インターフェースのファイアウォール ルールを一覧表示するをご覧ください。
ソースタグ付きの VPC ファイアウォール ルールがすぐに適用されない
ソースタグを使用する上り(内向き)ファイアウォール ルールが反映されるまで、時間がかかることがあります。詳しくは、上り(内向き)ファイアウォール ルールのソースタグに関する考慮事項をご覧ください。
次のステップ
- ファイアウォール ルールの概要については、VPC ファイアウォール ルールをご覧ください。