ソロソロ来るゾ! Google Cloud Platform!

第3回Google Compute Engineのファイアウォール、ロードバランサとCloud DNS

Google Compute Engineのファイアウォール

Google Compute Engineのファイアウォールでは各インスタンスに対して許可するINBOUNDトラフィックを設定します。ファイアウォールは明示的に許可しない限り外部から接続できないようになっています。

デフォルトのネットワーク(プロジェクト作成時にあらかじめ用意されているdefaultという名前の10.240.0.0/16のネットワーク)のファイアウォールルールは以下のとおりです。

デフォルトのネットワークのファイアウォールルール
名前 ソースタグまたはIP範囲 許可対象プロトコルまたはポート ターゲットタグ
default-allow-icmp 0.0.0.0/0 icmp すべてのターゲットに適用
default-allow-internal 10.240.0.0/16 tcp:1-65535; udp:1-65535; icmp すべてのターゲットに適用
default-allow-rdp 0.0.0.0/0 tcp:3389 すべてのターゲットに適用
default-allow-ssh 0.0.0.0/0 tcp:22 すべてのターゲットに適用

ファイアウォールとして特徴的なのはターゲットタグによる指定が可能な点です。

Google Compute Engineのファイアウォールはネットワーク単位ではなくインスタンス単位で適用されるものなので、インスタンス間の内部通信を明示的に許可しています。

ターゲットタグの使い方、使われ方

Developers Consoleでのインスタンス作成時に、ファイアウォール設定でHTTPトラフィックを許可するチェックを付けるとインスタンスにhttp-serverタグが付与されますHTTPSトラフィックを許可するにチェックを付けるとhttps-serverタグが付与されます⁠⁠。

同時にファイアウォールにhttp-serverhttps-serverタグをターゲットタグとした許可ルールが自動的に設定されます。

図1 インスタンス作成画面
図1 インスタンス作成画面
図2 インスタンスにタグが付与されている様子
図2 インスタンスにタグが付与されている様子

自動的に追加されるファイアウォールルールは以下のとおりです。

自動的に追加されるファイアウォールルール
名前 ソースタグまたはIP範囲 許可対象プロトコルまたはポート ターゲットタグ
default-allow-http 0.0.0.0/0 tcp:80 http-server
default-allow-https 0.0.0.0/0 tcp:443 https-server

ターゲットタグを活用することで、管理サーバ、バッチサーバ、など意味単位でのファイアウォールルール設定ができるようになりとても便利ですね。

利用上の注意事項

明示的に通信できないトラフィックがあります。

  • Port 25(SMTP)
  • Port 465 or 587(SMTP over SSL)(Googleの特定のIPアドレス宛を除く)
  • AH、ESP、SCTP、TCP、UDP以外のプロトコル

このためインスタンスからメールを送信したい場合はSendgridなどの外部サービスを併用することになります。

また通信が確立して10分間無通信状態が継続するとファイアウォールが自動的に接続を切断します。この挙動で問題がある場合はTCPキープアライブを利用する必要があります。Linuxのインスタンスで設定する場合は以下のように設定します。

$ sudo sysctl -w net.ipv4.tcp_keepalive_time=60
$ sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60
$ sudo sysctl -w net.ipv4.tcp_keepalive_probes=5

Google Compute Engineのロードバランサ

Google Compute EngineのロードバランサにはHTTP負荷分散(HTTP Load Balancing)とネットワーク負荷分散(Network Load Balancing)の2種類があります。

HTTP負荷分散(HTTP Load Balancing)

HTTP負荷分散(HTTP Load Balancing)を使うとPort 80または8080宛のHTTP通信を分散することができます。HTTPに特化したL7ロードバランサです。HTTPSは非対応なので、HTTPSが必要な場合はネットワーク負荷分散(Network Load Balancing)を利用します。

分散方式はRPS(Requests Per Second)かCPU利用率の2種類から選択できます。HTTP疎通でのヘルスチェックを利用した切り離しも設定可能です。

仕様上の特徴としてはロードバランサに対してFQDNではなくIPアドレスが設定されます。そのため特別なDNSを使わなくてもZone Apexでのアクセスにも対応することができます。

HTTPロードバランサの凄いところは、ウォームアップなしでシームレスにスケールするところです。AWSのELBの場合はシームレスにスケールアップしないためトラフィックが急増する直前やメンテナンス明けなどに事前のウォームアップを申請して実施してもらう運用対応が必要でしたが、Google Compute Engineではこのような運用対応は不要になりそうです。

機能面ではURLマップ機能が特徴的です。この機能を使うことで、特定URL配下を処理するためのインスタンスグループを個別に指定できます。

ネットワーク負荷分散(Network Load Balancing)

ネットワーク負荷分散(Network Load Balancing)を使うと、任意のポート宛のTCP/UDP通信をロードバランスすることができます。

こちらもロードバランサに対してFQDNではなくIPアドレスが設定されます。URLマップ機能のような気の利いたものはないのですが、セッションアフィニティがクライアントIPクライアントIPとプロトコルから選べます。なおネットワーク負荷分散もヘルスチェックができるのですが、HTTPによるヘルスチェックになります。

Cloud DNS

Cloud DNSはDNSホスティングサービスです。Developers Consoleやgcloudコマンドを使ってDNSを管理できます。

以下のレコードタイプが利用できます。またワイルドカードでの指定*.example.comのような指定方法)に対応しています。

  • A
  • AAAA
  • CNAME
  • MX
  • NAPTR
  • NS
  • PTR
  • SOA
  • SPF
  • SRV
  • TXT

APIベースで操作できるDNSホスティングサービスはまだ数が少ないので重宝しそうです。AWSのRoute53のようなヘルスチェックを組み合わせたGSLB(Global Server Load Balancing)機能はありませんが、今後の拡充に期待しましょう。

公式ブログができました!

今までGoogle for Work公式ブログ内のコンテンツとしてGoogle Cloud Platformのニュースが配信されていましたが、2015年2月23日(月)にGoogle Cloud Platformの公式blogが公開され、Twitterアカウントも作成されました。

ニュース、事例、コミュニティ情報などGoogle Cloud Platform関連の情報が多数配信されているので、ぜひウォッチしてください。

次回は

次回はデータベース系のサービスを紹介します。MySQLサービスであるCloud SQLと、独自のKVSであるCloud Datastoreを紹介する予定です。

おすすめ記事

記事・ニュース一覧