
Google CloudのログをPub/SubからPULLしてSplunkに連携する
概要
SplunkにGoogle Cloudのログを連携する方法は現在以下の2パターンがGoogle Cloudのリファレンスで紹介されています。
| 方式 | 概要 |
|---|---|
| PUSH方式 | Splunk側でHEC(Http Event Controller)を構築して、Google CloudからDataflowなどを用いてログをPUSHする方法。Google CloudからDataflowを用いる方法(テンプレート)が提供されている。サービスアカウントキーは不要。HECトークンをGoogle Cloud側で用いてログをPUSHする |
| PULL方式 | Splunk側でアドオンをインスタンスにインストールしてPub/SubトピックからPULLする方式。サービスアカウントキーが必要。Splunkにサービスアカウントキーをアップロードする。 |
PUSH方式のイメージ

PULL方式のイメージ

上記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 アドオンを構成するのに使用するサービス アカウントキーを作成、管理する必要があります。
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環境で試しています。
全体の流れは以下となります。
- Pub/Subトピックとpull型サブスクリプションを作成
- サービスアカウントを作成
- サービスアカウントキーを作成
- Splunkで
Splunk Add-on for Google Cloud Platformをインストール - (5)でインストールしたSplunkアドオンを設定
- トピックにテストデータを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コンソールで確認しましたがトピック・サブスクリプションともに作成されていました。

2.サービスアカウント作成
サービスアカウントを作成します。
gcloud iam service-accounts create サービスアカウント名 \
--description="TEST" \
--display-name="Splunk-Export"
descriptionやdisplay-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 > サービスアカウントを選択して先ほど作成したサービスアカウントを選択します。
キー > 鍵を追加 > 新しい鍵を作成の順で押下します。

キーのタイプをJSONにしてキーを作成します。

ダウンロードされたキーのファイルを控えておきます。
4.アドオンのインストール
他のAppのサーチから検索バーでGoogle Cloud Platformと検索してSplunk Add-on for Google Cloud Platformを探します。
見つけたらインストールを押下します。

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

設定を押下します。画面上部の設定ではなく、アドオンの設定です(入力の隣です)。

サービスアカウントキーを登録します。追加を押下します。

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

入力の画面に戻りCreate New Input > Cloud Pub/Subを押下します。

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

追加を押下すると設定が作成されます。

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"

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






