はじめに
システムを安全に運用していくためには、オンプレミスと同様、パブリック・クラウドにおいても リソースの操作の監視、管理は重要です。AWSでは CloudTrail
、Azureでは Activity Log
が提供されているように、Oracle Cloud Infrastructure (OCI) でも アクティビティ監視のためのサービスとして、Audit (監査)
があります。
Audit (監査) は 昔からあるサービスではありますが、アップデートされている部分もあるので、改めて本記事では「OCI でのアクティビティ監視ってどうやるの?」と思われている方に向けて 解説していきたいと思います。
- index:
Audit (監査) とは
まずはじめに、概要のお話です。Audit (監査) は、元々は独立したサービスでしたが、2020年秋頃に Logging というサービスが提供された際に、Logging のなかの1機能のような立ち位置になりました。この際、ログの保持期間のデフォルト値が変わるなど、細かな変更はありましたが、基本的な機能は変わっていません。
-
概要
- OCI上の 全てのAPIコールを自動的に記録するサービス
- デフォルト有効化されており、無償 で利用が可能
- 記録された情報 (監査ログ) は 365日分 保持される(*1)
- 全てのサービスでサポートされているが、オブジェクト・ストレージ・サービスのうち、"オブジェクト" に関連したイベントは対象外(*2)
(*1) 期間は変更不可。保存要件に満たない場合、ユーザ側でオブジェクト・ストレージに保存するなどの対応が必要です
(*2) オブジェクト関連のログが必要な場合、Logging でサービス・ログを有効化することを検討してください
ログで確認できる内容
監査ログは JSON 形式のドキュメントで保存されます。各項目の詳細については、OCI ドキュメント:"監査ログ・イベントの内容" に記載の通りです。
様々な項目がありますが、ここでは 一部だけピックアップして紹介します。
-
source
: イベントを生成したリソース名
例."instancePool-01", "testBucket" など -
time
: イベントの発生した時刻
例."2021-06-11T10:20:29.641Z" など -
data
.eventName
: このイベントを生成した API 操作名
例."GetInstance", "GetBucket" など -
data
.message
: 操作によって起きた内容の説明
例."GetInstancePool succeeded", "Bucket details retrieved." など -
data
.identity
.ipAddress
: リクエストの送信元 IPアドレス
例."10.0.30.xx", "129.2xx.xx.xx" など -
data
.identity
.principalId
: リクエストを行ったプリンシパルのOCID
例."ocid1.user.oc1..aaaaag~" など -
data
.identity
.principalName
: プリンシパルIDに紐づくユーザ名またはサービス名
例."autoscaling", "dev-user1" など -
data
.request
.action
: リクエストのHTTPメソッド
例."GET", "DELETE", "POST" など -
data
.request
.headers
: HTTPヘッダーのフィールドとその値
ここで挙げたように、ログからは 誰が(何のサービスが)どのリソースに対して、どのような操作を、いつ行い、何が発生したのか、など、基本的な内容が確認できることが分かります。(当たり前ですね…!)
GUIで監査ログを確認する
監査サービスは、OCI コンソール・メニュー
→ 監視および管理
→ 監査
からアクセスできます。
このページでは、監査ログの検索、その結果の閲覧、エクスポートが行えます。また、下記項目を用いてフィルタリングが可能です。
なお、監査ログは、操作が行われたコンパートメントに紐づくため、対象の操作がどのコンパートメントで行われたのかを理解し、適切なコンパートメントを選択する必要があります。
-
ユーザー:操作を行ったプリンシパル名
例."autoscaling", "dev-user1" など -
リソース:イベントを生成したリソース名
例."instancePool-01", "testBucket" など -
リクエスト・アクション・タイプ:リクエストのHTTPメソッド
例."GET", "DELETE", "POST" など -
イベント・タイプ:発生したイベントの種類
例."com.oraclecloud.objectstorage.getbucket" など -
カスタム・フィルタ:監査ログに含まれる様々な項目を用いたフィルタ
項目名の入力を開始すると、項目の候補や演算子が自動的に表示され、入力を補助してくれます。 -
時間によるフィルタ:検索対象期間の指定
「過去5分間」「過去15分間」「今日」などの選択肢があります。「カスタム」を選択することで自由な期間を指定できますが、最大14日というレンジの中で指定する必要があります。
検索した結果は、以下のように表示されます。また、検索結果を ログ・データのエクスポート(JSON)
ボタンから エクスポートすることも可能です。
ただし、検索結果は 500件が上限 となっていますので、それ以上のデータを取得したい場合は、CUIの利用をオススメします。
CUIで監査ログを確認する
前述の通り、GUIでの検索は 表示上限が500件といった制約があります。CUIを利用することで、それ以上のログを取得することが可能です。
なお、CUIにおいても検索期間のレンジが最大14日間であるという制約は変わらないため、より長期間でログを取得したい場合は、後述の「監査ログを出力する」を確認してください。
CUIには、Auditのコマンドを利用する方法
と、Logging のコマンドを利用する方法
の 2種類 があります。これは、Audit (監査) サービスが 2020年秋頃に Logging のなかの1機能のような立ち位置になったことに起因します。特に制約がなければ、今後は Logging コマンドの利用するのが良いと思います。
oci audit event list --compartment-id <compartment-id> --end-time yyyy-MM-ddT00:00:00Z --start-time yyyy-MM-ddT00:00:00Z --all
oci logging-search search-logs --search-query "search \"<compartment-id>/_Audit\" | sort by datetime desc" --time-end 2021-03-16 --time-start 2021-02-15 --limit 1000
上記のとおり、Logging のコマンドでは search-logs
というパラメータで、"問合せ構文" というステートメントを指定して ログの問合せを行います。
「問合せ構文なんて知らんがな」という方は、GUIの検索機能でフィルタ項目などを設定した後、検索に変換
というボタンをクリックしましょう。フィルタで設定した内容を構文に変換 してくれます。
監査ログを出力する
GUIやCUIを通じた監査ログの取得は、14日間という制約があるため、長期間のログを取得するには不便です。
まとまった期間のデータを扱いたい場合は、SR(Service Request) で一括取得する方法(要 5〜10営業日)の他に、サービス・コネクタ・ハブで取得/蓄積していく方法 が挙げられます。
サービス・コネクタ・ハブは ざっくり言うと サービス間のデータ連携ができるサービスです。利用する際の 大まかな流れは、下記記事にて詳細に記載してくださっていますので、まずはこちらをご参照ください。
基本的には上記記事の通りですが、監査ログのログ・グループ名は、決め打ちで「_Audt
」となっています。ソースを指定する際は、取得したいコンパートメントと そこに紐づく「_Audit」グループを選択しましょう。
また、下記の画面イメージでは連携先にオブジェクト・ストレージを選択していますが、他にファンクション、ログ・アナリティクスなども選択可能です。
その他、ターゲットに連携する際は、ログ・フィルタ・タスクを指定してフィルタリングをかけたり、ファンクションを実行する、といったことも可能です。
監査ログをOracle Management Cloudで分析する
アドホックな検索であれば、これまでに述べた方法でも問題ないかと思います。しかし、定常的な監査業務や、より俯瞰的、視覚的な分析をしたいと言う場合には、Oracle Management Cloud など、別サービスと連携させることもオススメです。
少し前の記事になりますが、Oracle Cloud Infrastructureの監査ログをOracle Management Cloudで分析する という記事にて、詳しく記載してくださっているので、是非ご参照ください。
おわりに
システムの運用・監視という観点では他にも ネットワーク監視、OS監視、アプリケーション監視といった観点が挙げられますが、本記事では、"操作履歴の監視(監査)" にフォーカスして機能を紹介しました。
もちろん、その他の監視項目に対しても、様々な有用なサービスが提供されていますので、興味があれば是非調べて活用していただけると幸いです。