Azure APP Service ログを収集する
このドキュメントでは、Azure Storage アカウントを使用して Azure APP Service ログを Google Security Operations にエクスポートする方法について説明します。パーサーは、未加工の JSON 形式の Azure App Service ログを構造化された Unified Data Model(UDM)に変換します。未加工のログから関連するフィールドを抽出し、データのクリーニングと正規化を行い、抽出した情報を対応する UDM フィールドにマッピングします。最終的に、各ログエントリに対して UDM 準拠の JSON オブジェクトを出力します。
始める前に
次の前提条件を満たしていることを確認します。
- 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 AD サインイン ログのログ エクスポートを構成する方法
- 特権アカウントを使用して Azure Portal にログインします。
- [App Services] に移動し、使用中の必要なアプリ サービスを選択します。
- [モニタリング> App Service ログ] を選択します。
- [Application Logging (blob)] を [オン] にします。
- [ウェブ サービス ロギング] で [ストレージ] を選択します。
- [サブスクリプション] と [ストレージ アカウント] を選択します。
- 要件に応じて、保持期間と割り当てを定義します。
- [詳細なエラー メッセージ] を [オン] にします。
- [失敗したリクエストのトレース] をオンにします。
- [保存] をクリックします。
フィードを設定する
Google SecOps プラットフォームでフィードを設定するには、次の 2 つのエントリ ポイントがあります。
- [SIEM 設定] > [フィード]
- [Content Hub] > [Content Packs]
[SIEM 設定] > [フィード] でフィードを設定する
このプロダクト ファミリー内で異なるログタイプに対して複数のフィードを構成するには、プロダクトごとにフィードを構成するをご覧ください。
1 つのフィードを設定する手順は次のとおりです。
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例: Azure APP Service Logs)。
- [ソースタイプ] で [Microsoft Azure Blob Storage] を選択します。
- [ログタイプ] として [Azure APP Service] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- 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 の名前(insights-logs-<logname>
など)
- 次のように置き換えます。
- URI is a: ログストリームの構成([単一ファイル] | [ディレクトリ] | [サブディレクトリを含むディレクトリ])に応じて URI タイプを選択します。
- Source deletion options: 取り込みの設定に応じて削除オプションを選択します。
- 共有キー: Azure Blob Storage のアクセスキー。
詳細オプション
- フィード名: フィードを識別する事前入力された値。
- ソースタイプ: Google SecOps にログを収集するために使用される方法。
- Asset Namespace: フィードに関連付けられた名前空間。
- Ingestion Labels: このフィードのすべてのイベントに適用されるラベル。
UDM マッピング テーブル
ログフィールド | UDM マッピング | ロジック |
---|---|---|
AppRoleInstance | read_only_udm.principal.resource.product_object_id | 直接マッピング |
AppRoleName | read_only_udm.principal.resource.name | 直接マッピング |
AppVersion | read_only_udm.principal.resource.attribute.labels.value | 直接マッピング |
カテゴリ | read_only_udm.metadata.product_event_type | 直接マッピング |
CIp | read_only_udm.target.asset.ip | 直接マッピング |
CIp | read_only_udm.target.ip | 直接マッピング |
ClientCity | read_only_udm.principal.location.city | 直接マッピング |
ClientCountryOrRegion | read_only_udm.principal.location.country_or_region | 直接マッピング |
ClientIP | read_only_udm.principal.asset.ip | 直接マッピング |
ClientIP | read_only_udm.principal.ip | 直接マッピング |
ClientStateOrProvince | read_only_udm.principal.location.state | 直接マッピング |
ClientType | read_only_udm.additional.fields.value.string_value | 直接マッピング |
ComputerName | read_only_udm.principal.asset.hostname | 直接マッピング |
ComputerName | read_only_udm.principal.hostname | 直接マッピング |
Cookie | read_only_udm.principal.resource.attribute.labels.value | 直接マッピング |
CsBytes | read_only_udm.network.sent_bytes | CsBytes から名前変更 |
CsHost | read_only_udm.additional.fields.value.string_value | 直接マッピング |
CsMethod | read_only_udm.network.http.method | 直接マッピング |
CsUriQuery | read_only_udm.principal.resource.attribute.labels.value | 直接マッピング |
CsUriStem | read_only_udm.additional.fields.value.string_value | 直接マッピング |
CsUriStem | read_only_udm.target.url | 直接マッピング |
CsUsername | read_only_udm.principal.user.user_display_name | 直接マッピング |
EventIpAddress | read_only_udm.principal.asset.ip | 直接マッピング |
EventIpAddress | read_only_udm.principal.ip | 直接マッピング |
EventPrimaryStampName | read_only_udm.additional.fields.value.string_value | 直接マッピング |
EventStampName | read_only_udm.additional.fields.value.string_value | 直接マッピング |
EventStampType | read_only_udm.additional.fields.value.string_value | 直接マッピング |
ホスト | read_only_udm.principal.asset.hostname | 直接マッピング |
ホスト | read_only_udm.principal.hostname | 直接マッピング |
IKey | read_only_udm.target.resource.attribute.labels.value | 直接マッピング |
インスタンス | read_only_udm.additional.fields.value.string_value | 直接マッピング |
名前 | read_only_udm.additional.fields.value.string_value | 直接マッピング |
プロトコル | read_only_udm.additional.fields.value.string_value | 直接マッピング |
プロトコル | read_only_udm.network.application_protocol | プロトコルが HTTP/1.1 の場合、HTTP にマッピングされます |
リファラー | read_only_udm.network.http.referral_url | 直接マッピング |
ResourceGUID | read_only_udm.target.resource.product_object_id | ResourceGUID から名前が変更されました |
SDKVersion | read_only_udm.additional.fields.value.string_value | 直接マッピング |
SDKVersion | read_only_udm.principal.resource.attribute.labels.value | 直接マッピング |
SPort | read_only_udm.principal.port | SPort から名前変更 |
ScBytes | read_only_udm.network.received_bytes | ScBytes から名前を変更 |
ScStatus | read_only_udm.network.http.response_code | ScStatus から名前が変更されました |
TimeTaken | read_only_udm.additional.fields.value.string_value | 直接マッピング |
タイプ | read_only_udm.additional.fields.value.string_value | 直接マッピング |
ユーザー | read_only_udm.principal.user.userid | 直接マッピング |
UserAddress | read_only_udm.principal.asset.ip | 有効な IP アドレスの場合は UserAddress から抽出されます |
UserAddress | read_only_udm.principal.ip | 有効な IP アドレスの場合は UserAddress から抽出されます |
UserAgent | read_only_udm.network.http.user_agent | 直接マッピング |
UserDisplayName | read_only_udm.principal.user.user_display_name | 直接マッピング |
category | read_only_udm.metadata.product_event_type | 直接マッピング |
level | read_only_udm.security_result.severity | 大文字に変更され、レベルから名前が変更されました |
ロケーション | read_only_udm.principal.location.name | 直接マッピング |
operationName | read_only_udm.additional.fields.value.string_value | 直接マッピング |
record.properties.Protocol | read_only_udm.additional.fields.value.string_value | 直接マッピング |
record.properties.Result | read_only_udm.security_result.summary | 直接マッピング |
record.time | read_only_udm.metadata.event_timestamp | RFC 3339 タイムスタンプとして解析 |
resourceId | read_only_udm.target.resource.attribute.labels.value | 直接マッピング |
resourceId | read_only_udm.target.resource.product_object_id | resourceId から名前変更 |
read_only_udm.metadata.event_type | プリンシパル、ターゲット、プロトコルの有無に基づいて決定されます。プリンシパル、ターゲット、Protocol=HTTP が存在する場合は NETWORK_HTTP に設定します。プリンシパルとターゲットが存在する場合は NETWORK_CONNECTION に設定します。プリンシパルのみが存在する場合は STATUS_UPDATE に設定します。それ以外の場合は GENERIC_EVENT に設定します。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。