DelineaDSV

Manage credentials for applications, databases, CI/CD tools, and services without causing friction in the development process.

Authentication & Identity Management · Delinea DevOps Secrets Vault

Details

IDDelineaDSV
ProviderDelinea
CategoryAuthentication & Identity Management
From Version6.0.0
Docker Imagedemisto/python3:3.12.13.10116658
Supported ModulesAgentix XSIAM

README

Manage credentials for applications, databases, CI/CD tools, and services without causing friction in the development process.
This integration was integrated and tested with version 1.37.0 of DelineaDSV

Configure DelineaDSV in Cortex

Parameter Required
Server URL (e.g. https://example.com) True
Trust any certificate (not secure) False
Use system proxy settings False
Client ID True
Client Secret True

Commands

You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.

dsv-secret-get


Getting a secret fom DSV

Base Command

dsv-secret-get

Input

Argument Name Description Required
name Secret name for DSV. Required

Context Output

Path Type Description
secret String Received JSON object secret

Command Example

!dsv-secret-get name="accounts/xsoar"

Context Example

{
    "DSV": {
        "Secret": {
            "attributes": {},
            "created": "2022-05-17T10:55:41Z",
            "createdBy": "users:thy-one:testuser@accessecm.com",
            "data": {
                "password": "XSOARPassword",
                "username": "xsoar"
            },
            "description": "",
            "id": "e88f725b-ff1c-4902-961e-fcdf3c7f712f",
            "lastModified": "2022-05-17T10:55:41Z",
            "lastModifiedBy": "users:thy-one:testuser@accessecm.com",
            "path": "accounts:xsoar",
            "version": "1"
        }
    }
}

Configuration parameters

  • url — Server URL (e.g. https://example.com) (required)
  • client_id — Username (required)
  • client_secret — Password (required)
  • insecure — Trust any certificate (not secure)
  • proxy — Use system proxy settings

Commands (1)

  • dsv-secret-get

    Getting a secret fom DSV.

import demistomock as demisto
from CommonServerPython import *
from CommonServerUserPython import *
#   from typing import Dict

# Disable insecure warnings
import urllib3

urllib3.disable_warnings()


class Client(BaseClient):
    def __init__(self, server_url: str, client_id: str, client_secret: str, proxy: bool, verify: bool, provider: str):
        super().__init__(base_url=server_url, proxy=proxy, verify=verify)
        self._client_id = client_id
        self._client_secret = client_secret
        self.provider = provider
        self._token = self._generate_token()
        self._headers = {"Authorization": self._token, "Content-Type": "application/json"}

    def _generate_token(self) -> str:
        if self.provider == "Local Login":
            body = {
                "username": self._client_id,
                "password": self._client_secret,
                "grant_type": "password",
            }
        else:
            raise Exception("Logon Type not supported")
        headers = {"Content-Type": "application/x-www-form-urlencoded"}
        return "Bearer " + (self._http_request("POST", "/v1/token", headers=headers, data=body)).get("accessToken")

    def getSecret(self, name: str) -> str:
        return self._http_request("GET", url_suffix="/v1/secrets/" + str(name))


def dsv_secret_get_command(client, name: str = ""):
    secret = client.getSecret(name)
    markdown = tableToMarkdown("Information", secret)

    return CommandResults(
        readable_output=markdown, outputs_prefix="DSV.Secret", outputs_key_field="secret", raw_response=secret, outputs=secret
    )


def test_module(client) -> str:
    if client._token == "":
        raise Exception("Failed to get authorization token.", "Check you credential and access to DSV.")

    return "ok"


def main():  # pragma: no cover
    params = demisto.params()
    client_id = params.get("client_id")
    client_secret = params.get("client_secret")

    # get the service API url
    url = params.get("url")
    proxy = params.get("proxy", False)
    verify = not params.get("insecure", False)
    provider = params.get("provider", "Local Login")
    #    credential_objects = demisto.params().get('credentialobjects')

    demisto.info(f"Command being called is {demisto.command()}")

    delinea_commands = {"dsv-secret-get": dsv_secret_get_command}

    try:
        client = Client(
            server_url=url, client_id=client_id, client_secret=client_secret, proxy=proxy, verify=verify, provider=provider
        )

        if demisto.command() in delinea_commands:
            return_results(
                delinea_commands[demisto.command()](client, **demisto.args())
                # type: ignore[operator]
            )

        elif demisto.command() == "test-module":
            # This is the call made when pressing the integration Test button.
            result = test_module(client)
            return_results(result)

    except Exception as e:
        return_error(f"Failed to execute {demisto.command()} command.", f"Error: {str(e)}")


if __name__ in ("__main__", "__builtin__", "builtins"):
    main()