Skip to main content
Skip table of contents

Passing credentials securely to hook operations

Sometimes, commands in hook operations need credentials to perform tasks such as making API calls or managing local services. To avoid hard-coding credentials in the hook code, you can pass credentials securely to hooks via environment variables using a new list property of each hook operation. The elements in this list define a set of environment variables and the credentials to pass to the hook in those variables.

In the browser, the list can be viewed and updated in the Credential environment variables section of a hook operation. (Hook operations can be accessed in the dataset and hook template creation dialogs and view/edit pages.) For example, to view or edit hook credentials for a dataset:

  1. Login to the Delphix management application.

  2. Under Datasets, select a dSource or VDB.

  3. Select the Configuration tab and then the Hooks tab.

  4. Select a hook operation.

  5. To make any changes, such as adding, modifying or deleting credentials, click on the edit icon to the right of Operation type.

In the API and CLI, the credentials list property of each hook operation is an array called credentialsEnvVarsList.

Hook credentials can be configured directly as a password or key (entered by the user) or indirectly by selecting a password vault and a location in that vault. Credentials entered directly are managed securely by the engine in the same way as other passwords and keys, which are encrypted in disk and neither logged nor exposed by the API, whereas vault credentials are managed securely and externally to the engine by a specialized product such as CyberArk or HashiCorp Vault that has already been configured in the engine. Credentials stored in a vault are always retrieved by the engine just before executing the hook, so they will always contain the latest values. Any number of credentials of any type can be defined for an operation in the credentialsEnvVarsList property.

Four types of credentials can be defined for hooks:

  • CyberArkVaultCredential

  •  HashiCorpVaultCredential

  • PasswordCredential

  • KeyPairCredential (supported only via the API and CLI at the moment)

For more information on each of these types, visit your engine's API page for that type at https://<engine address>/api/#<type name> (you must log in first).

To illustrate, consider a hook that needs to authenticate to two different APIs, one using an API key entered directly by the user and another using a username and password managed by a vault. The user can configure the credential variables as follows:

delphix source "pomme" update operations postRefresh *> edit 0.credentialsEnvVarsList
delphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList *> adddelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 0 *> set baseVarName=API1delphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 0 *> edit credentialsdelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 0 credentials *> set type=PasswordCredentialdelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 0 credentials *> set password="API-KEY-02a0b73f"delphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 0 credentials *> backdelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList *> adddelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 1 *> set baseVarName=API2delphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 1 *> edit credentialsdelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 1 credentials *> set type=CyberArkVaultCredentialdelphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 1 credentials *> set queryString="Safe=Apis;Folder=Root\Service2;Object=ApiClient"delphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 1 credentials *> set vault=MyCyberArk1delphix source "pomme" update operations.postRefresh 0 credentialsEnvVarsList 1 credentials *> commit

When this hook executes, it will receive two sets of environment variables containing the corresponding credentials: API1_PASSWORD with value API-KEY-02a0b73f and variables API2_USER and API2_PASSWORD containing the values stored in the vault MyCyberArk1 at the location of the provided query string. The API2 credentials are retrieved from the vault just before the hook executes, so they will always contain the latest values.

The complete list of environment variables that may be available to a hook is:

  • <base name>_USER: user name. Present only if the credentials are of a vault credential type and the entry in the vault contains a user name.

  • <base name>_PASSWORD: a password. Present for PasswordCredential. Also present in case of a vault credential type and the vault entry contains a password.

  • <base name>_PRIVKEY: a private key. Present for KeyPairCredential. Also present in case of a vault credential type and the vault entry contains a private key.

  • <base name>_PUBKEY: a public key. Present for KeyPairCredential. Also present in case of a vault credential type and the vault entry contains a public key.

JavaScript errors detected

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

If this problem persists, please contact our support.