要旨
ロギングの手法として、VCN Flow Logsを用いてVCN (Virtual Cloud Network, AWSのVPCに対応) を流れるパケットを捕捉し、記録することができる [1]。2023年10月10日のアップデートでは、ロギングの対象をサブネット内のVNICだけでなく、特定のVNICに絞ったり、VCN内の全てのVNICに拡張したりできるようになった [2]。今回、特定のコンピュート・インスタンスのVNICを対象にICMPの通信を捕捉する設定を行い、実際にログを確認した。
手順
コンピュート・インスタンスが既に作成してある前提で、ローカルPCからIPアドレスに向けてpingコマンドを実行する。
手順1. ログ・グループを作成する(手順3の時点でも作成可能)
フロー・ログの格納先であるログ・グループを作成する。メニューの「監視および管理」> 「ログ・グループ」を選択し(図)、遷移先のページで「ログ・グループの作成」ボタンをクリックする。
コンパートメントを選択し、名前と説明を入力して作成ボタンをクリックする(図)。
ログ・グループの作成が完了するとログ・グループの詳細画面に遷移する(まだログが格納されていないので「No log sources found to be read」のメッセージが表示されている)。
手順2. 取得フィルタを作成する
取得フィルタはパケット・キャプチャの際に、プロトコルや宛先ポートなどを絞り込むルールを定義するコンポートネントである。この手順で作成する取得フィルタを、ログを有効化するときに引き当てることができる。
メニューから「ネットワーキング」 > 「ネットワーク・コマンド・センター」 > 「取得フィルタ」を選択し、遷移先の「取得フィルタの作成」をクリックする。
名前とンパートメントに加え、以下を選択/入力する。
- フィルタタイプ:「フロー・ログ取得フィルタ」(VTAPはパケットを複製できるサービスで、このサービスでも取得フィルタでルールを設定する。実は元々VTAPのための取得フィルタが今回のアップデートでVCN Flow Logsに応用された格好。使い方の例についてはOCIチュートリアルを参照のこと)
- サンプリング・レート:「100%」
- ルール(順序番号1)
- トラフィック配置: 「すべて」
- 包含/除外: 「含める」
- ソースのIPv4アドレス: 自分のPCのグローバルIPアドレス(インターネットで提供されているIPアドレス確認サービスを用いると簡単)
- 宛先のIPv4 CIDRまたは接頭辞: 指定しない(後ほどログを有効化する際に監視対象のVNICを指定するため不必要)
- IPプロトコル:ICMP
- ICMPタイプ: 「8―エコー」
- ICMPコード: 「0―エコー・リクエスト」
作成ボタンをクリックすると、取得フィルタの詳細画面に遷移する(図)。入力したルールが取得フィルタに反映され、ステータスが有効になっていることを確認する。
手順3. フロー・ログを有効化する
メニューの「監視および管理」> 「ログ」を選択し、遷移先のページで「サービス・ログの有効化」ボタンをクリックする。
表示されるウィザードで、リソース・コンパ―トメントやログ名を設定し、その他の項目については次のように入力/設定し、「ログの有効化」ボタンをクリックする(図も参照のこと)。
- サービス: 「Virtual Cloud Network - Flowlogs」
- Resource Level: 「Virtual Network Interface Card (VNIC)」
- リソース: pingを送るインスタンスのプライマリVNICを選択
- ログカテゴリ: Flow Logs - vnic records
- Capture filter: 手順3で作成したフィルタを選択
手順4. 標的のインスタンスにpingを打つ
NSG (Network Security Group) か、ネットワーク・セキュリティ・リストでICMP Type8のイングレス通信をステートフルで許可するルールを追加した後、PCからpingコマンドを叩く(NSGによる通信の許可の方法は補遺を参照)。
ping -c 5 <標的のインスタンスのパブリックIPアドレス>
手順5. ログを確認する
作成したログの詳細画面を表示すると、pingを叩いた時間にtypeが「vcn.flowlogs.DataEvent」のログが記録されている(図)。
ログをドリルダウンして詳細を観察すると、合計パケット数やByteサイズ、ソースIPアドレスなどがJSON形式で記録されていることを確認できる(図)。
最後に
VCN Flow Logsで集めたログはオブジェクト・ストレージに保管したり、ログ・アナリティクス(Logging Analytics)サービスを用いて分析を行うことができる。今度使ってみたい。
補遺
NSGの設定方法
OCIではデフォルトでVCN内の全ての通信トラフィックが禁止されているため、許可したい通信についてルールの設定を行う。方法は二つあり、一つはセキュリティ・リストを用いる方法で、もう一つはNSGを用いる方法である。前者はサブネット内の全てのVNICが従うルールを定義し、後者はクラスを作成しそのクラスに属するVNICが従うルールを定義する。前者を用いる方法は多少簡単ではあるが、ルールを設定したことを忘れてしまうと、ルールを適用したかったVNIC以外に対しても望まない通信を許可してしまいかねないため、ここでは後者による設定方法を紹介する。
手順1. NSGを作成する
ICMPのエコー要求の受信を許可するルールを紐づけたNSGを作成する。メニューから「ネットワーキング」 > 「仮想クラウド・ネットワーク」 > 標的のインスタンスが配置されたVCNを選択する。遷移先の画面で「Resources」の項目から「ネットワーク・セキュリティ・グループ」を選択し(図)、「ネットワーク・セキュリティ・グループの作成」ボタンをクリックする。
NSGの名前を入力し、「次」の画面で以下のように入力/設定を行い「作成」ボタンをクリックする。
- ステートレス: チェックしない
- 方向: 「イングレス」
- リソース・タイプ: 「CIDR」
- ソースCIDR: PCのグローバルIPアドレス(/32で指定)
- IPプロトコル: 「ICMP」
- タイプ: 8
- コード: 記入しない
手順2. 作成したNSGを標的インスタンスのVNICに紐づける
標的インスタンスの詳細画面を表示する。画面左下のリソース・メニューから「アタッチされたVNIC」を選択する(図)。
ネットワーク・セキュリティ・グループの項目から編集をクリックする(図)。
表示されるウィザードで、先ほど作成したNSGを選択して、「変更の保存」ボタンをクリックする(図)。
NSGの項目が変更されていること確認する(図)。ローカルPCからのpingが通るようになった。
参考文献
[1] 『VCNフロー・ログ』Oracle Cloud Infrastructureドキュメント (https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/vcn-flow-logs.htm)
[2] 『New Release of VCN Flow Logs』Oracle Cloud Infrastructure Documentation / Release Notes (https://docs.oracle.com/en-us/iaas/releasenotes/changes/2be233e2-8717-495a-ba1e-cc96aa1663c3/)