シナリオ: モニタリング・ターゲットのディメンションの作成

コネクタによって生成されるカスタム・メトリックのディメンションを作成する方法について説明します。ロギング・サービスからメトリック(モニタリング・サービス)に、コネクタ・ハブを使用してログ・データを送信します。

このシナリオでは、コネクタ・を作成して、ログ・データを参照するディメンションを含むカスタム・メトリックを生成します。このコネクタを使用して、ログ・データをロギングからモニタリングに移動します。データの移動後、コネクタによって作成されるディメンションを使用して、新しいカスタム・メトリックをフィルタ処理できます。

必要なIAMポリシー

管理者グループのメンバーであれば、このシナリオを完了するために必要なアクセス権をすでに持っています。それ以外の場合は、モニタリングへのアクセス権が必要です。

コネクタを作成するワークフローには、ターゲット・サービスへの書込み権限を提供するために必要なデフォルト・ポリシーが含まれます。ポリシーを初めて使用する場合は、ポリシーの開始および共通ポリシーを参照してください。

目標

このトピックでは、このシナリオの目標について説明します。

このシナリオの目標は、オブジェクト・ストレージ・バケットの更新イベントをフィルタ処理することです。たとえば、バケットをパブリック・アクセスに変更した更新を探します。パブリック・バケットを検出すると、機密情報の漏洩を防ぐことに役立ちます。このシナリオでは、パブリック・アクセス・タイプの他に、バケット名、コンパートメント名、可用性ドメイン、バージョン管理ステータスおよび静的値のフィルタを設定します。

このシナリオの設定

このトピックでは、このシナリオの設定に関連するタスクについて説明します。

このシナリオでは、コネクタ・ハブ・サービスを使用してログからメトリックを作成します。このシナリオの設定には、次のタスクが含まれます:

  • ログをLoggingからMonitoring内のディメンションを含むカスタム・メトリックに移動するコネクタを作成します。

    • ログ・データ: 監査ログ(_Auditログ・グループ)のバケット - 更新イベント

      ノート

      このシナリオでは_Auditログ・グループおよびバケット更新イベントを使用しますが、テナンシで使用可能なすべてのログに対して同様のアプローチを使用できます。
    • メトリック・ネームスペース: bucket_events

    • メトリック名: update

    • 静的値 buckets-from-connector (ディメンション名: mytags)

    • パス・ディメンションを使用して抽出される値:

      ノート

      新しいディメンション値ごとに、新しいメトリック・ストリームが作成されます。スロットルが発生する可能性がある一意のメトリック・ストリームの生成が多すぎないように、ディメンションからGUIDまたはUUID (コンパートメントOCIDsなど)を除外することをお薦めします。

      パス・プロパティ(ディメンション名)
      bucketName logContent.data.additionalDetails.bucketName
      compartmentName logContent.data.compartmentName
      availabilityDomain logContent.data.availabilityDomain
      publicAccessType logContent.data.additionalDetails.publicAccessType
      versioning logContent.data.additionalDetails.versioning
  • 移動されたデータをディメンション(静的値および抽出された値)でフィルタ処理します。

これらのタスクは、Oracle Cloud Infrastructureコンソール、CLIまたはAPIで完了できます。

コンソールの使用

このトピックでは、コンソールを使用してシナリオを設定する方法について説明します。

トラブルシューティングのヘルプは、コネクタのトラブルシューティングおよび通知のトラブルシューティングを参照してください。

タスク1: コネクタの作成

このトピックでは、コンソールを使用して、ログのデータをディメンションを含むカスタム・メトリックに移動するコネクタを作成する方法について説明します。

  1. ナビゲーション・メニューを開き、「アナリティクスとAI」をクリックします。「メッセージング」で、「コネクタ・ハブ」をクリックします。

  2. サービス・コネクタを作成するコンパートメントを選択します。
  3. 「コネクタの作成」を選択します。
  4. コネクタの作成ページで、カスタム・ディメンションを含むカスタム・メトリックにオブジェクト・ストレージ・バケットの更新イベントを移動します:

    • 「コネクタ名」に"Bucket - Update"などと入力します。機密情報を入力しないでください。
    • 新しいコネクタを格納するリソース・コンパートメントを選択します。
    • 「コネクタの構成」で、ログ・データをメトリックに移動するソース・サービスおよびターゲット・サービスを選択します:
      • ソース: ロギング
      • ターゲット: モニタリング
    • 「ソース接続の構成」で、監査ログを選択します:
      • コンパートメント: ログ・データを含むコンパートメント。
      • ログ・グループ: _Audit
      • ログ: (空白のままにします)
    • 「ログ・フィルタ・タスク」で、オブジェクト・ストレージ・バケットの更新イベントを選択します:
      • フィルタ・タイプ: イベント・タイプ
      • サービス名: オブジェクト・ストレージ
      • イベント・タイプ: オブジェクト - 更新
    • 「タスクの構成」はスキップします。
    • 「ターゲット接続の構成」で、フィルタ処理したログ・データで使用するカスタム・メトリック・ネームスペースおよびカスタム・メトリック名を入力します:
      • バケット更新イベントに対応するメトリック・データ・ポイントを格納するコンパートメントを選択します。
      • 新しいメトリック・ネームスペースとしてbucket_eventsを入力します。
        ノート

        新しいメトリック・ネームスペースを入力したら、[Enter]を押して送信します。
      • 新しいメトリックとしてupdateを入力します

      次に、ログ・データに静的値buckets-from-connectorをタグ付けし、バケット名、コンパートメント名、コンパートメントOCID、可用性ドメイン、パブリック・アクセス・タイプおよびバージョン管理ステータスを抽出するためのカスタム・ディメンションを作成します。

    • 「ディメンションの追加」を選択します。

      「ディメンションの追加」パネルが表示されます。

    • ログ・データからバケット名を抽出します(ディメンション名bucketName):
      1. 「パスの選択」で、bucketNameパス内の使用可能なログ・データを参照します。

        ログ・データの最新の6行が、「ソースの構成」で指定されたログから取得されます。

        bucketNameパスを示すログ・データ部分の例:

        {
          "datetime": 1636594090595,
          "logContent": {
            "data": {
              "additionalDetails": {
                "bucketName": "bucket-20210722-1148",
        
      2. 必要なパスのチェック・ボックスを選択します。

        ノート

        使用可能なログ・データがない場合は、「パスの編集」の下にカスタム・ディメンション名を含むパス値を手動で入力できます。パスはlogContentから開始し、ドット(.)またはインデックス([])表記のいずれかを使用する必要があります。ドットとインデックスはサポートされている唯一のJMESPathセレクタです。たとえば:
        • logContent.data (ドット表記法)
        • logContent.data[0].content (インデックス表記法)

        バケット更新イベントのパスの例(ドット表記法使用):

        logContent.data.additionalDetails.bucketName

        有効なパス表記法の詳細は、JmesPathDimensionValueを参照してください。

        次の図は、選択したパス(bucketName)および選択していないパス(eTag)の例を示しています。

        選択したパスと選択していないパス

        「パスの編集」では、選択したパスに基づいて次のフィールドの値が自動的に移入されますオプションで、デフォルトのディメンション名を編集できます。

        ディメンション名
        bucketName logContent.data.additionalDetails.bucketName
    • ディメンション(フィルタ)として使用する追加の値ごとに抽出を繰り返します: 「パスの選択」で、次の表のディメンション名に対応するパスのチェック・ボックスを選択します。

      「値」は、選択したパスから自動的に移入されます。オプションで、デフォルトのディメンション名を編集できます。

      ディメンション名
      compartmentName logContent.data.compartmentName
      availabilityDomain logContent.data.availabilityDomain
      publicAccessType logContent.data.additionalDetails.publicAccessType
      versioning logContent.data.additionalDetails.versioning
    • ログ・データに静的値buckets-from-connector (ディメンション名mytags)をタグ付けします: 「静的値」に次のように入力します:
      • ディメンション名: mytags
      • : buckets-from-connector
  5. 「Save changes」を選択します。

    「ディメンションの追加」パネルが閉じます。フォーカスが「コネクタの作成」ページが表示されます。

  6. ポリシー(コネクタを作成または更新するためのアクセス権で必要)の作成を求められた場合は、「作成」を選択します。
  7. 「作成」を選択します。

    新しいコネクタは、指定したディメンションを含むカスタム・メトリックupdateへのログ・データの移動を開始します。

    次に、ディメンションを使用して、移動したデータをフィルタ処理します。

タスク2: 移動したデータのフィルタ処理

このトピックでは、コンソールを使用して、ログからディメンションを含むカスタム・メトリックに移動されたデータをフィルタ処理する方法について説明します。

  1. ナビゲーション・メニューを開き、「監視および管理」をクリックします。「Monitoring」で、「Metrics Explorer」をクリックします。

  2. メトリック・エクスプローラ・ページで、新しい問合せのフィールドに入力します。
    • コンパートメント: メトリックを含むコンパートメント。
    • メトリック・ネームスペースbucket_events
    • メトリック名: update
    • 間隔: 1m

    • 統計:

    • メトリック・ディメンション: 次のディメンションを追加します。
      ディメンション名 ディメンション値
      mytags buckets-from-connector
      bucketName bucket-20210722-1148
      compartmentName development
      availabilityDomain PHX-AD-3
      publicAccessType ObjectRead
      versioning Enabled
  3. 「チャートの更新」を選択します。

    チャートには、ディメンションによってフィルタ処理されたメトリック・データが表示されます。

    完了しました。これで、コネクタがメトリックに移動したログ・データをフィルタ処理しています。

CLIの使用

このトピックでは、CLIを使用して、コネクタを作成し、移動したデータをフィルタ処理する方法について説明します。

APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。

  1. コネクタのログ・ソースを定義します: source.jsonという名前のファイルを保存します。

    source.jsonファイルの例
    {
      "kind": "logging",
      "logSources": [
        {
          "compartmentId": "<compartment_OCID>",
            "logGroupId": "_Audit",
            "logId": null
        }
      ]
    }
  2. コネクタのターゲット(メトリックとディメンション)を定義します: target.jsonという名前のファイルを保存します。

    target.jsonファイルの例
    {
      "kind": "monitoring",
      "compartmentId": "<compartment_OCID>",
      "metricNamespace": "bucket_events",
      "metric": "update",
      "dimensions": [
        {"name": "mytags", "dimensionValue": {"kind": "static", "value": "buckets-from-connector"}},
        {"name": "bucketName", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.additionalDetails.bucketName"}},
        {"name": "compartmentName", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.compartmentName"}},
        {"name": "availabilityDomain", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.availabilityDomain"}},
        {"name": "publicAccessType", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.additionalDetails.publicAccessType"}},
        {"name": "versioning", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.additionalDetails.versioning"}}
      ]
    }
  3. コネクタを作成します: コマンド・プロンプトを開き、oci sch service-connector createコマンドを実行します:

    コネクタを作成するためのコマンドの例
    oci sch service-connector create
     --compartment-id <compartment_OCID>
     --display-name "Bucket - Update"
     --source file://source.json
     --target file://target.json
  4. カスタム・ディメンションを使用してメトリック・データを問い合せます: コマンド・プロンプトを開き、oci monitoring metric-data summarize-metrics-dataコマンドを実行します:

    カスタム・ディメンションを使用してメトリック・データを問い合せるコマンドの例
    oci monitoring metric-data summarize-metrics-data
     --compartment-id <compartment_OCID>
     --namespace bucket_events
     --query-text update[1m]{mytags = "buckets-from-connector", bucketName = "bucket-20210722-1148", coompartmentName = "development", availabilityDomain = "PHX-AD-3", publicAccessType = "ObjectRead", versioning = "Enabled"}.count()

トラブルシューティングのヘルプは、コネクタのトラブルシューティングおよび通知のトラブルシューティングを参照してください。

APIの使用

このトピックでは、APIを使用して、コネクタを作成し、移動したデータをフィルタ処理する方法について説明します。

APIの使用およびリクエストの署名の詳細は、REST APIのドキュメントおよびセキュリティ資格証明を参照してください。SDKの詳細は、SDKおよびCLIを参照してください。

次の操作を使用します:

  1. CreateServiceConnector: コネクタを作成します。

    CreateServiceConnectorリクエストの例
    POST /20200909/serviceConnectors
    Host: service-connector-hub.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "compartmentId": "<compartment_OCID>",
      "displayName": "Bucket - Update",
      "source": {
        "kind": "logging",
        "logSources": [
          {
            "compartmentId": "<compartment_OCID>",
            "logGroupId": "_Audit",
            "logId": null
          }
        ]
      },
      "target": {
        "compartmentId": "<compartment_OCID>",
        "dimensions": [
          {"name": "mytags", "dimensionValue": {"kind": "static", "value": "buckets-from-connector"}},
          {"name": "bucketName", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.additionalDetails.bucketName"}},
          {"name": "compartmentName", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.compartmentName"}},
          {"name": "availabilityDomain", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.availabilityDomain"}},
          {"name": "publicAccessType", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.additionalDetails.publicAccessType"}},
          {"name": "versioning", "dimensionValue": {"kind": "jmesPath", "path": "logContent.data.additionalDetails.versioning"}}
        ]
        "kind": "monitoring",
        "metric": "update",
        "metricNamespace": "bucket_events"
      }
    }
  2. SummarizeMetricsData: ディメンションによってメトリック・データを問い合せます。

    SummarizeMetricsDataリクエストの例
    POST /20180401/metrics/actions/summarizeMetricsData?compartmentId=<compartment_OCID>
    Host: telemetry.us-phoenix-1.oraclecloud.com
    <authorization and other headers>
    {
      "namespace": "bucket_events",
      "query": "update[1m]{mytags = "buckets-from-connector", bucketName = "bucket-20210722-1148", coompartmentName = "development", availabilityDomain = "PHX-AD-3", publicAccessType = "ObjectRead", versioning = "Enabled"}.count()"
    }

トラブルシューティングのヘルプは、コネクタのトラブルシューティングおよび通知のトラブルシューティングを参照してください。