はじめに
PowerVSのNetwork Security Groups(NSG)機能がGAしたので試してみます。
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-nsg
新規に作成したPER対応ワークスペースで利用可能です。既存ワークスペースは6月までに順次対応するようです。
名称は同じですが、VPCのSecurity Groupsとは仕様が異なります。(どちらかというとVPCのACLに似ていますが、それとも少し違う部分があります。)
主な特徴は下記です。詳細は上記docsをご一読ください。
・statelessである。
・denyルールまたはallowルールで制御。
・暗黙的なdenyルールが存在し、どのallowルールにもマッチしなければdenyされる。
・ユーザーが作成したdenyルールは最初に評価され、そこでdenyルールにマッチすればそこでブロックして処理を完了する。(allowルールがあっても評価されない)
・sourceポートとdestinationポートを両方指定。
・inbound(外部からPowerVSに入ってくるパケット)について制御。
・PowerVSから出ていくパケットについては全て許可(outboundルールという概念が無い)。
・1つのネットワークインターフェースは1つのSecurity Groupsのみの対象とできる(同時に2つ以上のSecurity Groupsの対象にできない)。
・定義可能なNSGとNAGは1ワークスペースあたり10個まで。caseで追加の依頼は可能。-> Limitationの項を参照。
・Private Endpoint(161.26.0.0/16、166.8.0.0/14)との通信について考慮する必要がある(後述)。
・Security Groupsで保護できるのはPrivate側インターフェースのみ。Public IP(External IP)が付いているインターフェースはSecurity Groupsの保護対象にできない。
以下、実際に触ってみます。
デフォルトではSecurity Groupsはワークスペースに対し有効になっていない
Security Groupsに対応しているワークスペースでは、左側のメニューのNetworking
の配下にNetwork security groups
のメニューが表示されています。
ただし、Security Groupsが利用可能なワークスペースであっても、デフォルトでは有効になっていません。
上記画面でEnable for workspace
のボタンを押すと、Workspace detailsの設定画面に遷移します。それの一番下にNetwork security groups
のトグルボタンがあるので有効にします。
↓
↓
有効にした直後は、全てallowの状態
デフォルトで、Default local addresses
という名前のSecurity Groupが存在します。
このデフォルトルールは、Allow Anyのルールを持っています。
サーバー作成時、デフォルトでこのSecurity Groupsが選択されています。(後述の手順で自分でSecurity Groupsを作ってあれば、それを選択可能です。)
よって、Security Groupsを有効にした初期状態(ユーザーが何もSecurity Groupsを作っていない状態)で作成するサーバーは、外部からの通信が全て許可された状態でプロビジョニングされます。
Network address groups(NAG)
PowerVSのSecurity Groupsには、Network address groupsという概念があります。これは、送信元のIPアドレス範囲を定義しておく定義体です。
例えば、オンプレミスのIPアドレス範囲が192.168.0.0/16
だったとして、Security GroupのAllowまたはDenyのルールを作成する際に、ソースIPとして192.168.0.0/16
を直接指定するのではなく、例えばon-prem
という名前のnetwork address groupを192.168.0.0/16の値で定義しておき、そのnetwork address groupをルール作成時に指定するような使い方をします。
デフォルトでは全てのアドレス範囲を包括するNetwork address groupsが定義されています。
実装例
Network address groups
送信元になるVSIはx86(Classic Infrastructure)にあるサーバーなので、Network address groupsとしてmyclassic
という名前で10.192.0.0/16
を定義しました。
デフォルトのNetwork address groupsは削除できないのでそのまま残っています。ユーザーが作成したNetwork address groupsに合致しないIP範囲は、全てデフォルトのNetwork address groupsとして扱われます。
Security Groups
Security Groupとして1つ作成しました(mysg
)。デフォルトのSecurity Groupは削除できないのでそのまま残っています。
ClassicからのSSHを許可したいので下記ルールを作成しています。先述したように、ソースのIPアドレスやCIDRを直接入力する事はできず、"Remote"欄で、あらかじめ定義しておいたNetwork address groupsとして指定します。
member
member
は、Security Groupsを適用するネットワークインターフェースです。
まずサーバーを指定し、次の画面でそのサーバーのどのインターフェースを対象とするかを指定します。
なお、memberは同時に2つ以上のSecurity Groupsに属することができません。追加したいmemberが他のSecurity Groupsに属している場合、そちらから削除した上で、目的のSecurity Groupsのmemberとして指定する必要があります。
サーバーの詳細画面でもmemberになっているSecurity Groupsを確認できる。
結果
期待通り、ClassicのVSIからPowerVSのサーバーにSSHが疎通するようになりました。
GUIからルールを作成してmemberを追加したら、数秒程度で反映されました。
Private Endpointとの通信について
Security Groupsを使う際は、ICOSやDNS、NTPといった、IBM Cloudサービスとの通信について考慮する必要があります。
PowerVSからこれらのサービスにアクセスする際は、PowerVSから出ていく向きのoutbound通信ですので、全て許可されます。Security Groupsはstatelessですので、それに対するレスポンスの通信を考慮したルールを作っておく必要があります。docs(この項の⑧)に記載がありますが、下記のIPアドレス範囲となります。
161.26.0.0/16: ICOS、DNS、NTP、Linuxレポジトリ等
166.8.0.0/14: IBM Cloud Databases等
まとめ
PER環境ではオンプレミスからPowerVSに直接ルーティングできるようになりましたが、ネットワーク保護の観点でGRE経由でClassicのGateway Applianceを経由する構成も引き続き多かったです。
inbound方向(外部ネットワークからPowerVSに入ってくる通信)のL4 Firewall機能があればOKという要件であれば、Gateway Applianceの代替として今回のSecurity Groupsをご検討いただけるのではないかと思います。
以上