Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -205,12 +205,12 @@
},
{
"title": "3. Veeam API Configuration",
"description": "Configure Veeam API credentials for all Veeam services (Malware Events, Security Analyzer, and Authorization Events).",
"description": "Configure Veeam Backup & Replication credentials for all VBR services (Malware Events, Security Analyzer, Authorization Events and Sessions). Sentinel authenticates via OAuth2 password grant and renews the token automatically.",
"instructions": [
{
"type": "Markdown",
"parameters": {
"content": "#### 3.1 Obtain Veeam API Access Token\n1. Access your Veeam Backup & Replication management console\n2. Navigate to the REST API settings or authentication section\n3. Generate or obtain a Bearer token for API access\n4. Ensure the token has appropriate permissions for:\n - Malware Detection API (v1.3-rev1)\n - Security & Compliance Analyzer API (v1.3-rev1)\n - Authorization Events API (v1.3-rev1)\n - Sessions API (v1.3-rev1)\n5. Note the API base URL (typically https://your-veeam-server.com:9419)\n6. This token will be used for both on-premises and CDN-hosted APIs"
"content": "#### 3.1 Configure Veeam Backup & Replication credentials\n1. Access your Veeam Backup & Replication management console.\n2. Use (or create) a user account that has REST API access with permissions for the Malware Detection, Security & Compliance Analyzer, Authorization Events and Sessions APIs (v1.3-rev1).\n3. Note the API base URL (typically https://your-veeam-server.com:9419).\n4. Microsoft Sentinel signs in with these credentials against `/api/oauth2/token` (OAuth2 password grant) and automatically refreshes the access token, so collection no longer stops when the token expires.\n5. Client ID / Client Secret are optional - leave them blank unless your Veeam server is configured to require a registered OAuth2 client."
}
},
{
Expand All @@ -228,25 +228,61 @@
{
"type": "Textbox",
"parameters": {
"label": "Veeam Bearer Token",
"placeholder": "Your Veeam API Bearer Token",
"label": "Veeam Username",
"placeholder": "DOMAIN\\username",
"type": "text",
"name": "veeamUsername",
"validations": {
"required": true
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Veeam Password",
"placeholder": "Your Veeam account password",
"type": "password",
"name": "veeamBearerToken",
"name": "veeamPassword",
"validations": {
"required": true
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Veeam Client ID (optional)",
"placeholder": "Leave blank unless your server requires an OAuth2 client",
"type": "text",
"name": "veeamClientId",
"validations": {
"required": false
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Veeam Client Secret (optional)",
"placeholder": "Leave blank unless your server requires an OAuth2 client",
"type": "password",
"name": "veeamClientSecret",
"validations": {
"required": false
}
}
}
]
},
{
"title": "4. Veeam ONE API Configuration",
"description": "Configure Veeam ONE API credentials for triggered alarms data collection.",
"description": "Configure Veeam ONE credentials for triggered alarms data collection. Sentinel authenticates via OAuth2 password grant and renews the token automatically.",
"instructions": [
{
"type": "Markdown",
"parameters": {
"content": "#### 4.1 Obtain Veeam ONE API Access Key\n1. Access your Veeam ONE management console\n2. Navigate to Administration -> Users and Roles\n3. Create or use an existing user with API access permissions\n4. Generate or obtain a Bearer token for API access\n5. Note the Veeam ONE server URL and port (typically https://your-veeam-one-server:1239)"
"content": "#### 4.1 Configure Veeam ONE credentials\n1. Access your Veeam ONE management console.\n2. Navigate to Administration -> Users and Roles and use (or create) a user with REST API access permissions.\n3. Note the Veeam ONE server URL and port (typically https://your-veeam-one-server:1239).\n4. Microsoft Sentinel signs in with these credentials against `/api/token` (OAuth2 password grant) and automatically refreshes the access token.\n5. Client ID / Client Secret are optional - leave them blank unless your Veeam ONE server requires a registered OAuth2 client."
}
},
{
Expand All @@ -264,14 +300,50 @@
{
"type": "Textbox",
"parameters": {
"label": "Veeam ONE API Bearer Token",
"placeholder": "Your Veeam ONE API Bearer Token",
"label": "Veeam ONE Username",
"placeholder": "DOMAIN\\username",
"type": "text",
"name": "veeamOneUsername",
"validations": {
"required": true
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Veeam ONE Password",
"placeholder": "Your Veeam ONE account password",
"type": "password",
"name": "veeamOneBearerToken",
"name": "veeamOnePassword",
"validations": {
"required": true
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Veeam ONE Client ID (optional)",
"placeholder": "Leave blank unless your server requires an OAuth2 client",
"type": "text",
"name": "veeamOneClientId",
"validations": {
"required": false
}
}
},
{
"type": "Textbox",
"parameters": {
"label": "Veeam ONE Client Secret (optional)",
"placeholder": "Leave blank unless your server requires an OAuth2 client",
"type": "password",
"name": "veeamOneClientSecret",
"validations": {
"required": false
}
}
}
]
},
Expand All @@ -292,4 +364,4 @@
]
}
}
}
}
67 changes: 47 additions & 20 deletions Solutions/Veeam/Data Connectors/Veeam_CCF/Veeam_PollerConfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,16 @@
"kind": "RestApiPoller",
"properties": {
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('veeamBearerToken')]",
"ApiKeyName": "Authorization",
"ApiKeyIdentifier": "Bearer"
"type": "OAuth2",
"GrantType": "password",
"TokenEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/oauth2/token')]",
"TokenEndpointHeaders": {
"x-api-version": "1.3-rev1"
},
"ClientId": "[[parameters('veeamClientId')]",
"ClientSecret": "[[parameters('veeamClientSecret')]",
Comment on lines +16 to +17
"UserName": "[[parameters('veeamUsername')]",
"Password": "[[parameters('veeamPassword')]"
Comment on lines +10 to +19
},
"request": {
"apiEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/v1/malwareDetection/events')]",
Expand Down Expand Up @@ -111,10 +117,13 @@
"kind": "RestApiPoller",
"properties": {
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('veeamOneBearerToken')]",
"ApiKeyName": "Authorization",
"ApiKeyIdentifier": "Bearer"
"type": "OAuth2",
"GrantType": "password",
"TokenEndpoint": "[[concat(parameters('veeamOneApiUrl'),'/api/token')]",
"ClientId": "[[parameters('veeamOneClientId')]",
"ClientSecret": "[[parameters('veeamOneClientSecret')]",
"UserName": "[[parameters('veeamOneUsername')]",
"Password": "[[parameters('veeamOnePassword')]"
},
"request": {
"apiEndpoint": "[[concat(parameters('veeamOneApiUrl'),'/api/v2.3/alarms/triggeredAlarms')]",
Expand Down Expand Up @@ -157,10 +166,16 @@
"kind": "RestApiPoller",
"properties": {
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('veeamBearerToken')]",
"ApiKeyName": "Authorization",
"ApiKeyIdentifier": "Bearer"
"type": "OAuth2",
"GrantType": "password",
"TokenEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/oauth2/token')]",
"TokenEndpointHeaders": {
"x-api-version": "1.3-rev1"
},
"ClientId": "[[parameters('veeamClientId')]",
"ClientSecret": "[[parameters('veeamClientSecret')]",
"UserName": "[[parameters('veeamUsername')]",
"Password": "[[parameters('veeamPassword')]"
},
"request": {
"apiEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/v1/securityAnalyzer/bestPractices')]",
Expand Down Expand Up @@ -198,10 +213,16 @@
"kind": "RestApiPoller",
"properties": {
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('veeamBearerToken')]",
"ApiKeyName": "Authorization",
"ApiKeyIdentifier": "Bearer"
"type": "OAuth2",
"GrantType": "password",
"TokenEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/oauth2/token')]",
"TokenEndpointHeaders": {
"x-api-version": "1.3-rev1"
},
"ClientId": "[[parameters('veeamClientId')]",
"ClientSecret": "[[parameters('veeamClientSecret')]",
"UserName": "[[parameters('veeamUsername')]",
"Password": "[[parameters('veeamPassword')]"
},
"request": {
"apiEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/v1/authorization/events')]",
Expand Down Expand Up @@ -252,10 +273,16 @@
"kind": "RestApiPoller",
"properties": {
"auth": {
"type": "APIKey",
"ApiKey": "[[parameters('veeamBearerToken')]",
"ApiKeyName": "Authorization",
"ApiKeyIdentifier": "Bearer"
"type": "OAuth2",
"GrantType": "password",
"TokenEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/oauth2/token')]",
"TokenEndpointHeaders": {
"x-api-version": "1.3-rev1"
},
"ClientId": "[[parameters('veeamClientId')]",
"ClientSecret": "[[parameters('veeamClientSecret')]",
"UserName": "[[parameters('veeamUsername')]",
"Password": "[[parameters('veeamPassword')]"
},
"request": {
"apiEndpoint": "[[concat(parameters('veeamApiUrl'),'/api/v1/sessions')]",
Expand Down
4 changes: 2 additions & 2 deletions Solutions/Veeam/Data/Solution_Veeam.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,9 @@
"WatchlistDescription": [],
"dependentDomainSolutionIds": [],
"BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\Veeam",
"Version": "3.1.0",
"Version": "3.2.0",
"DataConnectorCCFVersion": "3.1.0",
Comment on lines +196 to 197
"Metadata": "SolutionMetadata.json",
"TemplateSpec": false,
"Is1Pconnector": false
}
}
Binary file added Solutions/Veeam/Package/3.2.0.zip
Binary file not shown.
Loading
Loading