こんにちは!
BFT名古屋支店の佐野です。
今回は佐野が勝手に進めるブログプロジェクト「GCPクイックスタートガイド」の第6回です。
前回はGCP環境のネットワークの根幹であるVPCとサブネットに触れましたが、今回はその中で少し触れたファイアウォールの設定について詳しくお話していきます。
GCPにおけるファイアウォール
まずGCPにおいてファイアウォールと言うと、VPCおよびVPC内の仮想マシンに対して適用するVPC ファイアウォールと、サーバレスなアプリケーション実行環境を用意できる「App Engine」に対して適用するApp Engine ファイアウォールがあります。
本記事ではApp Engine ファイアウォールについては扱わず、VPC ファイアウォールのみを見ていきます。
そしてVPC ファイアウォールにも「ファイアウォールルール」と「ファイアウォールポリシー」の2種類の設定があります。
ファイアウォールルールはひとつのVPC対してアクセス制御を設定するためのもので、ファイアウォールルールポリシーは複数のプロジェクト、あるいは複数のVPCに対する共通のアクセス制御を設定できるものです。
さらにファイアウォールポリシーには適用する範囲ごとに「階層型ファイアウォールポリシー」、「グローバルネットワークファイアウォールポリシー」、「リージョンネットワークファイアウォールポリシー」の3種類に分かれています。
そしてGCPのファイアウォールの特徴は、先述した「VPCおよびVPC内の仮想マシン」に対してのみアクセス制御を適用するという点です。
例えばAWSのファイアウォールに相当する「ネットワークACL」と「セキュリティグループ」の組み合わせでは、以下の図のようにサブネット単位、セキュリティグループに属させたEC2やLambdaなどのAWSリソース単位でアクセス制御を行ないます。
一方でGCPのファイアウォールの適用対象はVPCとVPC内の仮想マシンなので、以下図のようなアクセス制御となります。
このため「サブネットAには●●の通信は通すが、サブネットBには●●の通信を通す」というような設定はできません。
なのでひとつのサブネット上に配置した仮想マシンなどのGCPリソースすべてに同じアクセス制御をしたいという場合、サブネットを単位とするのではなく別のもので他のGCPリソースを区別する必要があるのです。
ここからはその区別のための方法も含め、ファイアウォールルールとファイアウォールポリシーの中身を解説します。
ファイアウォールルール
ファイアウォールルールは先述の通り、ひとつのVPCに対して適用するアクセス制御を設定できるものです。
その実態はアクセス制御のルールそのものであり、ひとつのファイアウォールルールでひとつのアクセス制御パターンが設定できます。VPC内で複数のパターンのアクセス制御を行ないたい場合、それと同じ分のファイアウォールルールが必要です。
そのファイアウォールルールは以下の設定で構成されます。
名前
ファイアウォールルールの名前です。使用可能なのは小文字と数字、ハイフンのみです。ログ
ファイアウォールルールのロギングを有効にすると、そのルールを適用しているVPCや仮想マシンに対するトラフィックが許可・拒否された結果をログとして記録するようになります。
優先度
ファイアウォールルールの優先度を0から65535までの整数で指定します。
優先度の数値が小さいほど、優先して先に評価されます。
先に評価されたルールで許可または拒否された通信は、それ以降のルールを無視して処理されます。トラフィックの方向
ファイアウォールルールを適用する通信の方向を指定します。
上り(内向き)方向は「アクセス制御の適用先に送信される通信」を示し、下り(外向き)方向は「アクセス制御の適用先から送信される通信」を表します。一致した時のアクション
ファイアウォールルールで設定した条件に合致した通信を許可するか拒否するかを指定します。
なおファイアウォールルールおよびファイアウォールポリシーはステートフル形式での評価を行なうため、応答、いわゆる返りの通信の許可を考慮する必要はありません。
ターゲット
ファイアウォールルールを適用する仮想マシン(インスタンス)を指定します。
前述の「ネットワーク」で指定したVPC上にある仮想マシンをすべてにルールを適用する場合は「ネットワーク上のすべてのインスタンス」を、VPC上の仮想マシンが有するネットワークタグあるいはサービスアカウントによってルールを適用する仮想マシンを指定する場合は「指定されたターゲットタグ」や「指定されたサービスアカウント」を選択します。
その場合、ルールを適用したい仮想マシンが持つネットワークタグあるいはサービスアカウントも指定します。
なお、ターゲットとして「IPアドレスの範囲」を指定することはできません。ソースフィルタ/送信先フィルタ
アクセス制御としてフィルタする通信先あるいは通信元を指定します。
「一致した時のアクション」で“上り”を選択している場合は「ルールの適用先に通信を行なう通信元からの通信」が、“下り”を選択している場合は「ルールの適用先が通信先へ送信する通信」がフィルタされる対象の通信です。
例えば“上り”通信がフィルタ対象の場合、フィルタで指定した条件に合致する送信元からルールの適用先に通信があった場合にルールの評価が行われるようになります。
“下り”通信がフィルタ対象の場合は逆に、ルールの適用先からフィルタで指定した条件に合致する送信先への通信に対してルールの評価が行われます。
ちなみに“上り”選択時に指定するのが「ソースフィルタ」で、“下り”選択時に指定するのが「送信先フィルタ」です。プロトコルとポート
アクセス制御として評価の対象とするプロトコルおよびポートを指定します。
ここで指定したプロトコルによる通信やポートへの通信が行われた場合、評価を行ないます。
ファイアウォールポリシー
ファイアウォールポリシーは先述の通り、複数のVPCに対して適用可能なアクセス制御を設定できるものです。
複数のVPCで共通して適用するファイアウォールルールをグループ化しているようなものとも言え、ルールの設定の仕方や評価の仕組みはファイアウォールルールと共通していますが、以下の点において差異があります。
- 最初にVPCにアタッチしなくとも作成できる
ファイアウォールルールの場合は必ず適用するVPCを指定しなければならず、作成するとルールが即時適用されますが、ファイヤーウォールポリシーの場合は最初に適用するVPCをせず作成だけするということが可能です。
(もちろん適用するVPCを指定しない場合はファイアウォールポリシー内のすべてのルールは効力を発揮しません)
なおファイアウォールポリシーはVPC1つにつき1つまで適用でき、複数のファイアウォールポリシーを1つのVPCに適用することはできません。
ターゲットを指定する際、ネットワークタグが利用できない
ファイアウォールポリシーのルールの場合、適用先の仮想マシンの識別にはネットワークタグではなくセキュアタグという別のタグを使用します。
セキュアタグは単純に“タグ”とも呼ばれ、キー:バリュー形式で作成するものです。また組織がなければ設定することができません。ソースフィルタを指定する際、サービスアカウントを指定できない
上り通信時のフィルタを設定する場合、ファイアウォールルールでは通信元のフィルタとしてサービスアカウントを指定できましたが、ファイアウォールポリシーでのルールはそれが行えません。
IPアドレスの範囲か、先に述べたセキュアタグでのみ指定できます。有償TierではFQDNや位置情報などをフィルタに指定できる
Standard Tier以上を利用している場合、ファイアウォールポリシーではルールのフィルタにFQDNや位置情報など細かなフィルタを設定できます。
ファイアウォールルールとファイアウォールポリシーはどちらが先に評価される?
ファイアウォールルールとファイアウォールポリシーの評価の順番は基本的に以下のようになっています。
一般的にファイアウォールポリシーとはグローバルファイアウォールポリシーやリージョンファイアウォールポリシーを指すので、ひとまずはファイアウォールルールの方が先に評価されると言えます。
ただし階層型ファイアウォールポリシーが設定されている場合はまずそちらが先に評価されますし、VPCの設定を変更することでファイアウォールルールよりも先にグローバルファイアウォールポリシーやリージョンファイアウォールを評価させることも可能です。
ファイアウォールを作成する
ファイアウォールの作成はナビゲーションメニューから「VPC ネットワーク」を選択し、その配下の「ファイアウォール」を選んだ後、コンソール上の「ファイアウォールポリシーを作成」あるいは「ファイアウォールルールを作成」から行えます。
区切り
この記事の内容に沿ってファイアウォールを設定することで、外部からの意図しないアクセスを防ぐことができるようになるはずです。
その状態であれば、仮想マシンを作成したとしても悪用されることはほぼなくなるでしょう。
そこまで持っていけたところで、次回は仮想マシン、Google Computing Engine(GCE)インスタンスの作成について説明していきます。
【次回】
【前回】