OCI Observability and Management for Networking - パート1 - 監査ログを利用した変更点の発見 (2021/07/30)
OCI Observability and Management for Networking - パート1 - 監査ログを利用した変更点の発見 (2021/07/30)
投稿者:Ben Woltz
はじめに
このブログ・シリーズでは、Oracle Cloud Infrastructure (OCI) の Observability and Management サービスを利用して、ネットワーク・リソースに適用する方法を例を挙げて説明します。 以下は、私がお客様から受けた3つの一般的な要望で、今回のブログと今後のブログで詳しく説明します。
- パート1 - 問題の原因となりうるOCIの変更を、誰が、何を、いつ、どのようにして見つけることができますか?
- パート2 - 今後、変更が加えられた場合、どのようにして通知を受けることができますか?
- パート3 - ネットワーク接続がダウンしたり、バックアップパスでフェイルオーバーが発生した場合、どのようにして通知を受けることができますか?
今回のブログのパート1に入る前に、これから取り上げるOCIの関連サービスを簡単に確認しておきましょう。
監査サービスと監査ログ
OCI 監査サービスは、サポートされているすべての OCI パブリック・アプリケーション・プログラミング・インター フェース(API)エンドポイントへのコールを自動的に記録し、監査ログに記録します。 これには、OCI コンソール、コマンドラインインターフェイス(CLI)、ソフトウェア開発キット(SDK)、その他の OCI サービスによって行われたすべての API 呼び出しが含まれます。ログイベントの情報は以下の通りです。
- イベント時間
- ユーザー
- リソース
- アクション (GET, POST, PUT, PATCH, DELETE)
- タイプ
監査ログは、GET、POST、PUT、PATCH、DELETEの各アクションをサポートしています。これらは、サーバーとデータを送受信するための5つの最も一般的なHTTP(Hypertext Transfer Protocol)メソッドであり、CRUD(Create, Read, Update, and Delete)操作に対応しています。
- POST - 作成
- GET - 読み取り
- PUT - 更新/置換
- PATCH - 更新/修正
- DELETE - 削除
監査ログのイベントは、OCIコンソール、API、SDK for Javaを使って見ることができます。また、JavaScript Object Notation (JSON)ファイルにエクスポートして、自分のシステムで使用することもできます。
OCI Audit Serviceと監査ログの詳細については、以下のリンクを参照してください。
https://docs.oracle.com/en-us/iaas/Content/Audit/Concepts/auditoverview.htm
https://docs.oracle.com/en-us/iaas/Content/Logging/Concepts/audit_logs.htm
問題を引き起こす可能性のあるOCIの変更を、誰が、何を、いつ、どのようにして見つけることができますか?
監査ログは、OCI リソースのすべてのタイプに対する変更をチェックすることができますが、この例では、セキュリティリストのルール変更に焦点を当てます。 例えば、今朝、オンプレミスの拠点からパブリックインターネットを経由してBastionホストへのSecure Shell (SSH)セッションを確立することができましたが、今はそれが機能していないとします。 Bastionホストのインスタンスを確認したところ、動作しており、オンプレミスのインターネット接続を確認したところ、動作しており、トラフィックを通過しており、Bastionホストのパブリックインターネットプロトコル(IP)アドレスにpingを打つことができました。 何かが変わったと思われますが、何が変わったのかはわかりません。 以下の手順は、OCI監査ログを見て、この障害の原因となるような変更があったかどうかを確認するための概要です。 まず、監査ログ自体から変更点を見つけ、次に、より複雑なシナリオのために変更点を強調するJSON Diffツールを使用する方法を見ていきます。
監査ログを使った変更点の確認
- OCI コンソールから Observability & Management >> Audit にアクセスして Audit log ページを表示し、正しい Compartment を選択することを確認します。
- 今回の例では、検索する時間帯がわかっているので、「今日」の時間でフィルタリングします。
- 変更のみを検索したいので、Request Action Type を "PUT", "POST", "PATCH", "DELETE" にフィルタリングし、新規、変更、削除のアクションのみを表示します。 GET "アクションタイプは、誰かがレコードを読んだときに記録されるので、それらを見ることには興味がありません。
上の図を見ると、フィルターからの出力で、セキュリティリスト上の「PUT」アクションが特定されています。このアクションは、たまたまbastionホストが存在するパブリックサブネットに適用されているので、これが原因である可能性があります。 この「PUT」アクションが行われたユーザーとイベントの時間も表示されているので、何が変更されたかだけでなく、誰がいつ行ったかも分かります。
- この変更の詳細を見るには、右端の下矢印をクリックして、このログエントリの詳細をデプロイしてみましょう。 出力はJSON形式で、コンパートメント名やID、リソースIDなど、多くの詳細情報が含まれていることに気づくでしょう。
- 変更された内容の詳細を見るには、「stateChange」の隣にある「+」をクリックします。 「stateChange」の下に「current」と「previous」のセクションがあります。「現在」では、変更後のこのセキュリティリストの詳細が表示されます。 「前」では、この変更前のセキュリティリストの詳細が表示されます。 これらの違いを調べて比較することで、何が変更されたのかを正確に知ることができます。
- 「ingressSecurityRules」>>「0」は「previous」の状態で、リストの最初のセキュリティルールに対応しており、送信元に「0.0.0.0/0」があり、「tcpOptions」にはポート22が表示されています。 つまり、この変更前は、すべてのソースIPからTCPポート22(SSH)のトラフィックが許可されていたことになります。
- その同じルール「0」を「現在」の状態で見てみると、ソースが「10.0.0.0/8」でTCPポート22になっていることがわかります。 つまり、この変更により、TCPポート22(SSH)のトラフィックは、プライベートな10.0.0.0/8ネットワーク内のソースIPからのみ許可されるようになったのです。
以上の手順で、UTC時間の19時34分39秒に、ユーザーben.woltz@oracle.com が、bastionホストが存在するパブリックサブネットのセキュリティリストを変更し、以前はすべてのソース0.0.0.0/0を許可していたSSHソースを10.0.0.0/8に制限したことがわかり、インターネットからのSSHが機能しなくなった原因と考えられます。
JSON Diff Tool を使用した変更箇所の確認
前述の例では、チェックした一番最初のセキュリティ・リスト・ルール(「0」と表示されている)にあったので、何が変更されたかを特定するのは非常に簡単でした。 しかし、チェックすべき監査ログ・エントリのデータ量が非常に多く、何が変更されたかを視覚的に確認するために各項目を手動でクリックするのに長い時間がかかるシナリオがあるかもしれません。 例えば、セキュリティリストに100個のルールがあり、変更されたルールが最後のものだった場合、変更されたものを見る前に、現在のルールと前のルールの両方を含めて100個すべてをクリックしなければなりません。 このシナリオでは、2つのJSON出力間で何が変更されたかを非常に迅速に表示するJSON Diffツールを使用できます。 以下の例ではextendsclass.comのツールを使用していますが、他のツールを使用しても構いません。 監査ログから「現在」のセクションをコピーしてJSON Diffツールに貼り付け、次に監査ログから「以前」のセクションをコピーしてJSON Diffツールに貼り付けると、JSON出力のどの部分が2つの間で異なっているかを正確に表示します。
- 監査ログで「現在の」項目を左クリックし、「値のコピー」を選択すると、「現在の」項目とその下のすべての項目がクリップボードにコピーされる
- ブラウザのタブを開き、https://extendsclass.com/json-diff.html にアクセスする
- 2つのボックスのどちらかに出力を貼り付けます。 これは「現在」または変更後の項目なので、右のボックスに貼り付け、「前」または変更前の項目は左のボックスに貼り付けて、前が左、後が右になるようにします。
- 監査ログで、「前」の項目を左クリックして、「値のコピー」を選択すると、「前」の項目とその下のすべての項目がクリップボードにコピーされます。
- JSON Diffツールが表示されているブラウザのタブに戻ります。
- 出力結果をもう一方のボックスに貼り付ける
- ボックスの下にあるJSON比較セクションで、「Next diff」ボタンをクリックします。
- 2つのJSON出力の違いは、JSON比較セクションの下のボックスで強調表示されます。 複数の変更がある場合は、[次のdiff]をクリックしてサイクルを続けることで、すべての変更を確認することができます。 下の例では、上の監査ログで手動で確認したのと同じ変更がハイライトされています。
このシリーズのパート2では、この変更に対する通知を設定する方法を説明します。これにより、今後このような変更があった場合に、積極的に通知を受けることができます。
コメント
コメントを投稿