このページでは、Virtual Private Cloud(VPC)ファイアウォール ルールの処理のためのコマンドについて説明し、それらの使用例を紹介します。VPC ファイアウォール ルールを使用すると、ポート番号、タグ、プロトコルに基づいて、VPC ネットワーク内の仮想マシン(VM)インスタンスとの間で送受信されるトラフィックを許可または拒否できます。
始める前に
暗黙のルールやデフォルト ネットワークのシステム生成ルールなど、VPC ファイアウォール ルールの詳細については、VPC ファイアウォール ルールをご覧ください。
ファイアウォール ルールを構成する前に、ファイアウォール ルールのコンポーネントを確認して、 Google Cloudで使用されるファイアウォールのコンポーネントについて理解してください。
VPC ファイアウォール ルールを作成する
VPC ファイアウォール ルールはネットワーク レベルで定義され、ルールが作成されたネットワークにのみ適用されます。ただし、それぞれの名前はプロジェクトごとに一意である必要があります。
ファイアウォール ルールには IPv4 範囲または IPv6 範囲のいずれかを含めることができます。両方を含めることはできません。
ファイアウォール ルールを作成する際に、ファイアウォール ルールロギングを有効にするかどうかを選択できます。ロギングを有効にすると、ストレージ フィールドを節約するためにメタデータ フィールドを省略できます。詳細については、VPC ファイアウォール ルールのロギングを使用するをご覧ください。
ターゲットまたはソースのサービス アカウントのフィールドに複数のサービス アカウントを指定する場合は、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ファイアウォール ルールロギングは、ルールの作成時、更新時に適用できます。VPC ファイアウォール ルール ロギングを使用すると、ファイアウォール ルールの効果を監査、検証、分析できます。詳細については、VPC ファイアウォール ルールのロギングをご覧ください。--logging-metadata: ロギングを有効にすると、デフォルトでは、ファイアウォール ルールのロギングにベース フィールドとメタデータ フィールドが含まれます。ストレージ費用を節約するために、メタデータ フィールドを省略できます。詳細については、VPC ファイアウォール ルール ロギングの使用をご覧ください。
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 メソッドをご覧ください。