Azure Storage 監査ログを収集する
このドキュメントでは、Azure Storage アカウントを使用して Azure Storage 監査ログを Google Security Operations にエクスポートする方法について説明します。パーサーは JSON 形式のログを処理し、Unified Data Model(UDM)に変換します。未加工のログからフィールドを抽出し、データ型の変換を行い、追加のコンテキスト(ユーザー エージェントの解析や IP アドレスの内訳など)でデータを拡充し、抽出されたフィールドを対応する UDM フィールドにマッピングします。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- アクティブな Azure テナント
- Azure への特権アクセス
Azure Storage アカウントを構成する
- Azure コンソールで、[ストレージ アカウント] を検索します。
- [作成] をクリックします。
- 次の入力パラメータの値を指定します。
- Subscription: サブスクリプションを選択します。
- リソース グループ: リソース グループを選択します。
- Region: リージョンを選択します。
- パフォーマンス: パフォーマンスを選択します(標準が推奨)。
- 冗長性: 冗長性(GRS または LRS を推奨)を選択します。
- ストレージ アカウント名: 新しいストレージ アカウントの名前を入力します。
- [Review + create] をクリックします。
- アカウントの概要を確認して、[作成] をクリックします。
- [ストレージ アカウントの概要] ページで、[セキュリティとネットワーキング] の [アクセスキー] サブメニューを選択します。
- [key1] または [key2] の横にある [Show] をクリックします。
- [クリップボードにコピー] をクリックして、キーをコピーします。
- キーは後で使用できるように安全な場所に保存します。
- [ストレージ アカウントの概要] ページで、[設定] の [エンドポイント] サブメニューを選択します。
- [クリップボードにコピー] をクリックして、Blob サービス エンドポイント URL(例:
https://<storageaccountname>.blob.core.windows.net
)をコピーします。 - エンドポイント URL は、後で使用できるように安全な場所に保存します。
Azure Storage 監査ログのログ エクスポートを構成する方法
- 特権アカウントを使用して Azure Portal にログインします。
- [ストレージ アカウント> 診断設定] に移動します。
- [+ 診断設定を追加] をクリックします。
blob
、queue
、table
、file
の診断設定を選択します。- 各診断設定の [カテゴリ グループ] で [allLogs] オプションを選択します。
- 各診断設定にわかりやすい名前を入力します。
- 移行先として [ストレージ アカウントにアーカイブする] チェックボックスをオンにします。
- サブスクリプションとストレージ アカウントを指定します。
- [保存] をクリックします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
このプロダクト ファミリー内で異なるログタイプに対して複数のフィードを構成するには、プロダクトごとにフィードを構成するをご覧ください。
1 つのフィードを設定する手順は次のとおりです。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Azure Storage 監査ログ)。
- [ソースタイプ] で [Microsoft Azure Blob Storage] を選択します。
- [ログタイプ] として [Azure Storage Audit] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- Azure URI: BLOB エンドポイント URL。
ENDPOINT_URL/BLOB_NAME
- 次のように置き換えます。
ENDPOINT_URL
: BLOB エンドポイント URL(https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: blob の名前(<logname>-logs
など)
- 次のように置き換えます。
- URI is a: ログストリームの構成([単一ファイル] | [ディレクトリ] | [サブディレクトリを含むディレクトリ])に応じて URI タイプを選択します。
Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
共有キー: Azure Blob Storage のアクセスキー。
アセットの名前空間: アセットの名前空間。
Ingestion labels: このフィードのイベントに適用されるラベル。
- Azure URI: BLOB エンドポイント URL。
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
コンテンツ ハブからフィードを設定する
次のフィールドに値を指定します。
- Azure URI: BLOB エンドポイント URL。
ENDPOINT_URL/BLOB_NAME
- 次のように置き換えます。
ENDPOINT_URL
: BLOB エンドポイント URL(https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: blob の名前(<logname>-logs
など)
- 次のように置き換えます。
- URI is a: ログストリームの構成([単一ファイル] | [ディレクトリ] | [サブディレクトリを含むディレクトリ])に応じて URI タイプを選択します。
- Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
- 共有キー: Azure Blob Storage のアクセスキー。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- Asset Namespace: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
callerIpAddress |
principal.asset.ip |
IP アドレスは、grok パターンを使用して callerIpAddress フィールドから抽出され、principal.asset.ip に割り当てられます。 |
callerIpAddress |
principal.ip |
IP アドレスは、grok パターンを使用して callerIpAddress フィールドから抽出され、principal.ip に割り当てられます。 |
callerIpAddress |
principal.port |
ポート番号は、grok パターンを使用して callerIpAddress フィールドから抽出され、principal.port に割り当てられます。 |
category |
security_result.category_details |
category フィールドの値が security_result.category_details に割り当てられます。 |
correlationId |
security_result.detection_fields[0].key |
リテラル文字列 correlationId がキーフィールドに割り当てられます。 |
correlationId |
security_result.detection_fields[0].value |
correlationId フィールドの値が security_result.detection_fields[0].value に割り当てられます。time フィールドの値はタイムスタンプとして解析され、event.idm.read_only_udm.metadata.event_timestamp に割り当てられます。category が StorageWrite で、principal.user.userid が存在する場合(properties.accountName から派生)、値は USER_RESOURCE_UPDATE_CONTENT に設定されます。category が StorageDelete で、principal.user.userid が存在する場合、値は USER_RESOURCE_DELETION に設定されます。それ以外の場合、値は USER_RESOURCE_ACCESS に設定されます。リテラル文字列 AZURE_STORAGE_AUDIT が event.idm.read_only_udm.metadata.log_type に割り当てられます。リテラル文字列 AZURE_STORAGE_AUDIT が event.idm.read_only_udm.metadata.product_name に割り当てられます。schemaVersion フィールドの値が event.idm.read_only_udm.metadata.product_version に割り当てられます。リテラル文字列 AZURE_STORAGE_AUDIT が event.idm.read_only_udm.metadata.vendor_name に割り当てられます。 |
location |
target.location.name |
location フィールドの値が target.location.name に割り当てられます。 |
operationName |
additional.fields[x].key |
リテラル文字列 operationName がキーフィールドに割り当てられます。 |
operationName |
additional.fields[x].value.string_value |
operationName フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
operationVersion |
additional.fields[x].key |
リテラル文字列 operationVersion がキーフィールドに割り当てられます。 |
operationVersion |
additional.fields[x].value.string_value |
operationVersion フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.accountName |
principal.user.userid |
properties.accountName フィールドの値が principal.user.userid に割り当てられます。 |
properties.clientRequestId |
additional.fields[x].key |
リテラル文字列 clientRequestId がキーフィールドに割り当てられます。 |
properties.clientRequestId |
additional.fields[x].value.string_value |
properties.clientRequestId フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.etag |
additional.fields[x].key |
リテラル文字列 etag がキーフィールドに割り当てられます。 |
properties.etag |
additional.fields[x].value.string_value |
properties.etag フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.objectKey |
additional.fields[x].key |
リテラル文字列 objectKey がキーフィールドに割り当てられます。 |
properties.objectKey |
additional.fields[x].value.string_value |
properties.objectKey フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.requestMd5 |
additional.fields[x].key |
リテラル文字列 requestMd5 がキーフィールドに割り当てられます。 |
properties.requestMd5 |
additional.fields[x].value.string_value |
properties.requestMd5 フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.responseMd5 |
additional.fields[x].key |
リテラル文字列 responseMd5 がキーフィールドに割り当てられます。 |
properties.responseMd5 |
additional.fields[x].value.string_value |
properties.responseMd5 フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.serviceType |
additional.fields[x].key |
リテラル文字列 serviceType がキーフィールドに割り当てられます。 |
properties.serviceType |
additional.fields[x].value.string_value |
properties.serviceType フィールドの値が additional.fields[x].value.string_value に割り当てられます。 |
properties.tlsVersion |
network.tls.version |
properties.tlsVersion フィールドの値が network.tls.version に割り当てられます。 |
properties.userAgentHeader |
network.http.parsed_user_agent |
properties.userAgentHeader フィールドの値はユーザー エージェント文字列として解析され、network.http.parsed_user_agent に割り当てられます。 |
properties.userAgentHeader |
network.http.user_agent |
properties.userAgentHeader フィールドの値が network.http.user_agent に割り当てられます。 |
protocol |
network.application_protocol |
protocol フィールドの値が network.application_protocol に割り当てられます。 |
resourceId |
target.resource.id |
resourceId フィールドの値が target.resource.id に割り当てられます。 |
resourceId |
target.resource.product_object_id |
resourceId フィールドの値が target.resource.product_object_id に割り当てられます。リテラル文字列 DATABASE が target.resource.resource_type に割り当てられます。 |
resourceType |
additional.fields[x].key |
リテラル文字列 resourceType がキーフィールドに割り当てられます。 |
resourceType |
additional.fields[x].value.string_value |
resourceType フィールドの値が additional.fields[x].value.string_value に割り当てられます。statusText が Success の場合、値は ALLOW に設定されます。 |
statusCode |
network.http.response_code |
statusCode フィールドの値は整数に変換され、network.http.response_code に割り当てられます。リテラル文字列 MICROSOFT_AZURE が target.cloud.environment に割り当てられます。 |
time |
timestamp |
time フィールドの値はタイムスタンプとして解析され、timestamp に割り当てられます。 |
uri |
network.http.referral_url |
uri フィールドの値が network.http.referral_url に割り当てられます。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。