Integrate Microsoft Entra ID Protection with Google SecOps
This document describes how to integrate Azure AD Identity Protection with Google Security Operations (Google SecOps).
Integration version: 6.0
Prerequisites
Before you configure the integration in the Google SecOps platform, complete the following prerequisite steps:
Create the Microsoft Entra app.
Configure the API permissions for your app.
Create a client secret.
Create Microsoft Entra app
Sign in to the Azure portal as a user administrator or a password administrator.
Select Microsoft Entra ID.
Go to App registrations > New registration.
Enter the name of the app.
Click Register.
Save the Application (client) ID and Directory (tenant) ID values to use them later when configuring the integration parameters.
Configure API permissions
Go to API Permissions > Add a permission.
Select Microsoft Graph.
In the Select Permissions section, select the following permissions:
IdentityRiskEvent.Read.All
IdentityRiskyUser.ReadWrite.All
Click Add permissions.
Click Grant admin consent for
YOUR_ORGANIZATION_NAME
.When the Grant admin consent confirmation dialog appears, click Yes.
Create client secret
Navigate to Certificates and secrets > New client secret.
Provide a description for a client secret and set its expiration deadline.
Click Add.
Save the value of the client secret (not the secret ID) to use it as the
Client Secret
parameter value when configuring the integration. The client secret value is only displayed once.
Integration parameters
Use the following parameters to configure the integration:
Parameter Display Name | Type | Default Value | Is Mandatory | Description |
---|---|---|---|---|
API Root | String | https://graph.microsoft.com | Yes | API root of the Microsoft Entra ID Protection instance. |
Tenant ID | String | N/A | Yes | Tenant ID of the Microsoft Entra ID Protection account. |
Client ID | String | N/A | Yes | Client ID of the Microsoft Entra ID Protection account. |
Client Secret | Password | N/A | Yes | Client Secret of the Microsoft Entra ID Protection account. |
Verify SSL | Checkbox | Checked | Yes | If enabled, verifies that the SSL certificate for the connection to the Microsoft Entra ID Protection server is valid. |
For instructions about how to configure an integration in Google SecOps, see Configure integrations.
You can make changes at a later stage, if needed. After you configure an integration instance, you can use it in playbooks. For more information about how to configure and support multiple instances, see Supporting multiple instances.
Actions
For more information about actions, see Respond to pending actions from Your Workdesk and Perform a manual action.
Ping
Test the connectivity to Microsoft Entra ID Protection.
Parameters
N/A
Run On
The action doesn't run on entities, nor has mandatory input parameters.
Action Results
Script Result
Script Result Name | Value Options | Example |
---|---|---|
is_success | True/False | is_success:False |
Case Wall
Result type | Value/Description | Type (Entity \ General) |
---|---|---|
Output message* | The action should not fail nor stop a playbook execution: If successful: "Successfully connected to the Azure AD Identity Protection server with the provided connection parameters!" The action should fail and stop a playbook execution: If not successful: "Failed to connect to the Azure AD Identity Protection server! Error is {0}".format(exception.stacktrace) |
General |
Enrich Entities
Enrich entities using information from Microsoft Entra ID Protection. Supported entities: Username, Email Address (user entity that matches email regular expression pattern).
Parameters
Parameter Display Name | Type | Default Value | Is Mandatory | Description |
---|---|---|---|---|
Create Insight | Checkbox | Checked | No | If enabled, the action creates an insight containing all of the retrieved information about the entity. |
Run On
This action runs on the Username entity.
Action Results
Script Result
Script Result Name | Value Options | Example |
---|---|---|
is_success | True/False | is_success:False |
JSON Result
{
"id": "2600d017-84a1-444f-94ba-4bebed30b09e",
"isDeleted": false,
"isProcessing": false,
"riskLevel": "none",
"riskState": "remediated",
"riskDetail": "userPerformedSecuredPasswordChange",
"riskLastUpdatedDateTime": "2021-09-02T14:10:48Z",
"userDisplayName": "user_1",
"userPrincipalName": "user_1@example.com"
}
Entity Enrichment
Enrichment Field Name | Logic - When to apply |
---|---|
is_deleted | When available in JSON |
is_processing | When available in JSON |
risk_level | When available in JSON |
risk_state | When available in JSON |
risk_detail | When available in JSON |
risk_updated | When available in JSON |
display_name | When available in JSON |
principal_name | When available in JSON |
Case Wall
Result type | Value/Description | Type (Entity \ General) |
---|---|---|
Output message* | The action should not fail nor stop a playbook execution: If data is available for one entity (is_success=true): "Successfully enriched the following entities using information from Azure AD Identity Protection: {entity.identifier}". If data is not available for one entity (is_success=true): "Action wasn't able to enrich the following entities using information from Azure AD Identity Protection: {entity.identifier}". If data is not available for all entities (is_success=false): "None of the provided entities were enriched." The action should fail and stop a playbook execution: If a fatal error, like wrong credentials, no connection to the server, other is reported: "Error executing action "Enrich Entities". Reason: {0}''.format(error.Stacktrace) |
General |
Case Wall Table | Table Name: {entity.identifier} Table Columns:
|
Entity |
Update User State
Update state of the user in Microsoft Entra ID Protection. Supported entities: Username, Email Address (user entity that matches email regular expression pattern).
Parameters
Parameter Display Name | Type | Default Value | Is Mandatory | Description |
---|---|---|---|---|
State | DDL | Compromised Possible Values:
|
No | Specify the state for the users. |
Run On
This action runs on the Username entity.
Action Results
Script Result
Script Result Name | Value Options | Example |
---|---|---|
is_success | True/False | is_success:False |
Case Wall
Result type | Value/Description | Type (Entity \ General) |
---|---|---|
Output message* | The action should not fail nor stop a playbook execution: If the 204 status code is reported for one user (is_success=true): "Successfully updated the state of the following users in Azure AD Identity Protection: {entity identifier}". If one user is not found (is_success=true): "The following users were not found in Azure AD Identity Protection:"{entity.identifier}" If all users are not found (is_success=true): "None of the provided users were not found in Azure AD Identity Protection." The action should fail and stop a playbook execution: If a fatal error, like wrong credentials, no connection to the server, other is reported: "Error executing action "Update User State". Reason: {0}''.format(error.Stacktrace)' |
General |
Connectors
For more detail about how to configure connectors in Google SecOps, see Ingest your data (connectors).
Azure AD Identity Protection - Risk Detections Connector
Pull information about risk detections from Microsoft Entra ID Protection.
The dynamic list filter works with the riskEventType
parameter.
Connector parameters
Use the following parameters to configure the connector:
Parameter Display Name | Type | Default Value | Is Mandatory | Description |
---|---|---|---|---|
Product Field Name | String | Product Name | Yes |
The name of the field where the product name is stored. The default value is The product name primarily impacts mapping. To streamline and improve the mapping process for the connector, the default value resolves to a fallback value that is referenced from the code. Any invalid input for this parameter resolves to a fallback value by default. |
Event Field Name | String | riskEventType | Yes | The name of the field that determines the event name (subtype). |
Environment Field Name | String | "" | No | The name of the field where the environment name is stored. If the environment field is missing, the connector uses the default value. |
Environment Regex Pattern |
String | .* | No |
A regular expression pattern to run on the value found in the
Use the default value If the regular expression pattern is null or empty, or the environment value is null, the final environment result is the default environment. |
PythonProcessTimeout | Integer | 180 | Yes | The timeout limit, in seconds, for the Python process that runs the current script. |
API Root | String | https://graph.microsoft.com | Yes | API root of the Microsoft Entra ID Protection instance. |
Tenant ID | String | N/A | Yes | Tenant ID of the Microsoft Entra ID Protection account. |
Client ID | String | N/A | Yes | Client ID of the Microsoft Entra ID Protection account. |
Client Secret | Password | N/A | Yes | Client Secret of the Microsoft Entra ID Protection account. |
Lowest Risk Level To Fetch | String | N/A | No | The lowest risk that needs to be used to fetch alerts. Possible values: If no value is specified, the connector ingests risk detections with all risk levels. |
Max Hours Backwards | Integer | 1 | No | The number of hours for which risk detections should be fetched. |
Max Alerts To Fetch | Integer | 100 | No | The number of alerts to process per one connector iteration. |
Use whitelist as a blacklist |
Checkbox | Unchecked | Yes | If selected, the connector uses the dynamic list as a blocklist. |
Verify SSL | Checkbox | Checked | Yes | If selected, the integration validates the SSL certificate when connecting to the Microsoft Entra ID Protection server. |
Proxy Server Address | String | N/A | No | The address of the proxy server to use. |
Proxy Username | String | N/A | No | The proxy username to authenticate with. |
Proxy Password | Password | N/A | No | The proxy password to authenticate with. |
Connector rules
The connector supports proxies.
Need more help? Get answers from Community members and Google SecOps professionals.