Updated 2/22/2021: AzureからのSplunkへのデータ取り込み方法は更新されております。Splunk Add-On for Microsoft Cloud ServicesのSplunkbaseのページで詳細をご確認ください。
Azure Monitorは、Azureリソースデータのルーティングとアクセス提供を行うプラットフォームサービスです。Azure Monitorでは、主に以下の3種類のデータにアクセスできます。
1) メトリック – 主にパフォーマンス指標
2) 診断ログ – リソースによって生成されるログ
3) アクティビティログ – Azure環境で、いつ誰が何を行ったのか
Azure MonitorのデータをSplunkへ取り込むには、Azure側とSplunk側の両方で設定作業が必要です。このブログ記事では、Azure側で必要な作業について解説します。本ブログ次の記事では、データ収集を行うAzure Monitor Add-on for Splunkについて説明します。
プロフェッショナルヒント:Azureの設定を自動化できるPowerShellスクリプトをご利用いただけます。
アクティビティログは、Azureのコントロールプレーンによって生成されます。このログには基本的に、Azure環境でいつ誰が何を行ったのかという情報と、サービスの正常性、推奨事項、セキュリティなどの情報が含まれています。Azure Monitorはアクティビティログのデータをイベントハブにルーティングします。
診断ログは、プロビジョニングされたリソースによって生成されます。プロビジョニングされたリソースのタイプによって、診断ログの内容は異なります。たとえば、キーコンテナーの診断ログには、「取得」操作でシークレットを取得したときのイベントが含まれています。診断データは複数の場所にルーティングできますが、このブログでは便宜上、イベントハブにルーティングします。
メトリックは、Azureリソースによって生成される数値であり、そのリソースの操作とパフォーマンスを把握するのに役立ちます。メトリックにはREST APIを介してアクセスでき、93日間(執筆時点の情報)利用できます。
Azure側には、主に3つのコンポーネントが必要です。
1) Azure ADアプリケーション – これは、ユーザーIDとパスワードを持つユーザーアカウントまたはサービスアカウントと考えるとわかりやすいと思います。ただしAzure ADアプリケーションの場合は、アプリケーションIDとキーです。
2) イベントハブ – アクティビティログと診断ログが保存される場所です。
3) キーコンテナー – アプリケーションキーとイベントハブ名前空間キーがここに保存されます(キーコンテナーという名前のとおりです)。
設定作業中に、Azure ADアプリケーションに役割とアクセス許可を付与します。これを行うには、サービスプリンシパルオブジェクトを作成します。
再びユーザーに例えて説明すると、多くの場合、ユーザーを作成した後はネットワークの各エリアに対するアクセス許可をユーザーに与える必要があります。これと同じことをAzure ADアプリケーションに行うには、サービスプリンシパルオブジェクトを作成します。サービスプリンシパルでは、テナントにおけるアクセスポリシーとアプリケーションへのアクセス許可を定義します。その点でAzure ADアプリケーションはユーザーに似ており(IDとパスワードがあるところも)、サービスプリンシパルオブジェクトはユーザーのアクセスレベルのようなものです。もちろんこれは極端に単純化していますので、技術的な詳細はこちらでご確認ください。
イベントハブからプログラムでデータを取り出しSplunkに取り込むには、共有アクセスポリシー名とキーが必要です。これらの値はAzure Monitor Add-on for Splunkには保存されず、キーコンテナーから取得します。
メトリックデータは、REST APIを使用してAzureから取り出します。Azureのメトリックデータにアクセスするには、Azure ADアプリケーションIDとキーの設定が必要です。イベントハブと同様に、これらの値はAzure Monitor Add-on for Splunkには保存されず、キーコンテナーから取得します。
Azure ADアプリケーションキーやイベントハブ名前空間キーは、Azure Monitor Add-on for Splunkに保存されず、キーコンテナーに保存されます。しかし、これらのキーをキーコンテナーからプログラムで取得するには、Azureによるセキュリティ認証を行う必要があります。セキュリティ認証には(ご想像のとおりですが)、Azure ADアプリケーションIDとキーを使用します。このAzure ADアプリケーションIDとキーは、Azure Monitor Add-on for Splunkに保存されます。上記で使用したAzure ADアプリケーションを再利用しても、キーコンテナーの「取得」アクセス許可を持つ新規アプリケーションを作成してもかまいません。このブログでは便宜上、どちらにも同じAzure ADアプリケーションを使用します。
必要なAzureコンポーネントの次は、設定の概要を確認しましょう。
1) Azure ADアプリケーション登録を作成します。Azure Monitor Add-on for SplunkからAzureへのデータ問い合わせは、Azure ADアプリケーションのコンテキストで行います。
2) イベントハブ名前空間を作成します。Azureでは、この名前空間に含まれる各イベントハブにアクティビティログと診断ログが書き込まれます。名前空間は複数あってもかまいませんが、このブログでは便宜上、1つだけ使用します。
3) キーコンテナーを作成します。キーコンテナーには、Azure ADアプリケーションとイベントハブのキーが保存されます。
4) 必要なサービスプリンシパルオブジェクトをすべて設定します(ネットワークに対するユーザーの権限のようなものです)。SplunkはAzure ADアプリケーションのコンテキストでAzureからデータを取得するため、データが格納されているAzureのセクションに対する適切な権限をこのアプリケーションに持たせておく必要があります。
5) Azure ADアプリケーションとイベントハブ名前空間のキーをキーコンテナーに保存します。
このガイドを進めていく中で、AzureやSplunkの設定のために、いくつかの情報をメモしておく必要があります。メモすべき情報は、各ステップでこのアイコン を使って示します。
それでは、Azureを設定しましょう。
1. [Azure Active Directory] -> [アプリの登録] -> [新しいアプリケーションの登録]を選択します。
注:既存のAzure ADアプリケーション登録を使用してもかまいません。
2. 名前とサインオンURLを入力し、[作成]をクリックします。
注:サインオンURLを使用しない場合は、有効なURLならば何でもかまいません。
3. アプリケーション登録のキーを作成します。
[設定] -> [キー]をクリックします。キーの説明を入力し、キーの有効期限を設定して、[保存]をクリックします。
[保存]ボタンをクリックしたら、キーの値をコピーしておきます。Azure Portalでキーの値が表示されるのはこのときだけです。この値がわからなくなった場合は、上記の手順で新しいキーを生成する必要があります。このキーは後でキーコンテナーに保存します。
アプリケーションIDとキーをメモしてください。
アプリケーションID | 11111111-1111-1111-1111-111111111111 |
アプリケーションキー | 22222222-2222-2222-2222-222222222222 |
Azure ADアプリケーションを作成した後で(サービスアカウントと同様に)、サービスプリンシパルオブジェクトを介して、サブスクリプションに対する閲覧者アクセス権をアプリケーションに付与する必要があります。
1. [サブスクリプション] -> 貴社のサブスクリプション -> [アクセス制御 (IAM)] -> [追加]を選択します。[閲覧者]ロールを選択し、前のステップのアプリケーション登録名を入力して、表示されたアプリケーションを選択し、[保存]ボタンをクリックします。
Splunkで使用したいサブスクリプションが複数ある場合、サブスクリプションごとに上記のステップを繰り返します。
イベントハブ名前空間には1つ以上のイベントハブが含まれます。構成されたAzureサービスがこの名前空間にイベントハブを作成し、アクティビティログと診断ログを保存します。
1. [イベント ハブ] -> [追加]を選択します。名前、リソースグループ、その他の設定を入力し、[作成]を選択します。
2. イベントハブ名前空間を作成したら、キーコンテナーに保存するキーを取得する必要があります。
作成したイベントハブ名前空間で、[共有アクセスポリシー] -> [RootManageSharedAccessKey]を選択し、プライマリキーをコピーします。
ポリシー名とプライマリキーをメモしてください。
アプリケーションID | 11111111-1111-1111-1111-111111111111 |
アプリケーションキー | 22222222-2222-2222-2222-222222222222 |
イベントハブ名前空間 | 例:splunkdev |
イベントハブのポリシー名 | RootManageSharedAccessKey |
イベントハブのプライマリキー | 1234asdf4321fdsa1234asdf4321fdsa |
Azure ADアプリケーションキー(パスワードのようなもの)やイベントハブ名前空間キーはAzure Monitor Add-on for Splunkに保存されず、キーコンテナーから取得します。
1. [キーコンテナー] -> [追加]を選択します。名前、リソースグループ、その他の設定を入力し、[作成]を選択します。
注:デフォルトでは、キーコンテナーのほとんどのアクションを実行できるアクセスポリシーが現在のユーザーに付与されます。次のステップでは、今回のAzure ADアプリケーションに別のアクセスポリシーを追加します。
2. [キーコンテナー] -> 作成したキーコンテナー -> [アクセスポリシー] -> [新規追加]を選択します。
3. [プリンシパルの選択]をクリックします。Azure ADアプリケーション登録の名前を入力し、表示されたAzure ADアプリケーション登録の名前を選択し、[選択]をクリックします。
4. シークレットのアクセス許可のリストから[取得]を選択し、[OK]を選択します。
5. [保存]を選択します。
アプリケーションID 11111111-1111-1111-1111-111111111111 アプリケーションキー 22222222-2222-2222-2222-222222222222
イベントハブ名前空間 例:splunkdev イベントハブのポリシー名 RootManageSharedAccessKey イベントハブのプライマリキー 1234asdf4321fdsa1234asdf4321fdsa
キーコンテナー名 作成したキーコンテナー名
1. [キーコンテナー] -> 作成したキーコンテナー -> [シークレット] -> [生成/インポート]を選択します。
\
2. 名前を入力し、イベントハブ名前空間のプライマリキーを[値]に貼り付け、RootManageSharedAccessKeyを[コンテンツの種類]に入力し、[作成]を選択します。
3. 作成したシークレットの現在のバージョンを選択し、シークレットのバージョンをコピーしておきます。
4. Azure ADアプリケーションのキーに対しても、このステップを繰り返します。
名前を入力し、キーを[値]に貼り付け、アプリケーションIDを[コンテンツの種類]に貼り付け、[作成]を選択します。
5. 作成したシークレットの現在のバージョンを選択し、シークレットのバージョンをコピーしておきます。
アプリケーションID | 11111111-1111-1111-1111-111111111111 |
アプリケーションキー | 22222222-2222-2222-2222-222222222222 |
イベントハブ名前空間 | 例:splunkdev |
イベントハブのポリシー名 | RootManageSharedAccessKey |
イベントハブのプライマリキー | 1234asdf4321fdsa1234asdf4321fdsa |
キーコンテナー名 | 作成したキーコンテナー名 |
イベントハブキーのシークレット名 | 例:myEventHubKey |
イベントハブキーのシークレットバージョン | 1234asdf4321fdsa1234asdf4321fdsa |
アプリケーションキーのシークレット名 | 例:myAppKey |
アプリケーションキーのシークレットバージョン | 1234asdf4321fdsa1234asdf4321fdsa |
必要な設定は以上です。ここまでのAzure Monitorの設定作業をまとめると以下の通りです。
1) Azure ADアプリケーション登録を作成しました。これはユーザーアカウントやサービスアカウントに似ていて、アプリケーションIDはユーザーID、アプリケーションキーはパスワードのようなものです。
2) サブスクリプションに対する閲覧者アクセス権をAzure ADアプリケーションに付与しました。これは、サービスプリンシパルオブジェクトを介して行いました。
3) イベントハブ名前空間を作成しました。
4) キーコンテナーを作成しました。
5) キーコンテナーに保存されたシークレットに対する取得アクセス権をAzure ADアプリケーションに付与しました。
6) Azure ADアプリケーションキーとイベントハブ名前空間キーをキーコンテナーに保存しました。
次に、Azureのいくつかのデータにアクセスできるように設定します。
1. [モニター] -> [アクティビティログ] -> [エクスポート]を選択します。
2. エクスポートするサブスクリプションとリージョンを選択し、保持期間を設定して、[Export to an event hub]ボックスをチェックします。[Service Bus名前空間]を選択し、先ほど作成したイベントハブ名前空間とポリシー名を選択して、[OK] -> [保存]を選択します。
診断ログはリソースレベルで構成します。診断ログの構成は、Azure Portal、PowerShell、Azure CLIで行うことができます。ここでは、診断ログの設定を有効にする方法について、より詳しく説明します。
例として、先ほど作成したイベントハブの診断ログを有効にします。
1. [イベントハブ] -> 作成したイベントハブ -> [診断ログ]を選択し、[診断を有効にする]を選択します。
2. 名前を入力し、[Stream to an event hub]ボックスをチェックし、作成したイベントハブとアクセスポリシーを選択し、[OK]を選択します。イベントハブに送るログを選択し、[保存]を選択します。
アクティビティログや診断ログは「すべてかゼロ」、つまりオンかオフにしかできません。メトリックはそうでなく、収集したいメトリックを選択できます。ログ収集するメトリックを構成するには、リソースに「Metrics」というタグを作成します。ここでは、先ほど作成したイベントハブを使用した例を紹介します。
1. [タグ]を選択し、タグ名として「Metrics」と入力します。値には、このリソースで利用可能なすべてのメトリックを収集するためにアスタリスク(*)を入力するか、具体的なメトリック名のカンマ区切りのリストを入力し、[保存]を選択します。
こちらに各リソースタイプで利用可能なメトリックの一覧があります。
注1:メトリック名を明示的に指定する場合は、「メトリックの表示名」を使用してください。たとえば、「IncomingRequests」ではなく、「受信要求」を使用します。
注2:"すべてのリソースにMetrics:*と設定し、アドオンで詳細を選別すればよいと思われるかもしれません。理論上はうまく行くはずで、アドオン側でその選別は可能です。しかし、コンピューティングの世界では、あらゆるものに上限や制約があります。その1つが、ARMのAPIに送ることができるクエリー文字列の長さです。たとえば、Redis Cacheのリソースには多数のメトリックがあります。Redis Cacheのメトリックすべてをリクエストすると、クエリー文字列の上限(2048バイト)を簡単に超えてしまいます。このような場合のベストプラクティスは、一般的な主要メトリックに絞ることでリクエストされるメトリック数を抑え、それから必要に応じて掘り下げていくことです」
出典 -> https://github.com/Microsoft/AzureMonitorAddonForSplunk/wiki/Configuration-of-Azure
Azure Monitor for Splunk Add-onを使用してSplunkにデータを取り込むために、Azure側の設定は以上です。Azure ADアプリケーション、イベントハブ名前空間、キーコンテナー、サービスプリンシパル、アクティビティログ、診断ログ、メトリック収集タグを設定しました。次のブログ記事では、Azure Monitor Add-on for Splunkのインストールと、Azure側でアクセスできるようにしたすべてのデータを取り出すためのデータ入力設定について解説します。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。