※本記事は、Nazih Bachir DJOUMIによる"How to send OCI WAF Logs to OCI Logging Analytics and get Security Insights"を翻訳したものです。
Events Service、サーバーレス・ファンクション、Oracle Identity Cloud Serviceを使用して、Oracle Management Cloud Log Analytics Service経由でOracle Cloud Infrastructure Web Application Firewall(OCI WAF)のセキュリティ情報を取得する方法については、以前の記事でご紹介しました。
今回の記事では、Oracle Cloud Infrastructure(OCI)ネイティブの新サービスであるLogging Analyticsを使用して、OCI WAFのセキュリティ情報をもっとすばやく簡単に取得します。このネイティブとは、Oracle Cloud内に統合される機能として一から開発されたことを表しています。
以下の画像は、WAF Activity Overviewを表示したダッシュボードの例です。WAF Activity Overviewをインポートすることで、WAFログから幅広い有用な情報をすぐに確認できます。
この記事の最後に、さらに詳細にまでドリルダウンした別のWAFダッシュボードも紹介しています。これらのサンプル・ダッシュボードはすべて、この記事にリンクされているリソースに含まれています。
それでは、WAFログをOCI Object Storageバケットに転送する方法、転送されたログをバケットからLogging Analyticsサービスに取り込む方法、およびダッシュボードをLogging Analyticsサービスにインポートする方法について概要を見ていきます。
この記事では、OCIおよびREST APIについて理解できていることを前提に進めていきます。また、Oracle Cloudアカウントをすでにプロビジョニングして、OCI Logging Analyticsサービスをアクティブにし、前提条件のタスクをすべて完了して使用できる状態にあるという想定で説明します。
WAFポリシーがターゲット・コンパートメントのMycompartmentに構成されていること、OCI Object Storageバケットがこのコンパートメント内に作成されていることも必要です。また、アカウント内の管理者権限があることも前提条件となります。
この記事ではセキュリティ上の理由から特定のユーザーを使用しますが、その統合用ユーザーの名前をapi.waf.log.userとしています。
始める前に、OCI、WAFポリシー、OCI Object Storageのそれぞれから、必要になる詳細情報を入手しましょう。
収集した詳細情報については後の手順で簡単に確認できるように、手順の番号とともにテキスト・エディタに保存しておいてください。
2.1.1.「Administration」→「Tenancy details」に移動し、テナンシーのOCIDをコピーしておきます。
2.1.2.「Administration」→「Tenancy」で、「Region Name」を確認します。
「Administration」→「Region Management」で、そのリージョンに対応するRegion Identifierを保存しておきます。
2.1.3.「Administration」→「Identity」→「Users」で、WAFログとOCIバケット間の統合に使用するための新規ユーザーとしてapi.waf.log.userを作成します。「API Public Key」を追加し、Fingerprintをコピーしておきます。
2.1.4.OCIDをコピーしておきます。
2.1.5.「Customer Secret Keys」をクリックし、新しい秘密鍵を生成します。この秘密鍵を安全な場所に保存します。
2.1.6.アクセス・キーをコピーしておきます。
2.1.7.「Administration」→「Identity」→「Groups」で、新しいグループとしてapigroupを作成し、先ほど作成したユーザーをこのグループに追加します。グループのOCIDをコピーしておきます。
2.1.8.グループ名をコピーしておきます。
2.2.1.「Security」→「WAF Policies」に移動し、作成済みのポリシーをクリックします。ポリシーのOCIDをコピーしておきます。
2.2.2.CNAME Targetをコピーしておきます。
2.2.3.ターゲット・アプリケーションのドメイン名をコピーしておきます。
2.3.1.Object Storageに移動し、作成済みのバケットをクリックします。OCIDをコピーしておきます。
2.3.2.バケット名をコピーしておきます。
2.3.3.ネームスペースをコピーしておきます。
2.3.4.コンパートメントをクリックして、コンパートメントのOCIDをコピーしておきます。
2.3.5.コンパートメント名をコピーしておきます。
作成したOCIバケットにWAFログを転送するために、Oracle Supportを使用してSRを作成する必要があります。
手順2.1.3で作成したユーザーには、バケットへの書込み権限が必要になります。そのために、このユーザーを含むグループに対して権限を付与する必要があります。
3.1.1.「Administration」→「Identity」→「Policy」に移動して、以下のポリシー文を作成します。
allow group <group_name_step_2.1.8> to manage object-family in compartment <compartment_name_step_2.5.5>
3.1.2.ポリシーのOCIDをコピーしておきます。
ポリシーの設定後、Oracle WAF PortalサポートでSRを発行し、以下の情報を提供します。
ユーザーのOCIバケットにログが表示されるようになるまで、実装に数日かかります。
実装の完了後、以下のようにWAFから到着したログがユーザーのOCIバケットに表示されるようになります。
次に、Logging Analyticsサービスおよびダッシュボードの管理に必要となるすべてのポリシーを作成していきます。
ここでは手順を簡略化するために、先ほど作成したapigroupグループのメンバーであるapi.waf.log.userユーザーに対してポリシーを付与することにします。
「Identity」→「Policies」で、Logging Analyticsサービスの管理に必要となる以下の文を含む新しいポリシーを作成します。
allow service loganalytics to READ loganalytics-features-family in tenancy Allow group apigroup to manage all-resources IN TENANCY where any {request.permission='LOG_ANALYTICS_OBJECT_COLLECTION_RULE_CREATE',request.permission='LOG_ANALYTICS_LOG_GROUP_UPLOAD_LOGS',request.permission='LOG_ANALYTICS_ENTITY_UPLOAD_LOGS',request.permission='LOG_ANALYTICS_SOURCE_READ',request.permission='BUCKET_UPDATE',request.permission='LOG_ANALYTICS_OBJECT_COLLECTION_RULE_DELETE'} allow service loganalytics to read buckets in tenancy allow service loganalytics to read objects in tenancy allow service loganalytics to manage cloudevents-rules in tenancy allow service loganalytics to inspect compartments in tenancy allow service loganalytics to use tag-namespaces in tenancy where all {target.tag-namespace.name = /oracle-tags/}
また、ダッシュボードの管理に必要となる以下の文も作成します。
Allow group apigroup to manage management-dashboard-family in tenancy
ここでは2つの手順を実行します。まず、ブログ・リソースのリンク先からログ・ソースとパーサーをインポートして、次に、OCI Logging Analyticsログ・グループを作成します。
ソースとパーサーをOCI Logging Analyticsサービスにインポートするには、このサービスに移動し、「Administration」をクリックして、Actionパネルの「Import Configuration Content」をクリックします。
ブログ・リソースからダウンロードしたログ・ソースのZIPファイルをドラッグ・アンド・ドロップして、「Import」をクリックします。
ログ・ソースとパーサーがインポートされたら、ログ・グループを作成しましょう。
そのために、「Log Groups」をクリックして、グループの作成先となるコンパートメントを選択します。関係性を分かりやすくするために、WAFポリシーとOCIバケットの作成先コンパートメントと同じものを使用できます。次に、「Create Log Group」をクリックします。名前と説明を入力し、「Create」をクリックします。OCIDが次の手順で必要になるため、コピーしておきます。
ここでは、WAFログを含むオブジェクト・ストレージからログを継続的に収集します。
ログの収集を有効にするには、ObjectCollectionRuleリソースを作成する必要があります。ObjectCollectionRuleリソースを作成するには、手順4で作成したIAMポリシーが必要になります。
この実行には、CLI、oci-curl、またはお好みのREST APIツールを使用できます。
以下の例ではCLIを使用します。
oci-cli environementを設定し、以下のコマンドについて、ルール名を設定し、compartmentId、osNamespace、osBucketName、namespace-nameの値を変更した上で実行します。
oci log-analytics object-collection-rule create --name rule_idcs --compartment-id XXX --os-namespace XXX --os-bucket-name XXX --log-group-id XXX --log-source-name IDCS --namespace-name XXX --collection-type HISTORIC_LIVE --poll-since BEGINNING
logSourceNameの値は手順5でインポートしたものですので、そのままにしてください。
また、この例のCollectionTypeとpollSinceの値は、まずすべての履歴データを収集し、その後は新しいログを継続的に収集するという設定になっています。
他のオプションについては、こちらのリファレンスを参照してください。
この時点で、OCI Logging Analyticsに移動すると、以下のようなWAFログを確認できます。
ここでは、ダッシュボードをOCI Logging Analyticsサービスにインポートします。
ブログ・リソースからダッシュボードのJSONファイルをダウンロードします。
このファイルを編集して、すべてのEDITCOMPARTMENTの部分を、ダッシュボードのインポート先となるコンパートメント・ターゲットのOCIDに書き換えます。
このコンパートメント・ターゲットはMycompartmentまたはMycompartmentの親コンパートメントとなります。
これで、ダッシュボードをインポートできるようになりました。
以下のoci-cliコマンドを実行します。
oci management-dashboard dashboard import --dashboards /path/to/dashboard.json
Logging Analyticsサービスに5つの新しいダッシュボードが表示され、使用できるようになっているはずです。
Overviewダッシュボードのほか、以下のように他のセキュリティ情報を利用する詳細なダッシュボードも表示できます。
このブログの内容が皆さまのお役に立てば幸いです。最後に、Oracle Cloud Infrastructureを使い始めるための次のステップについて以下にご紹介します。