Skip to main content
Skip table of contents

Azure Blob Storage

LAST UPDATED: OCT 23, 2024

Overview

Microsoft Azure Storage provides REST operations for working with blobs in the Blob service.

D3 SOAR is providing REST operations to function with Azure Blob Storage.

Azure Blob Storage is available for use in:

D3 SOAR

V12.7.241+

Category

Cloud Services

Deployment Options

Option II, Option IV

Connection

To connect to Azure Blob Storage from D3 SOAR, please follow this part to collect the required information below:

Parameter

Description

Example

Server URL

The url of Azure Storage Account Blob.

https://<account_name>.blob.core.windows.net/

SAS Key

The Sas key for authentication.

***

Permission Requirements

Each endpoint in the Azure Blob Storage API requires a certain permission scope. The following are required scopes for the commands in this integration:

Command

Required Permission

API Doc

List Blob Objects

Azure RBAC action: Microsoft.Storage/storageAccounts/blobServices/containers/read

Least privileged built-in role: Storage Blob Data Reader

Get Blob (REST API) - Azure Storage | Microsoft Learn

List Containers

Azure RBAC action: Microsoft.Storage/storageAccounts/blobServices/containers/read (scoped to the storage account or above)

Least privileged built-in role: Storage Blob Data Contributor (scoped to the storage account or above)

List Containers (REST API) - Azure Storage | Microsoft Learn

Upload File

Azure RBAC action:

  • Create new block blob: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action

  • Create new or overwrite existing block blob: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write

Least privileged built-in role: Storage Blob Data Contributor

Put Blob (REST API) - Azure Storage | Microsoft Learn

Configuring Azure Blob Storage to Work with D3 SOAR

  1. Login to your Microsoft Azure Account.

  2. Inside the Search Bar, Search for Storage accounts.

  3. Create or choose your desired Storage Account to create the SAS Token.

  4. Navigate to the Access Control (IAM) tab, and grant access from the Permission Requirements to the resource you choose.

  5. Under the Security + networking, click Shared access signature.

    1. Enable the options below

      1. Check Allowed Services: Blob, File

      2. Check Allowed Resource Types: Service, Container, Object

      3. Check Allowed Permissions: Read, Write, Delete, List, Add, Create, Immutable storage

      4. Check Blob versioning permissions: Enables deletion of versions

    2. The expiry date should be set to one day after the contract date. Additionally, add a reminder to update the SAS key before it expires. Notify the client that the key is about to expire and inform them that a new key will be generated based on the contract.

    3. Click Generate SAS and connection string.

  6. Copy SAS token to use in D3 SOAR.

Configuring D3 SOAR to Work with Azure Blob Storage

  1. Log in to D3 SOAR.

  2. Find the Azure Blob Storage integration.

    screenshot_1 (1).png
    1. Navigate to Configuration on the top header menu.

    2. Click on the Integration icon on the left sidebar.

    3. Type Azure Blob Storage in the search box to find the integration, then click it to select it.

    4. Click + Connection, on the right side of the Connections section. A new connection window will appear.

  3. Configure the following fields to create a connection to Azure Blob Storage.

    screenshot_2 (1).png
    1. Connection Name: The desired name for the connection.

    2. Site: Specifies the site to use the integration connection. Use the drop-down menu to select the site. The Share to Internal Sites option enables all sites defined as internal sites to use the connection. Selecting a specific site will only enable that site to use the connection.

    3. Recipient site for events from connections Shared to Internal Sites: This field appears if you selected Share to Internal Sites for Site to let you select the internal site to deploy the integration connection.

    4. Agent Name (Optional): Specifies the proxy agent required to build the connection. Use the dropdown menu to select the proxy agent from a list of previously configured proxy agents.

    5. Description (Optional): Add your desired description for the connection.

    6. Tenant (Optional): When configuring the connection from a master tenant site, you have the option to choose the specific tenant sites you want to share the connection with. Once you enable this setting, you can filter and select the desired tenant sites from the dropdowns to share the connection.

    7. Configure User Permissions: Defines which users have access to the connection.

    8. Active: Check the tick box to ensure the connection is available for use.

      screenshot_3 (1).png
    9. System: This section contains the parameters defined specifically for the integration. These parameters must be configured to create the integration connection.

      1. Input the Server URL. The default value is <https://<blob_name>.blob.core.windows.net/. Replace the <blob_name> with your Storage account name.
      2. Copy the SAS Key from the Azure Blob Storage platform. Please refer to step 6 of Configuring Azure Blob Storage to Work with D3 SOAR

    10. Enable Password Vault: An optional feature that allows users to take the stored credentials from their own password vault. Please refer to the password vault connection guide if needed.

  4. Test the connection.

    1. Click Test Connection to verify the account credentials and network connection. If the Test Connection Passed alert window appears, the test connection is successful. You will see Passed with a green checkmark appear beside the Test Connection button. If the test connection fails, please check your connection parameters and try again.

    2. Click OK to close the alert window.

    3. Click + Add to create and add the configured connection.

Commands

Azure Blob Storage includes the following executable commands for users to set up schedules or create playbook workflows. With the Test Command, you can execute these commands independently for playbook troubleshooting.

Integration API Note

For more information about the Azure Blob Storage API, please refer to the Azure Blob Storage API reference.

READER NOTE

Certain permissions are required for each command. Please refer to the Permission Requirements and Configuring Azure Blob Storage to Work with D3 SOAR for details.

List Blob Objects

Lists all of the blobs in a specified container.

READER NOTE

Container Name is a required parameter to run this command.

  • Run the List Containers command to obtain the Container Name. Container Names can be found in the raw data at the path $.EnumerationResults.Container[*].name.

Next Marker is an optional parameter to run this command.

  • If you run this command with raw data at the path $.EnumerationResults.NextMarker has value, the value can be used to input in the Next Marker parameter.

Input

Input Parameter

Required/Optional

Description

Example

Container Name

Required

The name of the container to list objects from. It can either be the full name of the container or just a prefix of the container's name.

*****

Blob Name

Optional

The names of the blob objects to be listed can be specified using either the full name of the blob object or just a prefix.

D3Incidents

Limit

Optional

The maximum number of return blob objects, with a default value of 20 and a maximum limit of 5000.

1

Next Marker

Optional

The next set of blob objects to be returned. If there is a value returned in the raw data of Next Marker after running this command, the value can be used to input here to obtain the next blob object.

2!96!*****-

Output

Return Data

Indicates one of the possible command execution states: Successful or Failed.

The Failed state can be triggered by any of the following errors:

  • A connection issue with the integration

  • The API returned an error message

  • No response from the API

You can view more details about an error in the Error tab.

Return Data can be passed down directly to a subsequent command or used to create conditional tasks in playbooks.

SAMPLE DATA

CODE
Successful
Raw Data

The primary response data from the API request.

SAMPLE DATA

JSON
{
    "EnumerationResults": {
        "@ServiceEndpoint": "https://***.***.***.***.***/",
        "@ContainerName": "*****",
        "Prefix": "D3Incidents",
        "Marker": "2!96!*****-",
        "MaxResults": "1",
        "Blobs": {
            "Blob": [
                {
                    "Name": "*****",
                    "Properties": {
                        "Creation-Time": "Wed, 15 Dec 2021 23:57:18 GMT",
                        "Last-Modified": "Wed, 15 Dec 2021 23:57:18 GMT",
                        "Etag": "0x8D9C026A0D5DBEF",
                        "Content-Length": "86718",
                        "Content-Type": "application/octet-stream",
                        "Content-Encoding": null,
                        "Content-Language": null,
                        "Content-CRC64": null,
                        "Content-MD5": "*****",
                        "Cache-Control": null,
                        "Content-Disposition": null,
                        "BlobType": "BlockBlob",
                        "AccessTier": "Hot",
                        "AccessTierInferred": "true",
                        "LeaseStatus": "unlocked",
                        "LeaseState": "available",
                        "ServerEncrypted": "true"
                    },
                    "OrMetadata": null
                }
            ]
        },
        "NextMarker": null
    }
}
Key Fields

Common cyber security indicators such as unique IDs, file hash values, CVE numbers, IP addresses, etc., will be extracted from Raw Data as Key Fields.

The system stores these key fields in the path $.[playbookTask].outputData. You can use these key-value pairs as data points for playbook task inputs.

SAMPLE DATA

CODE
{
  "ObjectNames": ["*****"],
  "NextMarker": 2!96!*****-
}
Result

Provides a brief summary of outputs in an HTML formatted table.

SAMPLE DATA

Name

*****

Properties

{'Creation-Time': 'Wed, 15 Dec 2021 23:49:15 GMT', 'Last-Modified': 'Wed, 15 Dec 2021 23:49:15 GMT', 'Etag': '*****', 'Content-Length': '17925', 'Content-Type': 'application/octet-stream', 'Content-Encoding': None, 'Content-Language': None, 'Content-CRC64': None, 'Content-MD5': '*****==', 'Cache-Control': None, 'Content-Disposition': None, 'BlobType': 'BlockBlob', 'AccessTier': 'Hot', 'AccessTierInferred': 'true', 'LeaseStatus': 'unlocked', 'LeaseState': 'available', 'ServerEncrypted': 'true'}

OrMetadata

None

Error Handling

If the Return Data is Failed, an Error tab will appear in the Test Result window.

The error tab contains the details responded from D3 SOAR or third-party API calls, including Failure Indicator, Status Code, and Message. This can help you locate the root cause of a command failure.

Parts in Error

Description

Example

Failure Indicator

Indicates the command failure that happened at a specific input and/or API call.

List Blob Objects failed.

Status Code

The response code issued by the third-party API server or the D3 SOAR system that can be used to locate the corresponding error category. For example, if the returned status code is 401, the selected connection is unauthorized to run the command. The user or system support would need to check the permission setting in the Azure Blob Storage portal. Refer to the HTTP Status Code Registry for details.

Status Code: 403.

Message

The raw data or captured key error message from the integration API server about the API request failure.

Message: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

Error Sample Data

List Blob Objects failed.

Status Code: 403.

Message: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

List Containers

Lists all of the containers in the current storage account.

READER NOTE

Next Marker is an optional parameter to run this command.

  • If you run this command with raw data at the path $.EnumerationResults.NextMarker has value, the value can be used to input in the Next Marker parameter.

Input

Input Parameter

Required/Optional

Description

Example

Container Name

Optional

The name of the container to be listed can be specified using either the full name or just a prefix of the container's name.

d3uat

Limit

Optional

The maximum number of return containers can be specified, with the default set to 20 and a maximum limit of 5000.

1

Next Marker

Optional

The next set of containers to be returned can be specified using the name of the next container. If there is a value returned in the raw data of Next Marker after running this command, the value can be used to input here to obtain the next container.

/d3uat/*****

Output

Return Data

Indicates one of the possible command execution states: Successful or Failed.

The Failed state can be triggered by any of the following errors:

  • A connection issue with the integration

  • The API returned an error message

  • No response from the API

You can view more details about an error in the Error tab.

Return Data can be passed down directly to a subsequent command or used to create conditional tasks in playbooks.

SAMPLE DATA

CODE
Successful
Raw Data

The primary response data from the API request.

SAMPLE DATA

JSON
{
    "EnumerationResults": {
        "@ServiceEndpoint": "https://***.***.***.***.***/",
        "Prefix": "d3uat",
        "Marker": "/d3uat/*****",
        "MaxResults": "1",
        "Containers": {
            "Container": [
                {
                    "Name": "*****",
                    "Properties": {
                        "Last-Modified": "Wed, 15 Dec 2021 19:32:09 GMT",
                        "Etag": "\"*****\"",
                        "LeaseStatus": "unlocked",
                        "LeaseState": "available",
                        "DefaultEncryptionScope": "$account-encryption-key",
                        "DenyEncryptionScopeOverride": "false",
                        "HasImmutabilityPolicy": "false",
                        "HasLegalHold": "false",
                        "ImmutableStorageWithVersioningEnabled": "false"
                    }
                }
            ]
        },
        "NextMarker": null
    }
}
Key Fields

Common cyber security indicators such as unique IDs, file hash values, CVE numbers, IP addresses, etc., will be extracted from Raw Data as Key Fields.

The system stores these key fields in the path $.[playbookTask].outputData. You can use these key-value pairs as data points for playbook task inputs.

SAMPLE DATA

CODE
{
  "ContainerNames": ["*****"],
  "NextMarker": /d3uat/*****
}
Result

Provides a brief summary of outputs in an HTML formatted table.

SAMPLE DATA

Name

*****

Properties

{'Last-Modified': 'Sat, 05 Dec 2020 01:37:31 GMT', 'Etag': '"*****"', 'LeaseStatus': 'locked', 'LeaseState': 'leased', 'LeaseDuration': 'infinite', 'DefaultEncryptionScope': '$account-encryption-key', 'DenyEncryptionScopeOverride': 'false', 'HasImmutabilityPolicy': 'false', 'HasLegalHold': 'false', 'ImmutableStorageWithVersioningEnabled': 'false'}

Error Handling

If the Return Data is Failed, an Error tab will appear in the Test Result window.

The error tab contains the details responded from D3 SOAR or third-party API calls, including Failure Indicator, Status Code, and Message. This can help you locate the root cause of a command failure.

Parts in Error

Description

Example

Failure Indicator

Indicates the command failure that happened at a specific input and/or API call.

List Containers failed.

Status Code

The response code issued by the third-party API server or the D3 SOAR system that can be used to locate the corresponding error category. For example, if the returned status code is 401, the selected connection is unauthorized to run the command. The user or system support would need to check the permission setting in the Azure Blob Storage portal. Refer to the HTTP Status Code Registry for details.

Status Code: 403.

Message

The raw data or captured key error message from the integration API server about the API request failure.

Message: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

Error Sample Data

List Containers failed.

Status Code: 403.

Message: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

Upload File

Submits files to storage

READER NOTE

Container Name is a required parameter to run this command.

  • Run the List Containers command to obtain the Container Name. Container Names can be found in the raw data at the path $.EnumerationResults.Container[*].name.

File ID and File Source

It is not recommended to use the Test Command feature with the Upload File command as it is designed for dynamic input files in Playbooks, Incident Attachments, and Artifact Attachments. There is a simple workaround to test the command:

  1. Navigate to Configuration on the top bar menu.

  2. Click on Utility Commands on the left sidebar menu.

  3. Use the search box to find and select the Create a File from input Text Array command.

  4. Click on the Test tab.

  5. Input the required information for the parameters.

  6. Click on the Test Command button. A D3 File ID will appear in the output data after the file has been successfully created. The D3 File Source of the created file will be Playbook File.

Input

Input Parameter

Required/Optional

Description

Example

File IDs

Required

The file path of the file source.

[ "473" ]

File Source

Required

The file source of the file to send. The options for file sources are:

Incident Attachment File: Manually uploaded file from Incident

Playbook File: Output from another Task

Artifact File: Ingested Artifact in an Event

Playbook File

Container Name

Required

The name of the container to upload files.

*****

Output

Return Data

Indicates one of the possible command execution states: Successful, Partially Successful, or Failed.

The Partially Successful state only occurs when a command’s input accepts an array of items (e.g. an array of IP addresses) and one or more items within the array return an error from the API request.

The Failed state can be triggered by any of the following errors:

  • A connection issue with the integration

  • The API returned an error message

  • No response from the API

You can view more details about an error in the Error tab.

Return Data can be passed down directly to a subsequent command or used to create conditional tasks in playbooks.

SAMPLE DATA

CODE
Successful
Raw Data

The primary response data from the API request.

SAMPLE DATA

JSON
[
    {
        "file": "*****",
        "result": "Succeed"
    },
    {
        "file": "*****",
        "result": "Succeed"
    }
]
Context Data

The data extracted from Raw Data converted into JSON format. Context Data may be identical to Raw Data in some cases.

It is recommended to refer to the Raw Data instead of Context Data, since it contains the complete API response data. D3 will deprecate Context Data in the future, and playbook tasks using Context Data will be replaced with Raw Data.

SAMPLE DATA

CODE
[
    {
        "file": "*****",
        "result": "Succeed"
    },
    {
        "file": "*****",
        "result": "Succeed"
    }
]
Key Fields

Common cyber security indicators such as unique IDs, file hash values, CVE numbers, IP addresses, etc., will be extracted from Raw Data as Key Fields.

The system stores these key fields in the path $.[playbookTask].outputData. You can use these key-value pairs as data points for playbook task inputs.

SAMPLE DATA

CODE
{
  "File": ["*****","*****"]
}
Result

Provides a brief summary of outputs in an HTML formatted table.

SAMPLE DATA

file

result

*****

Succeed

*****

Succeed

Error Handling

If the Return Data is Failed, an Error tab will appear in the Test Result window.

The error tab contains the details responded from D3 SOAR or third-party API calls, including Failure Indicator, Status Code, and Message. This can help you locate the root cause of a command failure.

Parts in Error

Description

Example

Failure Indicator

Indicates the command failure that happened at a specific input and/or API call.

Upload File failed.

Status Code

The response code issued by the third-party API server or the D3 SOAR system that can be used to locate the corresponding error category. For example, if the returned status code is 401, the selected connection is unauthorized to run the command. The user or system support would need to check the permission setting in the Azure Blob Storage portal. Refer to the HTTP Status Code Registry for details.

Status Code: 403.

Message

The raw data or captured key error message from the integration API server about the API request failure.

Message: Submit Files failed. The file does not exist

Error Sample Data

Upload File failed.

Status Code: 403.

Message: Submit Files failed. The file does not exist.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.