Google CloudのログをPub/SubからPULLしてSplunkに連携する

Google CloudのログをPub/SubからPULLしてSplunkに連携する

Clock Icon2024.11.12

概要

SplunkにGoogle Cloudのログを連携する方法は現在以下の2パターンがGoogle Cloudのリファレンスで紹介されています。

https://cloud.google.com/architecture/stream-logs-from-google-cloud-to-splunk?hl=ja

方式 概要
PUSH方式 Splunk側でHEC(Http Event Controller)を構築して、Google CloudからDataflowなどを用いてログをPUSHする方法。Google CloudからDataflowを用いる方法(テンプレート)が提供されている。サービスアカウントキーは不要。HECトークンをGoogle Cloud側で用いてログをPUSHする
PULL方式 Splunk側でアドオンをインスタンスにインストールしてPub/SubトピックからPULLする方式。サービスアカウントキーが必要。Splunkにサービスアカウントキーをアップロードする。

PUSH方式のイメージ
スクリーンショット 2024-11-11 22.24.53

PULL方式のイメージ
スクリーンショット 2024-11-11 22.15.12

上記2つの方法のうち、Google Cloudが推奨しているのはPUSH方式です。
以下の状況の場合はPULL方式を代替案とすると記載があります。

・Splunk のデプロイメントで Splunk HEC エンドポイントが提供されない。
・ログの量が少ない。
・Cloud Monitoring の指標、Cloud Storage オブジェクト、Cloud Resource Manager API メタデータ、または少量のログを分析したい。
・すでに 1 つ以上の負荷の高いフォワーダーを Splunk で管理している。
・ホストされている Splunk Cloud の Inputs Data Manager を使用する。

そして以下に関しても考慮する必要があります。

・単一のワーカーがデータ取り込みワークロードを処理しますが、ここで自動スケーリング機能は提供しません。
・Splunk では、負荷の大きいフォワーダーを使用してデータを pull すると、単一障害点が発生する場合があります。
・pull ベースの方法では、Google Cloud の Splunk アドオンを構成するのに使用するサービス アカウントキーを作成、管理する必要があります。

※引用:https://cloud.google.com/architecture/stream-logs-from-google-cloud-to-splunk?hl=ja#design-alternatives

PULL方式はサービスアカウントキーを発行するので、漏洩にも当然気をつけなければいけません。
しかしながらPUSH方式はDataflowを用いなければいけないため、さくっとSplunkにログを連携したい場合はちょっと気後れしてしまいます。
2つの方法を比較すると以下のようになります。

PUSH方式 PULL方式
仕組み DataflowがログをSplunk(HEC)へPUSHする。 SplunkのアドオンがPub/SubトピックからPULLしてログを取得する
セキュリティリスク 低い。トークンが流出してもログを閲覧されることはない 高い。サービスアカウントキー漏洩時はログが閲覧される、他のトピックをPULLされる可能性あり
実装工数 多い 少ない
コスト 高い 安い
ログの量 大容量のログにも対応 小規模なログに対応

PUSH方式はセキュリティ面、多量のログにも対応できるDataflowが関係するため実装工数は多くなり費用も高くなってしまいます。
今回は上記の点を承知の上であくまでもSplunkとGoogle Cloudのログ連携の検証としてPULL方式でGoogle Cloudからログを連携してみました。

前提条件

  • Splunk Cloudの環境設定済み
  • Google Cloudのプロジェクト作成、各種APIが有効化されている

やってみる

※Splunk Cloud環境で試しています。
全体の流れは以下となります。

  1. Pub/Subトピックとpull型サブスクリプションを作成
  2. サービスアカウントを作成
  3. サービスアカウントキーを作成
  4. SplunkでSplunk Add-on for Google Cloud Platformをインストール
  5. (5)でインストールしたSplunkアドオンを設定
  6. トピックにテストデータをpublishしてSplunkで表示テスト

それではやっていきます。

1.Pub/Sub作成

gcloudコマンドでトピックを作成します(デフォルト設定で作成しています)。

gcloud pubsub topics create [トピック名]

Created topic [projects/プロジェクトID/topics/トピック名].と出力されたら成功です。

続けてサブスクリプションを作成します。

gcloud pubsub subscriptions create [サブスクリプション名] --topic=[トピック名]

Created subscription [projects/プロジェクトID/subscriptions/トピック名].と出力されたら成功です。

Pub/Subコンソールで確認しましたがトピック・サブスクリプションともに作成されていました。
スクリーンショット 2024-11-11 22.56.45

2.サービスアカウント作成

サービスアカウントを作成します。

gcloud iam service-accounts create サービスアカウント名 \
--description="TEST" \
--display-name="Splunk-Export"

descriptiondisplay-nameは表示用だけなので適当なものを入れています。
続いて権限を付与していきます。付与するのは以下の2つの権限です。

role 説明
roles/pubsub.subscriber PULLするための権限
roles/pubsub.viewer サブスクリプション・トピックをSplunk上で選択するための権限(見えるようにするため)
gcloud projects add-iam-policy-binding プロジェクトID \
--member="serviceAccount:サービスアカウント名@プロジェクトID.iam.gserviceaccount.com" \
--role="roles/pubsub.subscriber"

gcloud projects add-iam-policy-binding プロジェクトID \
--member="serviceAccount:サービスアカウント名@プロジェクトID.iam.gserviceaccount.com" \
--role="roles/pubsub.viewer"

サービスアカウント作成、権限付与ができたらサービスアカウントキーを発行していきます。

3.サービスアカウントキーの発行

IAM > サービスアカウントを選択して先ほど作成したサービスアカウントを選択します。
キー > 鍵を追加 > 新しい鍵を作成の順で押下します。
スクリーンショット 2024-11-11 23.28.56

キーのタイプJSONにしてキーを作成します。
スクリーンショット 2024-11-11 23.29.02

ダウンロードされたキーのファイルを控えておきます。

https://cloud.google.com/resource-manager/docs/secure-by-default-organizations?hl=ja#organization_policies_enforced_on_organization_resources

4.アドオンのインストール

他のAppのサーチから検索バーでGoogle Cloud Platformと検索してSplunk Add-on for Google Cloud Platformを探します。
見つけたらインストールを押下します。
スクリーンショット 2024-11-10 22.02.29

5.インストールしたアドオンの設定

アドオンをインストールすると左側のバーにSplunk Add-on for Google Cloud Platformが表示されていますのでクリックします(なければサーチしてクリック!)。
スクリーンショット 2024-11-11 23.38.17

設定を押下します。画面上部の設定ではなく、アドオンの設定です(入力の隣です)。
スクリーンショット 2024-11-11 23.41.02

サービスアカウントキーを登録します。追加を押下します。
スクリーンショット 2024-11-11 23.41.59

以下を入力して追加します。

設定項目 設定値
Name 表示名
Account Type Service Accountを選択
Account Creds さきほどダウンロードしたファイル内のJSONを貼り付けます

スクリーンショット 2024-11-11 23.43.43

入力の画面に戻りCreate New Input > Cloud Pub/Subを押下します。
スクリーンショット 2024-11-11 23.48.56

Pub/Subの設定をします。設定項目は以下となります。

設定項目 設定値
Name 表示名
Credentials さきほど設定したサービスアカウントキーの設定名
Project サービスアカウントキーが紐づいているプロジェクト
Pub/Sub Subscriptions PULLしたいサブスクリプション。(1)で作成したもの
Index 任意の値。私はmainで設定しています。
Source Type 任意の値

スクリーンショット 2024-11-11 23.50.59

追加を押下すると設定が作成されます。
スクリーンショット 2024-11-11 23.56.19

6.トピックにデータを送信してSplunkで確認してみる

簡単なJSON(Hello World. From Google Cloudと出力)をトピックにpublishしてみます。

gcloud pubsub topics publish トピックID --message='{"event": "Hello World. From Google Cloud"}'

publishできたらSplunkでサーチしてみます。

data.event="Hello World. From Google Cloud"

スクリーンショット 2024-11-12 0.05.23

Pub/SubトピックへpublishしたデータがSplunkに連携されていました!検証成功です。
※検証完了後はサービスアカウントキーの削除やPub/Subトピックやサブスクリプションの削除を実施してください。

まとめ

アドオンを用いることで容易にSplunkへ連携することができました。とてもありがたいなと思います。
連携も体感ほぼリアルタイムでした。

テストではPub/Subトピックへ手動でコマンド実行でデータ送信しましたが、運用ベースだとシンクを使ったりして自動でログを流し込むことになります。
とはいえ、繰り返しになってしまいますがPULL方式だとサービスアカウントキーを用いますのでセキュリティリスクがあります。付与している権限がroles/pubsub.subscriberroles/pubsub.viewerなので万が一サービスアカウントキーが漏洩した場合にトピックを不正な第三者にPULLされてしまう可能性があります。サービスアカウントキーの管理は十分注意する必要があります。また、キーの定期的なローテーションや、使用後の無効化も推奨されます。
PUSH方式と比較検討をしてどちらが適しているか判断した方が良いと考えます。
そして今度はPUSH方式も記事にしてみたいと思います。
それではまた。ナマステー

参考

https://cloud.google.com/pubsub/docs/publish-receive-messages-gcloud?hl=ja
https://cloud.google.com/blog/ja/products/data-analytics/connect-to-splunk-with-a-dataflow-template

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.