Cloud Logging データのエクスポート シナリオ: Splunk

このシナリオでは、選択したログを Cloud Logging から Pub/Sub にエクスポートして Splunk に取り込む方法を説明します。Splunk は、Splunk HTTP Event Collector(HEC)による Google Cloud からのストリーミング データの受信、Google Cloud Platform 用の Splunk アドオンによる Google Cloud API からのデータの取得など、データの取り込みのいくつかの方法をサポートする、セキュリティ情報およびイベント管理(SIEM)ソリューションです。

Pub/Sub to Splunk Dataflow テンプレートを使用すると、Pub/Sub トピックから Splunk HEC へネイティブにログとイベントを転送できます。Splunk デプロイで Splunk HEC を使用できない場合は、アドオンを使用して Pub/Sub トピックからログとイベントを収集できます。

すでにデプロイされている Splunk ソリューションを使用している場合、Cloud Logging では Google Cloud から Splunk ソリューションにログをエクスポートできます。この機能では、ロギング、モニタリング、診断機能を利用しながら、これらのログを既存のシステムに取り込むことが可能です。

このシナリオは、Cloud Logging のエクスポートのための設計パターンの一部です。

ロギングのエクスポートを設定する

次の図は、Pub/Sub による Splunk へのロギングのエクスポートを有効にする手順を示しています。

Pub/Sub へのロギングのエクスポートを有効にします。

Pub/Sub トピックとサブスクリプションを設定する

エクスポートされたログを受信し、トピックにサブスクリプションを追加するための Pub/Sub トピックを設定する手順を行います。

このドキュメントでは、次の Pub/Sub トピックとサブスクリプション名を使用します。

projects/compliance-logging-export/topics/logs-export-topic

projects/compliance-logging-export/topics/logs-export-subscription

すべてのサービスで監査ロギングを有効にする

管理アクティビティ監査ログは常に書き込まれます。無効にすることはできません。ただし、データアクセス監査ログ(BigQuery 用を除く)は、デフォルトで無効になっています。すべての監査ログを有効にするには、監査ポリシーのドキュメントに記載されている構成を使用して、Cloud IAM ポリシーを更新する手順を行います。手順は次のとおりです。

  • 現在の IAM ポリシーをファイルとしてダウンロードします。
  • 監査ログポリシーの JSON または YAML オブジェクトを現在のポリシー ファイルに追加します。
  • 変更されたポリシー ファイルを使用して Google Cloud プロジェクト(または組織)を更新します。

以下に、すべてのサービスで監査ログを有効にする JSON オブジェクトの例を示します。

"auditConfigs": [
    {
        "service": "allServices",
        "auditLogConfigs": [
            { "logType": "ADMIN_READ" },
            { "logType": "DATA_READ"  },
            { "logType": "DATA_WRITE" },
        ]
    },
]

ロギング エクスポートを構成する

集約エクスポートまたはログのエクスポートを設定したら、ロギング フィルタを調整して、監査ログ、仮想マシン関連のログ、ストレージログ、データベース ログをエクスポートします。次のロギング フィルタには、管理アクティビティ監査ログとデータアクセス監査ログに加えて、特定のリソースタイプのログが含まれます。

logName:"/logs/cloudaudit.googleapis.com" OR
resource.type:gce OR
resource.type=gcs_bucket OR
resource.type=bigquery_resource

gcloud コマンドライン ツールから、gcloud logging sinks create コマンドまたは organizations.sinks.create API 呼び出しを使用して、適切なフィルタを使用してシンクを作成します。次の gcloud コマンドの例では、Pub/Sub トピック logs-export-topic が以前に作成された宛先で、この組織に対して gcp_logging_sink_pubsub という名前のシンクが作成されます。シンクにはすべての子プロジェクトが含まれ、特定の監査ログを選択するためのフィルタリングを指定します。

gcloud logging sinks create gcp_logging_sink_pubsub \
    pubsub.googleapis.com/projects/compliance-logging-export/topics/logs-export-topic \
    --log-filter='logName:"/logs/cloudaudit.googleapis.com" OR \
    resource.type:\"gce\" OR \
    resource.type=\"gcs_bucket\" OR   \
    resource.type=\"bigquery_resource\"' \
    --include-children   \
    --organization=your-organization

コマンドの出力は次のようになります。

Created [https://logging.googleapis.com/v2/organizations/your-organization/sinks/gcp_logging_export_pubsub_sink].
Please remember to grant `serviceAccount:gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com` Pub/Sub Publisher role to the topic.
More information about sinks can be found at /logging/docs/export/configure_export

この API 呼び出しからの戻り値の serviceAccount エントリにおいて、gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com という ID がレスポンスに含まれます。この ID は、エクスポート用に作成された Google Cloud サービス アカウントを表します。この ID に宛先トピックに対する公開アクセス権を付与するまで、このシンクからのログエントリのエクスポートは失敗します。詳細については、次のセクションまたはリソースのアクセス権の付与のドキュメントをご覧ください。

Pub/Sub トピックの IAM ポリシー権限を設定する

Pub/Sub パブリッシャー権限を持つ pubsub.googleapis.com/projects/compliance-logging-export/topics/logs-export-topic トピックにサービス アカウント gcp-logging-export-pubsub-si@logging-oyour-organization.iam.gserviceaccount.com を追加することにより、そのトピックに公開する権限がサービス アカウントに付与されます。これらの権限を追加するまで、シンクのエクスポートは失敗します。

サービス アカウントに権限を付与するには、次の操作を行います。

  1. Cloud Console で、[Cloud Pub/Sub のトピック] ページを開きます。

    トピックページに移動

  2. トピック名を選択します。

  3. [情報パネルを表示] をクリックして、Pub/Sub パブリッシャー権限を選択します。

    IAM ポリシー権限 - Pub/Sub パブリッシャー

このフィルタを使用してロギング エクスポートを作成すると、構成対象のプロジェクトの Pub/Sub トピックにログファイルの自動入力が開始されます。Cloud Monitoring の Metrics Explorer を使用すると、トピックによるメッセージの受信を確認できます。次のリソースタイプと指標を使用して、短期間に実行されたメッセージ送信オペレーションの数を確認します。エクスポートが正しく構成されていれば、このスクリーンショットのように、グラフに 1 個以上のアクティビティが表示されます。

  • リソースの種類: pubsub_topic
  • 指標: pubsub/topic/send_message_operation_count

アクティビティのグラフ。

Splunk データの取り込みを設定する

オプション A: Pub/Sub を使用して Splunk Dataflow にログをストリーミングする

Pub/Sub to Splunk Dataflow テンプレートを使用して、以前に作成した Pub/Sub サブスクリプションからメッセージを pull し、ペイロードを Splunk HEC イベント形式に変換して Splunk HEC に転送する Dataflow ジョブを作成します。そのため、Splunk HEC エンドポイント URL と HEC トークンが必要です。この URL には Dataflow ジョブのネットワークからアクセスできます。まだ行っていない場合は、Splunk HEC を構成する手順を行います。

複数のワーカー間でのワークロードの同時読み込みと分散に加えて、Dataflow サービスでは、これらのリソースを管理して、Pub/Sub からの既存のメッセージ バックログと現在のワーカーの使用率に基づいてワーカー数の自動スケーリングを行います。

フォールト トレランスの観点から、Pub/Sub to Splunk Dataflow テンプレートでは、ダウンストリーム エンドポイントがダウンした場合やネットワーク接続の問題が発生した場合に、Splunk HEC への再試行(指数バックオフで)を処理します。メッセージ処理エラーが発生した場合にデータが失われないようにするために、これらのメッセージは別の Pub/Sub デッドレター トピックに転送されます。このトピックは、この Dataflow テンプレートを実行する前に作成しておく必要があります。

データを受信するように Splunk HEC エンドポイントが構成されたら、Cloud Console、gcloud コマンドライン ツール、または Dataflow API によって、Pub/Sub から Splunk Dataflow へのパイプラインを実行できます。必要に応じて、JavaScript ユーザー定義関数を適用して、Splunk に転送する前にメッセージ ペイロードを変換することもできます。

次の gcloud コマンドの例では、入力 Pub/Sub サブスクリプションまたは logs-export-subscription で最新バージョンの Pub/Sub to Splunk Dataflow テンプレートを実行します。

JOB_NAME=pubsub-to-splunk-$USER-`date +"%Y%m%d-%H%M%S%z"`
gcloud dataflow jobs run $JOB_NAME \
    --gcs-location gs://dataflow-templates/latest/Cloud_PubSub_to_Splunk \
    --max-workers 2 \
    --parameters \
  inputSubscription=projects/compliance-logging-export/subscriptions/logs-export-subscription,\
  token=your-splunk-hec-token,\
  url=your-splunk-hec-url,\
  outputDeadletterTopic=projects/compliance-logging-export/topics/splunk-pubsub-deadletter,\
  batchCount=10,\
  parallelism=8

Cloud Monitoring の Metrics Explorer を使用して、Dataflow パイプラインでメッセージを Splunk に正常に送信していることを確認できます。次のリソースタイプと指標を使用して、短期間に正常に実行された送信イベント数と失敗した可能性があるイベント数を確認します。

  • リソースの種類: dataflow_job
  • 指標 1: custom.googleapis.com/dataflow/outbound-successful-events
  • 指標 1: custom.googleapis.com/dataflow/outbound-failed-events

テンプレートが正しく構成されていれば、このスクリーンショットのように、グラフに 1 個以上のアクティビティが表示されます。

送信イベントのグラフ アクティビティ。

オプション B: Google Cloud の Splunk アドオンを使用してログを取得する

Google Cloud の Splunk アドオンでは、Pub/Sub トピックと Google Cloud のサービス アカウントを使用します。サービス アカウントは、アドオンが Cloud Pub /Sub のサブスクリプションを作成し、ロギング エクスポート トピックからメッセージを取り込むために使用する秘密鍵の生成で使用されます。サービス アカウントがサブスクリプションを作成し、サブスクリプションを含む Pub/Sub プロジェクトのコンポーネントの一覧を作成するには、適切な IAM 権限が必要です。

Splunk アドオンを設定する手順を行います。 Splunk アドオンの手順の一部として作成されたサービス アカウントに対して、roles/pubsub.viewer と roles/pubsub.subscriber の PUB/ SUB で使用する IAM 権限を付与します。

アドオンの構成後、ロギング エクスポートから取り込んだ Pub/Sub メッセージが Splunk に表示されます。

Cloud Monitoring の Metrics Explorer を使用すると、Splunk アドオンのサブスクリプションがメッセージを pull していることを確認できます。次のリソースタイプと指標を使用して、短期間に実行されたメッセージ pull オペレーションの数を確認します。

  • リソースの種類: pubsub_subscription
  • 指標: pubsub/subscription/pull_message_operation_count

エクスポートが正しく構成されていれば、このスクリーンショットのように、グラフに 1 個以上のアクティビティが表示されます。

pull オペレーションのグラフ アクティビティ。

エクスポートされたログの使用

エクスポートされたログが Splunk に取り込まれた後、他のデータソースと同様に Splunk で次のタスクを実行できます。

  • ログを検索する。
  • 複雑なイベントを関連付ける。
  • ダッシュボードに結果を表示する。

次のステップ