Google Compute Engineのファイヤーウォールを理解する #gcpja

2014.08.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

※ 本記事はこちらのブログ記事を転載したものです。

ども、大瀧です。個人でGCP(Google Cloud Platform)とその仮想マシンサービスであるGCE(Google Compute Engine)をちまちま触ってブログにまとめていたら、ボスから声がかかったので載せてみました。

Google Compute Engineには、AWSのセキュリティグループに相当するファイヤーウォール機能があります。今回は、AWSセキュリティグループとの比較と基本的な使い方をご紹介してみます。

ファイヤーウォールの概要

名前の通り、VMインスタンスと他のホストとの通信を制御するセキュリティ機能です。OSには依存せず、VMインスタンスの外側、GCEのネットワークインフラで動作します。

AWSセキュリティグループとの比較

できることはほぼ同等です。共通の機能について以下の通り示します。

  • セミステートレスなので片方向の定義でよい
  • 複数のVMインスタンスに共通の設定を適用できる
  • IPアドレスに拠らないターゲット指定ができる
  • 拒否ルールは設定できない

AWSセキュリティグループは、ファイヤーウォールのルールセットアクセス許可のターゲットをセットにして1つのグループ設定として扱います。そのため、「特に許可するルールは必要ないが、ターゲットとしてのみ指定したい」という場合に「ルールセットが空のグループ」を設定することになってしまい、なんだかなぁと思うこともありました。図示するイメージとしては、通信先のグループ設定で通信元ホストおよびポート番号を指定する感じです。

AWSセキュリティグループのイメージ
gce-firewall01

一方、GCEファイヤーウォールでは、通信元/通信先のターゲットをルールセットとは別に定義します。ターゲットはタグとして、VMインスタンスにあらかじめ付与しておきます。そして、ファイヤーウォール ルールの設定時にルールセットとタグを組み合わせて指定します。図のイメージとしては、タグのついたVMインスタンス同士をファイヤーウォール ルールで結ぶような感じです。送信元は、タグの他に任意のCIDR(0.0.0.0/0など)を指定することももちろん可能です。

GCEファイヤーウォールのイメージ
gce-firewall02

雑感としては、AWSセキュリティグループの方がより簡素な作り、GCEファイヤーウォールは少し複雑ですが、従来のネットワーク機器のファイヤーウォール設定に近く、程よく抽象化されている印象です。GCEファイヤーウォールは、AWSセキュリティグループの構成に慣れている方は少し違和感を感じるかもしれません。対して、ネットワーク機器に慣れている方には取っ付きやすそうです。

では、ここからは設定方法を見ていきましょう。

ファイヤーウォールルールの作成

ファイヤーウォール ルールの一覧は、Developer Consoleのネットワークのプロパティ画面にあります。

gce-firewall13

ルールの追加は、一覧の右側にある[新規作成]リンクをクリックします。

gce-firewall08

任意の名前、説明と以下の要件を入力します。

  • ソースIPの範囲 : ルールで許可する送信元を指定します。初期値は0.0.0.0/0(全ホスト)、空欄の場合は許可なしになります。ソースタグとはorで評価されるため、ソースタグで送信元を絞る場合には空欄にします。
  • プロトコルとポート : 許可するプロトコル(tcp/udp/icmp)とポート番号をコロン(:)で区切って記述します。複数指定はセミコロン(;)区切り、ポート番号の複数指定はカンマ(,)、範囲指定はハイフン(-)で記述できます。
  • ソースタグ/ターゲットタグ : タグを付与したVMインスタンス単位で送信元/送信先の許可ホストを指定します。まだ未設定の架空のタグを指定することも可能です。

以下の例では、web-serverタグのついたVMインスタンスからdb-serverタグのVMインスタンスへのMySQL接続(TCP 3306番ポート)を許可するルールnetwork1-allow-mysqlを作成しています。

gce-firewall09

ルールにタグを設定している場合は、適用するVMインスタンスにタグが適用済みかを確認します。タグは、VMインスタンスのプロパティ画面の[タグを追加]リンクで追加、設定できます。

gce-firewall14 gce-firewall15

既定のファイヤーウォール ルール

GCEプロジェクトには、既定でdefaultネットワークオブジェクトが用意されます。defaultネットワークには、以下3つのルールが定義済みです。

  • default-allow-internal : VMインスタンス同士の全送受信を許可
  • default-allow-icmp : 任意のホスト(0.0.0.0/0)からのICMP通信(pingtraceroute)を許可
  • default-allow-ssh : 任意のホスト(0.0.0.0/0)からSSH通信を許可

gce-firewall07

gce-firewall06

gce-firewall03

既定のルールはあまりファイヤーウォールを意識する必要のない緩めのルールだと思いますので、必要に応じてSSHのアクセス元を絞るなど、変更を加えても良いでしょう。

また、追加で作成するネットワークオブジェクトには既定のルールが作成されないため、必要の応じてユーザーが自分でルールを追加する必要があります。

VMインスタンス作成時のルールの自動追加

VMインスタンスの作成画面には、以下のファイヤーウォール設定が表示されます。

gce-firewall10

これらのチェックボックスをオンにすると、対応する以下のルールが未作成であれば、ルールが自動作成されます。

  • <ネットワーク名>-allow-http : 任意のホスト(0.0.0.0/0)からのHTTP 80番ポートのアクセスを許可
  • <ネットワーク名>-allow-https : 任意のホスト(0.0.0.0/0)からのHTTPS 443番ポートのアクセスを許可

gce-firewall04gce-firewall05

VMインスタンスへのタグの付与も自動で行われます。

gce-firewall16

まとめ

GCEのファイヤーウォール機能の概要、設定方法をご紹介してみました。セキュリティ対策として、必ず検討するところだと思いますので、しっかり理解して使いこなしたいですね。

参考URL