Azure DevOps 監査ログを収集する

以下でサポートされています。

概要

このパーサーは、Azure DevOps 監査ログを JSON 形式で処理します。ネストされた JSON 構造とトップレベルの JSON 構造からフィールドを抽出し、UDM にマッピングします。特定のフィールド値に基づく条件ロジックにより、イベントが分類され、関連するセキュリティ情報によって出力が拡充されます。また、パーサーは、grok パターンを使用して JSON ペイロードの抽出を試行することで、JSON 形式以外のメッセージを処理します。

始める前に

  • Google SecOps インスタンスがあることを確認します。
  • アクティブな Azure DevOps 組織があることを確認します。
  • Azure Devops 組織と Azure に対する特権アクセス権があることを確認します。

Azure Devops ログを取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [新しく追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: Azure Devops ログ)。
  4. [ソースタイプ] として [Webhook] を選択します。
  5. [ログタイプ] として [Azure Devops] を選択します。
  6. [次へ] をクリックします。
  7. 省略可: 次の入力パラメータの値を指定します。
    • 分割区切り文字: ログ行を区切るために使用される区切り文字(\n など)。
    • アセットの名前空間: アセットの名前空間
    • 取り込みラベル: このフィードのイベントに適用されるラベル。
  8. [次へ] をクリックします。
  9. [Finalize] 画面でフィードの設定を確認し、[送信] をクリックします。
  10. [秘密鍵を生成する] をクリックして、このフィードを認証するためのシークレット キーを生成します。
  11. シークレット キーをコピーして保存します。この秘密鍵を再び表示することはできません。必要に応じて、新しい秘密鍵を再生成できますが、この操作により以前の秘密鍵は無効になります。
  12. [詳細] タブで、[エンドポイント情報] フィールドから、フィードのエンドポイント URL をコピーします。このエンドポイント URL は、クライアント アプリケーションで指定する必要があります。
  13. [完了] をクリックします。

Webhook フィードの API キーを作成する

  1. Google Cloud コンソール > [認証情報] に移動します。

    [認証情報] に移動

  2. [認証情報を作成] をクリックして [API キー] を選択します。

  3. API キーのアクセスを Google Security Operations API に制限します。

エンドポイント URL を指定する

  1. クライアント アプリケーションで、Webhook フィードで指定された HTTPS エンドポイント URL を指定します。
  2. 次の形式でカスタム ヘッダーの一部として API キーとシークレット キーを指定して、認証を有効にします。

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    推奨事項: API キーは URL ではなくヘッダーとして指定してください。Webhook クライアントがカスタム ヘッダーをサポートしていない場合は、次の形式のクエリ パラメータを使用して API キーとシークレット キーを指定できます。

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

次のように置き換えます。

  • ENDPOINT_URL: フィードのエンドポイント URL。
  • API_KEY: Google Security Operations の認証に使用する API キー。
  • SECRET: フィードの認証用に生成したシークレット キー。

Azure Devops で監査機能を構成する

  1. 組織(https://dev.azure.com/{yourorganization})にログインします。
  2. 歯車アイコンを選択して [組織の設定] を開きます。
  3. [セキュリティ] で [ポリシー] を選択します。
  4. [監査イベントをログに記録] ボタンを [オン] に切り替えます。

Azure で Event Grid トピックを構成する

  1. Azure Portal にログインします。
  2. Event Grid を検索してアクセスします。
  3. [カスタム イベント] で [トピック] を見つけます。
  4. [+ 作成] をクリックします。
  5. サブスクリプションリソース グループを選択します。名前(DevopsAuditLog など)を指定し、リージョンを選択します。[確認して作成] をクリックします。
  6. 新しいトピックにアクセスし、トピック エンドポイント URL をコピーします。
  7. [設定] > [アクセスキー] に移動し、[キー 1] をコピーします。

Azure Devops ログストリームを Event Grid に構成する

  1. 組織(https://dev.azure.com/{yourorganization})にログインします。
  2. 歯車アイコンを選択して [組織の設定] を開きます。
  3. [監査] を選択します。
  4. [ストリーム] タブに移動し、[新しいストリーム] > [イベント グリッド] を選択します。
  5. Azure で Event Grid トピックを構成するで作成したトピック エンドポイントアクセスキーを入力します。

Google SecOps 用に Azure DevOps で Webhook を構成する

  1. Azure Portal で [Event Grid] を検索してアクセスします。
  2. 以前に作成したトピックを選択します。
  3. [エンティティ] > [イベント サブスクリプション] に移動します。
  4. [+ イベント サブスクリプション] をクリックします。
  5. わかりやすい名前を指定します(例: Google SecOps インテグレーション)。
  6. [ウェブフック] を選択し、[エンドポイントを構成する] をクリックします。
  7. エンドポイントを構成します。
    • サブスクライバー エンドポイント: Google SecOps API エンドポイントの URL を入力します。
    • ペイロード URL に ?key=<API_KEY>&secret=<SECRET_KEY> を追加します。
    • Content-Type ヘッダーを application/json に設定します。
  8. [作成] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
ActivityId metadata.product_log_id records フィールドが存在しない場合、未加工ログの Id フィールドから直接マッピングされます。records が存在する場合は、data オブジェクト内の ActivityId フィールドからマッピングされます。
ActionId metadata.product_event_type data オブジェクト内の ActionId フィールドから直接マッピングされます。
ActorCUID additional.fields 追加フィールドとして、キー「Actor CUID」で指定します。
ActorDisplayName principal.user.user_display_name 「Azure DevOps Service」以外の場合は、ActorDisplayName フィールドから直接マッピングされます。「Azure DevOps Service」の場合は、ラベルとして principal.resource.attribute.labels に追加されます。
ActorUPN principal.user.email_addresses メールアドレスのパターンと一致する場合は、ActorUPN フィールドから直接マッピングされます。
ActorUserId principal.user.userid ActorUserId フィールドから直接マッピングされます。
Area target.application Area 値の前に「DevOps」を追加して target.application フィールドを作成するために使用します。
AuthenticationMechanism extensions.auth.auth_detailssecurity_result.rule_id 解析され、認証の詳細とルール ID が抽出されます。認証の詳細は extensions.auth.auth_details にマッピングされます。抽出されたルール ID は security_result.rule_id にマッピングされます。
CategoryDisplayName security_result.action_details security_result.action_details に直接マッピングされます。
City principal.location.city City フィールドから直接マッピングされます。
Conditions additional.fields キー「条件」の追加フィールドとして追加されました。
Country principal.location.country_or_region Country フィールドから直接マッピングされます。
Data.* 各種 Data オブジェクト内のフィールドは、名前とコンテキストに基づいて異なる UDM フィールドにマッピングされます。具体的な例については、以下をご覧ください。
Data.AccessLevel target.resource.attribute.labels キー「AccessLevel」のラベルとして追加されました。
Data.AgentId target.resource.product_object_id PipelineIdAuthorizationId が存在しない場合、target.resource.product_object_id にマッピングされます。
Data.AgentName target.resource.name PipelineNameNamespaceNameDisplayName が存在しない場合、target.resource.name にマッピングされます。
Data.AuthorizationId target.resource.product_object_id PipelineId が存在しない場合、target.resource.product_object_id にマッピングされます。
Data.CallerProcedure additional.fields キー「CallerProcedure」の追加フィールドとして追加されました。
Data.CheckSuiteId additional.fields キー「CheckSuiteId」の追加フィールドとして追加されました。
Data.CheckSuiteStatus additional.fields キー「CheckSuiteStatus」の追加フィールドとして追加されました。
Data.ConnectionId additional.fields キー「ConnectionId」を持つ追加フィールドとして追加されました。
Data.ConnectionName additional.fields キー「ConnectionName」を持つ追加フィールドとして追加されました。
Data.ConnectionType additional.fields キー「ConnectionType」の追加フィールドとして追加されました。
Data.DefinitionId additional.fields キー「DefinitionId」を持つ追加フィールドとして追加されました。
Data.DeploymentResult additional.fields キー「DeploymentResult」の追加フィールドとして追加されました。
Data.DisplayName target.resource.name PipelineNameNamespaceName が存在しない場合、target.resource.name にマッピングされます。
Data.EndpointIdList additional.fields キー「EndpointIdList」を持つ追加フィールドとして追加されました。
Data.EnvironmentName additional.fields キー「EnvironmentName」を持つ追加フィールドとして追加されました。
Data.Filter.continuationToken target.resource.attribute.labels キー「continuation_token」のラベルとして追加されました。
Data.Filter.endTime target.resource.attribute.labels キー「filter_end_time」のラベルとして追加されました。
Data.Filter.startTime target.resource.attribute.labels キー「filter_start_time」のラベルとして追加されました。
Data.FinishTime additional.fields キー「FinishTime」の追加フィールドとして追加されました。
Data.GroupId target.group.product_object_id Data.Updates.0.GroupId が存在しない場合、target.group.product_object_id に直接マッピングされます。
Data.GroupName target.group.group_display_name target.group.group_display_name に直接マッピングされます。
Data.JobName additional.fields キー「JobName」の追加フィールドとして追加されました。
Data.MemberId target.user.userid Data.Updates.0.MemberId が存在しない場合、target.user.userid に直接マッピングされます。
Data.MemberDisplayName target.user.user_display_name target.user.user_display_name に直接マッピングされます。
Data.NamespaceId target.resource.product_object_id PipelineIdAuthorizationIdAgentId が存在しない場合、target.resource.product_object_id にマッピングされます。
Data.NamespaceName target.resource.name PipelineName が存在しない場合、target.resource.name にマッピングされます。
Data.ownerDetails additional.fields キー「OwnerDetails」の追加フィールドとして追加されました。
Data.OwnerId additional.fields キー「OwnerId」の追加フィールドとして追加されました。
Data.PipelineId target.resource.product_object_id target.resource.product_object_id に直接マッピングされます。
Data.PipelineName target.resource.name target.resource.name に直接マッピングされます。
Data.PipelineRevision target.resource.attribute.labels キー「PipelineRevision」のラベルとして追加されました。
Data.PipelineScope target.resource.attribute.labels キー「PipelineScope」のラベルとして追加されました。
Data.PlanType additional.fields キー「PlanType」の追加フィールドとして追加されました。
Data.PreviousAccessLevel target.resource.attribute.labels キー「PreviousAccessLevel」のラベルとして追加されました。
Data.PublisherName target.resource.attribute.labels キー「PublisherName」のラベルとして追加されました。
Data.Reason additional.fields キー「Reason」の追加フィールドとして追加されました。
Data.ReleaseId additional.fields キー「ReleaseId」の追加フィールドとして追加されました。
Data.ReleaseName additional.fields キー「ReleaseName」の追加フィールドとして追加されました。
Data.RequesterId additional.fields キー「RequesterId」を持つ追加フィールドとして追加されました。
Data.RetentionLeaseId additional.fields キー「RetentionLeaseId」の追加フィールドとして追加されました。
Data.RetentionOwnerId additional.fields キー「RetentionOwnerId」を持つ追加フィールドとして追加されました。
Data.RunName additional.fields キー「RunName」の追加フィールドとして追加されました。
Data.Scopes target.resource.attribute.labels キー「Scope」のラベルとして追加されました。
Data.StageName additional.fields キー「StageName」の追加フィールドとして追加されました。
Data.StartTime additional.fields キー「StartTime」の追加フィールドとして追加されました。
Data.TargetUser target.user.userid target.user.userid に直接マッピングされます。
Data.Timestamp metadata.event_timestamp 解析され、metadata.event_timestamp にマッピングされます。
Data.TokenType target.resource.attribute.labels キー「TokenType」のラベルとして追加されました。
Data.Updates.0.GroupId target.group.product_object_id target.group.product_object_id に直接マッピングされます。
Data.Updates.0.MemberId target.user.userid target.user.userid に直接マッピングされます。
Data.ValidFrom target.resource.attribute.labels キー「ValidFrom」のラベルとして追加されました。
Data.ValidTo target.resource.attribute.labels キー「ValidTo」のラベルとして追加されました。
DewPoint additional.fields キー「DewPoint」の追加フィールドとして追加されました。
Details metadata.description metadata.description に直接マッピングされます。
Humidity additional.fields キー「Humidity」の追加フィールドとして追加されました。
Icon additional.fields キー「Icon」の追加フィールドとして追加されました。
Id metadata.product_log_id metadata.product_log_id に直接マッピングされます。
IpAddress principal.ip principal.ip に直接マッピングされます。
MoonPhase additional.fields キー「MoonPhase」の追加フィールドとして追加されました。
Moonrise additional.fields キー「Moonrise」の追加フィールドとして追加されました。
Moonset additional.fields キー「Moonset」の追加フィールドとして追加されました。
OperationName metadata.product_event_type metadata.product_event_type に直接マッピングされます。
Precipitation additional.fields キー「Precipitation」の追加フィールドとして追加されました。
Pressure additional.fields キー「Pressure」の追加フィールドとして追加されました。
ProjectId target.resource_ancestors.product_object_id 祖先が CLOUD_PROJECT 型の場合に、target.resource_ancestors 内の product_object_id フィールドに値を設定するために使用されます。
ProjectName target.resource_ancestors.nametarget.resource.attribute.labels 祖先が CLOUD_PROJECT タイプの場合に、target.resource_ancestors 内の name フィールドに値を設定するために使用されます。また、キー「ProjectName」で target.resource.attribute.labels にラベルとして追加されました。
RoleLocation target.location.name target.location.name に直接マッピングされます。
ScopeDisplayName target.resource_ancestors.name 祖先が CLOUD_ORGANIZATION タイプの場合に、target.resource_ancestors 内の name フィールドに値を設定するために使用されます。
ScopeId target.resource_ancestors.product_object_id 祖先が CLOUD_ORGANIZATION タイプの場合に、target.resource_ancestors 内の product_object_id フィールドに値を設定するために使用されます。
ScopeType additional.fields キー「ScopeType」を持つ追加フィールドとして追加されました。
Sunrise additional.fields キー「Sunrise」の追加フィールドとして追加されました。
Sunset additional.fields キー「Sunset」の追加フィールドとして追加されました。
Temperature additional.fields 追加フィールドとして、キー「Temperature」が追加されました。
TenantId metadata.product_deployment_idadditional.fields metadata.product_deployment_id に直接マッピングされます。また、キー「TenantId」を持つ追加フィールドとして追加されました。
TimeGenerated metadata.event_timestamp 解析され、metadata.event_timestamp にマッピングされます。
UserAgent network.http.user_agentnetwork.http.parsed_user_agent network.http.user_agent に直接マッピングされます。解析され、network.http.parsed_user_agent にマッピングされます。
UVIndex additional.fields キー「UVIndex」の追加フィールドとして追加されました。
Visibility additional.fields キー「公開設定」の追加フィールドとして追加されました。
WindDirection additional.fields キー「WindDirection」の追加フィールドとして追加されました。
WindSpeed additional.fields キー「WindSpeed」の追加フィールドとして追加されました。
_Internal_WorkspaceResourceId additional.fields キー「workspace_resource_id」の追加フィールドとして追加されました。
なし metadata.event_type OperationName フィールドやその他のフィールドに基づくロジックによって決定されます。特定のイベントタイプが一致しない場合、デフォルトは「GENERIC_EVENT」です。有効な値は、「STATUS_SHUTDOWN」、「RESOURCE_CREATION」、「STATUS_UPDATE」、「USER_RESOURCE_DELETION」、「RESOURCE_READ」、「RESOURCE_WRITTEN」、「RESOURCE_DELETION」、「GROUP_MODIFICATION」です。
なし metadata.vendor_name 「Microsoft」に設定します。
なし metadata.product_name 「Azure DevOps」に設定します。
なし metadata.log_type 「AZURE_DEVOPS」に設定します。
なし principal.user.account_type AuthenticationMechanism に「ServicePrincipal」が含まれている場合は「SERVICE_ACCOUNT_TYPE」に設定し、それ以外の場合は「CLOUD_ACCOUNT_TYPE」に設定します。
なし target.asset.attribute.cloud.environment MICROSOFT_AZURE に設定します。
なし security_result.action 成功したオペレーション(Succeeded、Created、Modified、executed、updated、removed)の場合は「ALLOW」、失敗したオペレーション(Failed、TimedOut)の場合は「BLOCK」に設定します。
なし extensions.auth.mechanism summary が「UserAuthToken」の場合は「USERNAME_PASSWORD」に設定します。
なし target.resource.resource_type pipeline_id が存在する場合は「SETTING」、authorization_id が存在する場合は「CREDENTIAL」、agent_id が存在する場合は「DEVICE」、namespace_id が存在する場合は「DATABASE」に設定します。それ以外の場合は、operationName に基づいて「STORAGE_BUCKET」に設定される場合があります。
なし target.resource.resource_subtype pipeline_id が存在する場合は「Pipeline」、authorization_id が存在する場合は「Token」、agent_id が存在する場合は「Agent」、namespace_id が存在する場合は「Namespace」に設定します。

変更点

2024-01-19

  • プリンシパル ユーザーデータとターゲット リソースデータが存在する場合に、「metadata.eventtype」の値を「SERVICE*」から「USER_RESOURCE_UPDATE_CONTENT」に変更しました。
  • 「IpAddress」のマッピングを「target.ip」から「principal.ip」に変更しました。
  • 「ActorCUID」のマッピングを「principal.user.product_object_id」から「additional.fields」に変更しました。
  • 「ScopeId」のマッピングを「principal.asset_id」から「resource_ancestors.product_object_id」に変更しました。
  • 「_Internal_WorkspaceResourceId」のマッピングを「target.resource.product_object_id」から「additional.fields」に変更しました。
  • 「ProjectId」のマッピングを「target.resource.attribute.labels」から「target.resource_ancestors.product_object_id」に変更しました。
  • 「AuthenticationMechanism」のマッピングを「security_result.summary」から「extensions.auth.auth_details」に変更しました。
  • 「CorrelationId」のマッピングを「network.session_id」から「additional.fields」に変更しました。
  • 「ScopeDisplayName」のマッピングを「additional.fields」から「target.resource_ancestors.name」に変更しました。
  • 「PipelineId」のマッピングを「additional.fields」から「target.resource.product_object_id」に変更しました。
  • 「PipelineName」のマッピングを「additional.fields」から「target.resource.name」に変更しました。
  • 「PipelineScope」のマッピングを「additional.fields」から「target.resource.attribute.labels」に変更しました。
  • 「PipelineRevision」のマッピングを「additional.fields」から「target.resource.attribute.labels」に変更しました。
  • 「ProjectId」のマッピングを「target.resource.resource.attribute.labels」から「target.resource_ancestors.product_object_id」に変更しました。
  • 「Area」のマッピングを「additional.fields」から「target.application」に変更しました。
  • 「MICROSOFT_AZURE」の値を「target.asset.attribute.cloud.environment」にマッピングしました。
  • 「AuthenticationMechanism」の値が「ServicePrincipal」の場合、「SERVICE_ACCOUNT_TYPE」を「principal.user.account_type」に設定します。それ以外の場合は、「CLOUD_ACCOUNT_TYPE」を「principal.user.account_type」に設定します。
  • 「Category」を「security_result.action_details」にマッピングしました。
  • 「Details」フィールドに基づいて、「ALLOW」または「BLOCK」を「security_result.action」にマッピングしました。
  • 「ActivityId」を「additional.fields」にマッピングしました。

2024-01-09

  • 未解析の JSON ログを解析するための Grok と gsub を追加しました。
  • 「rec.correlationId」、「properties.currentHealthStatus」、「properties.previousHealthStatus」、「properties.type」、「properties.cause」、「properties.title」、「properties.details」、「properties.recommendationType」、「properties.recommendationCategory」、「properties.recommendationImpact」、「properties.recommendationName」、「properties.recommendationResourceLink」、「properties.recommendationSchemaVersion」、「properties.eventCategory」、「properties.hierarchy」、「properties.message」、「properties.entity」、「identity.claims.xms.tcdt」、「identity.claims.aio」、「identity.claims.appid」、「identity.claims.appidacr」、「identity.claims.aud」、「identity.claims.exp」、「identity.claims.iat」、「identity.claims.idtyp」、「identity.claims.iss」、「identity.claims.uti」、「identity.claims.rh」、「identity.claims.ver」、「identity.claims.nbf」、「identity.authorization.evidence.roleAssignmentId」、「identity.authorization.evidence.principalType」、「identity.authorization.evidence.principalId」、「identity.authorization.evidence.roleAssignmentScope」、「identity.authorization.evidence.roleDefinitionId」を「security_result.detection_fields」にマッピングしました。
  • 「resultSignature.label」、「rec.resultType」、「Visibility」、「Humidity」、「Precipitation」、「MoonPhase」、「Moonrise」、「Moonset」、「Pressure」、「WindSpeed」、「UVIndex」、「DewPoint」、「WindDirection」、「Sunrise」、「Sunset」、「Temperature」、「Icon」、「Conditions」を「additional.fields」にマッピングしました。
  • 「level」を「security_result.severity」にマッピングしました。
  • 「appname」を「target.application」にマッピングしました。
  • 「category.details」を「security.result.category.details」にマッピングしました。
  • 「rec.resourceId」を「target.resource.id」にマッピングしました。
  • 「res.extensionResourceName」を「principal.hostname」にマッピングしました。

2023-11-23

  • JSON ログの新しいパターンのサポートを追加しました。
  • 「data.TimeGenerated」を「metadata.event_timestamp」にマッピングしました。
  • 「_Internal_WorkspaceResourceId」がない場合、「topic」を「target.resource.product_object_id」にマッピングしました。
  • 「data.Data.ConnectionId」を「additional.fields」にマッピングしました。
  • 「data.Data.ownerDetails」を「additional.fields」にマッピングしました。
  • 「data.Data.DeploymentResult」を「additional.fields」にマッピングしました。
  • 「data.Data.EnvironmentName」を「additional.fields」にマッピングしました。
  • 「data.Data.JobName」を「additional.fields」にマッピングしました。
  • 「data.Data.StageName」を「additional.fields」にマッピングしました。
  • 「data.Data.RunName」を「additional.fields」にマッピングしました。
  • 「data.Data.RetentionLeaseId」を「additional.fields」にマッピングしました。
  • 「data.Data.CheckSuiteId」を「additional.fields」にマッピングしました。
  • 「data.Data.CheckSuiteStatus」を「additional.fields」にマッピングしました。
  • 「data.Data.ApprovalRequest」を「additional.fields」にマッピングしました。
  • 「data.Data.ApprovalType」を「additional.fields」にマッピングしました。
  • 「subject」を「additional.fields」にマッピングしました。
  • 「data.ActorUserId」を「principal.user.userid」にマッピングしました。
  • 「data.ActorDisplayName」を「principal.user.user_display_name」にマッピングしました。
  • 「data.ActorCUID」を「principal.user.product_object_id」にマッピングしました。
  • 「data.ActorUPN」を「principal.user.email_addresses」にマッピングしました。
  • 「data.ScopeId」を「principal.asset_id」にマッピングしました。
  • 「data.CorrelationId」を「network.session_id」にマッピングしました。
  • 「data.UserAgent」を「network.http.user_agent」にマッピングしました。
  • 「data.ProjectId」を「target.resource.attribute.labels」にマッピングしました。
  • 「data.ScopeType」を「additional.fields」にマッピングしました。
  • 「data.ProjectName」を「target.resource.attribute.labels」にマッピングしました。
  • 「data.Details」を「metadata.description」にマッピングしました。
  • 「data.CategoryDisplayName」を「security_result.rule_name」にマッピングしました。
  • 「data.Area」を「additional.fields」にマッピングしました。
  • 「data.Id」を「metadata.product_log_id」にマッピングしました。
  • 「data.ActionId」を「metadata.product_event_type」にマッピングしました。
  • 「data.Timestamp」を「metadata.event_timestamp」にマッピングしました。

2022-06-28

  • 新しく作成されたパーサー