はじめに
VPCのようなCloud環境を利用するにあたり、セキュリティの観点からアクセスログを保管したいといった要件があるかと思います。
IBM CloudではVPC環境のネットワークインターフェースに対してFlow Logを使用することでアクセスログを取得することができます。
本稿ではVPC内に構築したWEBサーバーへネットワークロードバランサー経由でアクセスするケースにてFlow Logsを用いてアクセスログを取得する方法を記載します。
作成手順についてはIBM Cloud docsのフロー・ログ・コレクターの作成を参考に記載しています。
Flow Logsとは
IBM Cloud Flow Logs for VPC を使用すると、VPC内のネットワーク・インターフェースを出入りするインターネット・プロトコル(IP)トラフィックについての情報の収集、保管、表示が可能になります。
VPCもしくはサブネット、インスタンス、インターフェースの中から指定した範囲でFlow Log Collectorによりログを取得し、ICOS上にディレクトリ形式でログの保存が実行されます。
作成時に指定したVPCの取得範囲に対して、5分おきにアクセスログを取得し、ICOSへ保存します。ネットワークインターフェース毎に100KBを超えるログが発生した場合はさらに頻度をあげてログが取得されます。
Flow Logsで取得可能なログの種類についてはフロー・ログ・オブジェクトの表示を参照ください。
ログの取得手順
本稿ではVPC内に構築したWEBサーバーへネットワークロードバランサー経由でアクセスするケースにてFlow Logsを用いてアクセスログを取得する方法を記載します。
最終的にWEBサーバーにアクセスしたローカルPCのGlobal IPをICOSで確認することを目標とします。(下の図のx.x.x.xにあたるIP)
手順は以下のとおりです。
- Flow Logインスタンスの作成
- WEBサーバーへのアクセスログの確認
事前準備
以下の環境は事前に作成済みなものとします。
- VPC(jp-tok) : vpc-tok
- 仮想サーバー(OS : CentOS, 2corex4GB, tok04) : vsi-web-tok
- Object Storage : icos-instance, バケット(smart tier, jp-tok) : fl-bucket
- ネットワークロードバランサー(public) : nlb-tok
仮想サーバーはWEBサーバーとしてアクセスできるように、あらかじめhttpdをインストールし、サーバーのIPアドレスを表示する簡単な設定をします。
WEBサーバーは外部からアクセスできるようにNLBに登録しておき、NLB経由でアクセスできるように設定します。
また、Flow Logのインスタンス作成にはVPCとICOS間のS2S認証でライター以上の権限が必要ですのであらかじめ設定しておいてください。
設定方法はフロー・ログ・コレクターの作成 : UI の前提条件を参考に設定してください。
1. Flow Logインスタンスの作成
まずはFLow Logのインスタンスを作成します。
ポータルのホーム画面左上のメニューボタンからインフラストラクチャー
→ネットワーク
→フロー・ログ
を選択します。
作成済みFlow Logの一覧から右上の青い作成
ボタンから新規Flow Logを作成します。
Flow Log作成の際に設定する項目は以下の通りです。それぞれの項目で事前に作成したVPC, ICOSの名前を選択してください。
項目 | |
---|---|
名前 | fl-collector(任意の名前) |
ターゲット・サービス | VPC |
仮想プライベートクラウド | vpc-tok |
Cloud Object Storageインスタンス | icos-instance |
バケット | fl-bucket |
作成時に権限が足りていない場合はICOSインスタンスの選択ができなくなります。
必要なS2S権限を追加後、再度試してみてください。
Flow Logのログの取得範囲として「VPC・サブネット・インスタンス・インターフェース」
から選択できます。
VPCを選ぶと指定したVPC内のネットワークインターフェースのログを取得でき、サブネット→インスタンス→インターフェースの順に取得する範囲が狭くなります。
今回はVPCを選択していますが、取得ログを1つのインスタンスに限定したい場合やインスタンスが1つのサブネットに限定したい場合はターゲットサービスにサブネットやインスタンスを選択してください。
インスタンス作成後からすぐにログの取得が開始され、ICOSにログが保管されます。
Flow Log作成時に設定したバケットを開くと以下のようにログデータが保存され始めます。
初期設定ではICOSはディレクトリ表示になっていないため、右上のファイルマークを選択し、ディレクトリ表示に変更することで取得したいログを見つけやすくなります。
ディレクトリ表示すると一番上のディレクトリのibm_vpc_flowlogs_v1
が表示されます。
ここからリージョン、インスタンス、日時等をディレクトリを指定することで対象のログを確認することが可能です。
2. WEBサーバーへのアクセスログの確認
事前準備で作成していたWEBサーバーにアクセスして、その時間帯にログが発生していることを確認します。
ローカルPCからNLBのパブリックIPを使ってWEBサーバーにアクセスします。
flow logのログは通常だと5分おきに生成されるため、5分ほど置いてからicosのバケットを確認します。
今回はWEBサーバーにアクセスしてから1.WEBサーバーのログ、2.NLBのログの2つを確認してみます。
2-1. WEBサーバーのログ
ICOSのバケットから対象となるWEBサーバーのログを探します。
一番上のibm_vpc_flowlogs_v1
からaccount
→region
→vpc-id
→subnet-id
→endpoint-type
→instance-id
→vnic-id
→record-type
→year
→month
→day
→hour
→stream-id
の順番に指定します。
vpc-id
やsubnet-id
等のidはポータルから対象のインスタンスに当てはまるidが確認可能なため、適切なものを選択してください。
WEBサーバーにアクセスした時間帯のファイルを取得し、中身を確認してみるとflow logの5分間分のアクセスデータが保存されていることが確認できます。
量が多い場合はIPアドレス(今回はLocal PCのGlobal IP)で検索をかけることで目的のログを見つけることが可能です。
アクセスログを確認するとWEBサーバーにアクセスした時間帯で正しくGlobal IPが保存されていることが確認できます。
また、WEBサーバーはパブリックIPをつけていないため、action
の項目が全てaccepted
となっていることが確認できます。
2-2. NLBのログ
ICOSのバケットから同様にNLBのログを探します。
ディレクトリから探すことはVSIと同じですが、NLBはポータルからinstance-id
を確認する方法が見つかっていません。(見つけたら追記します)
ですが、ICOSの中にはNLBに当てはまるinstance-id
のディレクトリは存在するのでログファイルを確認する等の方法で特定してください。
NLBもVSIと同様にLocal PCのGlobal IPからのアクセスが確認できました。
また、NLBはパブリックIPをつけていますがセキュリティグループの機能によってアクセスを制限しているため、VSIと違いaction
のほとんどがrejected
となっていることが確認できます。
そのため、アクセス成功したIP一覧を調べるにはaccepted
の文字検索することで絞り込めます。
ALBのログでは外部IPからALBのPrivate IPにNATされていることが確認できます。
また、ALBはVPC内部からもアクセスがあるためaccepted
で外部IPの検索をかけることはできません。
まとめ
本稿ではVPC内のWEBサーバーに対して外部からアクセスをした際のアクセスログをFlow Logで取得する方法を記載しました。
今回はNLB経由のVSIのログを取得しましたが、Floating IP経由のVSIやIKS、ROKS、そのALBのログも同様に取得できます。
ICOSの保管ポリシーと組み合わせることで任意の期間アクセスログを保管し、問題があった際に指定の日時のログを取得する、といった使用方法も可能です。
Flow Logの導入は非常に容易なので皆さんもぜひ利用してみてください。
参考記事