Secret Management Services
ONE Runtime Server can read secrets from an external secret management service, also called a vault, instead of storing them in the runtime configuration file. You define each vault once and then reference the secrets it holds from other contributed configurations and from data sources.
Supported providers
ONE Runtime Server supports the following providers:
-
Azure Key Vault: Authentication with Azure AD client credentials or Azure AD managed identity.
-
AWS Secrets Manager: Authentication with access key credentials, optionally combined with an assume role configuration.
-
HashiCorp Vault: Authentication with Google service account key credentials, Google Compute Engine credentials, or HashiCorp JWT credentials.
-
CyberArk Secrets Manager: Authentication with a PFX or Cert client certificate.
The same providers can also be integrated with Ataccama ONE. See Secret Management Services.
Define vaults in the runtime configuration
Vault definitions belong to the VaultContributor contributed configuration.
See Contributed configurations.
<contributedConfigs>
<config class="com.ataccama.dqc.auth.vault.VaultContributor">
<vaults>
<!-- Vault definitions -->
</vaults>
</config>
</contributedConfigs>
Each <vault> element defines a connection to one provider.
The name attribute identifies the vault when you reference a secret stored in it.
The <auth> element holds the credentials used to authenticate to the provider.
You can encrypt these credentials, such as clientKey, secretKey, serviceKey, or passphrase, in the same way as any other password in the runtime configuration.
See Encrypt Passwords.
For the full definition of each provider, see Azure Key Vault, AWS Secrets Manager, HashiCorp Vault, or CyberArk Secrets Manager.
How secret references work
Instead of writing a secret into the runtime configuration file, you write a reference to it.
A reference has the form vault:<provider>:<vault name>:<secret>, where the provider determines the rest of the reference.
You can use a reference in any attribute that takes a secret, such as clientKey, secretKey, accessKey, or the password of a data source.
For example, clientKey="vault:azure:test_azure_key_vault:adls-browsing-secret-integration" retrieves the adls-browsing-secret-integration secret from the vault named test_azure_key_vault.
| Provider | Reference template | Description |
|---|---|---|
Azure Key Vault |
|
|
AWS Secrets Manager |
|
|
HashiCorp Vault |
|
|
CyberArk Secrets Manager |
|
|
PostgreSQL connection using an Azure Key Vault secret
The following runtime configuration defines an Azure Key Vault and a PostgreSQL data source whose password is read from that vault:
<?xml version='1.0' encoding='UTF-8'?>
<runtimeconfig>
<parallelismLevel>1</parallelismLevel>
<contributedConfigs>
<config class="com.ataccama.dqc.auth.vault.VaultContributor">
<vaults>
<vault name="test_azure_key_vault_di" vaultUrl="<Vault URL>" class="com.ataccama.dqc.azure.auth.vault.AzureKeyVault">
<auth clientId="*****" clientKey="*****" tenantId="******" authType="AAD_CLIENT_CREDENTIAL" class="com.ataccama.dqc.azure.auth.vault.AzureKeyVaultAuth"/>
</vault>
</vaults>
</config>
</contributedConfigs>
<dataSources>
<dataSource password="vault:azure:test_azure_key_vault_di:aws-postgresql-password" name="PostgreSQL" driverName="PostgreSQL" user="dpp" url="<JDBC connection string>">
<properties/>
<propertiesEncrypted/>
<propertiesFile/>
<propertiesFileEncrypted/>
</dataSource>
</dataSources>
<databaseDrivers>
<databaseDriver driverClass="org.postgresql.Driver" name="PostgreSQL">
<classpath>
<classpathEntry path="<Path to jdbc driver>/postgresql-42.7.11.jar"/>
</classpath>
</databaseDriver>
</databaseDrivers>
<runtimeComponents/>
<pathVariables/>
</runtimeconfig>
Azure Key Vault
Azure Key Vault supports two authentication types: Azure AD client credentials and Azure AD managed identity. For the meaning of each parameter, see Azure Key Vault Integration.
Azure AD client credentials
<vault name="azure-client"
vaultUrl="https://vault.vault.azure.net/"
class="com.ataccama.dqc.azure.auth.vault.AzureKeyVault">
<auth authType="AAD_CLIENT_CREDENTIAL"
clientId="client"
clientKey="secret"
tenantId="tenant"
class="com.ataccama.dqc.azure.auth.vault.AzureKeyVaultAuth"/>
</vault>
Azure AD managed identity
<vault name="azure-managed"
vaultUrl="https://vault.vault.azure.net/"
class="com.ataccama.dqc.azure.auth.vault.AzureKeyVault">
<auth authType="AAD_MANAGED_IDENTITY"
clientId="client"
class="com.ataccama.dqc.azure.auth.vault.AzureKeyVaultAuth"/>
</vault>
S3 connection using an Azure Key Vault secret
In the following runtime configuration, the secretKey of an S3 connection is read from the vault named test_azure_key_vault:
<?xml version='1.0' encoding='UTF-8'?>
<runtimeconfig>
<parallelismLevel>1</parallelismLevel>
<contributedConfigs>
<config class="com.ataccama.dqc.auth.vault.VaultContributor">
<vaults>
<vault name="test_azure_key_vault" vaultUrl="https://vault.vault.azure.net/" class="com.ataccama.dqc.azure.auth.vault.AzureKeyVault">
<auth clientId="***********" clientKey="***********" tenantId="***********" authType="AAD_CLIENT_CREDENTIAL" class="com.ataccama.dqc.azure.auth.vault.AzureKeyVaultAuth"/>
</vault>
</vaults>
</config>
<config class="com.ataccama.dqc.s3.config.S3Contributor">
<s3Connections>
<s3Connection s3Compatible="AWS" secretKey="vault:azure:test_azure_key_vault:s3-secret-key" accessKey="***********" name="S3test" region="eu-central-1" sseType="NONE" url="s3://<bucket_name>"/>
</s3Connections>
</config>
</contributedConfigs>
<databaseDrivers/>
<runtimeComponents/>
<pathVariables/>
</runtimeconfig>
AWS Secrets Manager
AWS Secrets Manager uses access key credentials, optionally combined with an assume role configuration.
The sessionToken attribute is optional and can be omitted.
For the meaning of each parameter, see AWS Secrets Manager Integration.
Access key credentials
<vault endpoint="<endpoint of Secrets Manager>"
secretName="<Secret Name In AWS Secret Manager>"
name="<Name of Vault>"
region="<Region>"
class="com.ataccama.dqc.aws.auth.vault.AwsSecretsManagerVault">
<auth secretKey="<Secret Key>"
accessKey="<Access Key>"
sessionToken=""
authType="AWS_ACCESS_KEY"
class="com.ataccama.dqc.aws.auth.vault.AwsVaultAuth"/>
</vault>
Access key credentials with assume role
<vault endpoint="<AWS Secret Management endpoint>"
secretName="dev-test-credentials"
name="aws_secrets_access_key_with_assume_role"
region="<region>"
class="com.ataccama.dqc.aws.auth.vault.AwsSecretsManagerVault">
<auth secretKey="<Secret Key>"
accessKey="<Access Key>"
sessionToken=""
authType="AWS_ACCESS_KEY"
class="com.ataccama.dqc.aws.auth.vault.AwsVaultAuth">
<assumeRole roleArn="arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>"
sessionName="test-session"
externalId="ASSUME_ROLE_EXTERNAL_ID"
region="<region>"
class="com.ataccama.dqc.aws.auth.runtime.config.AwsAssumeRoleAuthConfig"
enabled="true"/>
</auth>
</vault>
Azure Data Lake Storage connection using an AWS Secrets Manager secret
In the following runtime configuration, the clientKey of an Azure Data Lake Storage Gen2 connection is read from the vault named aws_secrets_access_key:
<?xml version='1.0' encoding='UTF-8'?>
<runtimeconfig>
<parallelismLevel>1</parallelismLevel>
<contributedConfigs>
<config class="com.ataccama.dqc.auth.vault.VaultContributor">
<vaults>
<vault endpoint="https://secretsmanager.eu-central-1.amazonaws.com" secretName="dev-test-credentials" name="aws_secrets_access_key" region="eu-central-1" class="com.ataccama.dqc.aws.auth.vault.AwsSecretsManagerVault">
<auth secretKey="***********" accessKey="***********" sessionToken="" authType="AWS_ACCESS_KEY" class="com.ataccama.dqc.aws.auth.vault.AwsVaultAuth"/>
</vault>
</vaults>
</config>
<config class="com.ataccama.dqc.azure.config.AzureGen2Contributor">
<azureGen2Connections>
<azureGen2Connection endpoint="dfs.core.windows.net" clientId="***********" authenticateUser="false" clientKey="vault:aws:dev-test-credentials:adls-client-secret" containerName="ataccama-browsing-dev" name="ataccamabrowsingdev" tenantId="***********" authType="AAD_CLIENT_CREDENTIAL" storageAccount="ataccamadatalakegen2" authTokenEndpoint="***********"/>
</azureGen2Connections>
</config>
</contributedConfigs>
<dataSources/>
<databaseDrivers/>
<runtimeComponents/>
<pathVariables/>
</runtimeconfig>
HashiCorp Vault
HashiCorp Vault supports three authentication types: Google service account key credentials, Google Compute Engine credentials, and HashiCorp JWT credentials.
The namespace attribute is required.
For the meaning of each parameter, see HashiCorp Vault Integration.
Google service account key credentials
<vault name="hashi-google-service-auth"
vaultUrl="http://vault.url"
namespace="namespace"
class="com.ataccama.dqc.hashicorp.auth.vault.HashiVault">
<auth authType="GOOGLE_SERVICE_ACCOUNT_KEY"
serviceKey="serviceKey"
role="role"
class="com.ataccama.dqc.google.auth.vault.GoogleKeyVaultAuth"/>
</vault>
Google Compute Engine credentials
<vault name="hashi-google-compute-auth"
vaultUrl="http://vault.url"
namespace="namespace"
class="com.ataccama.dqc.hashicorp.auth.vault.HashiVault">
<auth authType="GOOGLE_COMPUTE_ENGINE_TOKEN"
role="role"
class="com.ataccama.dqc.google.auth.vault.GoogleKeyVaultAuth"/>
</vault>
HashiCorp JWT credentials
<vault name="hashi-jwt-auth"
vaultUrl="http://vault.url"
namespace="namespace"
class="com.ataccama.dqc.hashicorp.auth.vault.HashiVault">
<auth authType="HASHICORP_JWT_TOKEN"
hashiJwt="jwt"
role="role"
class="com.ataccama.dqc.hashicorp.auth.vault.HashiVaultAuth"/>
</vault>
S3 connection using HashiCorp Vault secrets
In the following runtime configuration, both the accessKey and the secretKey of an S3 connection are read from a HashiCorp Vault:
<?xml version='1.0' encoding='UTF-8'?>
<runtimeconfig>
<parallelismLevel>1</parallelismLevel>
<contributedConfigs>
<config class="com.ataccama.dqc.auth.vault.VaultContributor">
<vaults>
<vault name="69bef018-0000-7000-0000-0000001f02ea" namespace="admin" vaultUrl="<HashiCorp Vault URL>" class="com.ataccama.dqc.hashicorp.auth.vault.HashiVault">
<auth role="dev" serviceKey="*******" authType="GOOGLE_SERVICE_ACCOUNT_KEY" class="com.ataccama.dqc.google.auth.vault.GoogleKeyVaultAuth"/>
</vault>
</vaults>
</config>
<config class="com.ataccama.dqc.s3.config.S3Contributor">
<s3Connections>
<s3Connection s3Compatible="AWS" secretKey="vault:hashi:69bef018-0000-7000-0000-0000001f02ea:kv_testvault/qa:$.s3-secret-key" accessKey="vault:hashi:69bef018-0000-7000-0000-0000001f02ea:kv_testvault/qa:$.s3-access-key" name="S3Hashicorp" region="eu-central-1" sseType="NONE" url="s3://<bucket_name>"/>
</s3Connections>
</config>
</contributedConfigs>
<databaseDrivers/>
<runtimeComponents/>
<pathVariables/>
</runtimeconfig>
CyberArk Secrets Manager
CyberArk Secrets Manager supports two authentication types: PFX client certificate and Cert client certificate.
The applicationId attribute is required, and the vaultUrl must point to the Central Credential Provider (CCP) and end with /Accounts.
For the meaning of each parameter, see CyberArk Secrets Manager Integration.
PFX client certificate
<vault name="cyberark-pfx-client-certificate-auth"
vaultUrl="http://vault.url"
applicationId="applicationId"
class="com.ataccama.dqc.cyberark.auth.vault.CyberArkVault">
<auth authType="PFX_CLIENT_CERTIFICATE"
pfxFile="myPfxFile"
passphrase="myPassphrase"
class="com.ataccama.dqc.cyberark.auth.vault.CyberArkVaultAuth"/>
</vault>
Cert client certificate
<vault name="cyberark-cert-client-certificate-auth"
vaultUrl="http://vault.url"
applicationId="applicationId"
class="com.ataccama.dqc.cyberark.auth.vault.CyberArkVault">
<auth authType="CERT_CLIENT_CERTIFICATE"
certFile="myCertFile"
keyFile="myKeyFile"
passphrase="myPassphrase"
class="com.ataccama.dqc.cyberark.auth.vault.CyberArkVaultAuth"/>
</vault>
PostgreSQL connection using a CyberArk Secrets Manager secret
In the following runtime configuration, the password of a PostgreSQL data source is read from a CyberArk Secrets Manager vault that authenticates with a PFX client certificate:
<?xml version='1.0' encoding='UTF-8'?>
<runtimeconfig>
<parallelismLevel>1</parallelismLevel>
<contributedConfigs>
<config class="com.ataccama.dqc.auth.vault.VaultContributor">
<vaults>
<vault name="69bef018-0000-7000-0000-0000001d000a" vaultUrl="https://<CyberArk CCP host>/AIMWebService/api/Accounts" applicationId="CCP_Ataccama_AppID" class="com.ataccama.dqc.cyberark.auth.vault.CyberArkVault">
<auth passphrase="*******" pfxFile="*******" authType="PFX_CLIENT_CERTIFICATE" class="com.ataccama.dqc.cyberark.auth.vault.CyberArkVaultAuth"/>
</vault>
</vaults>
</config>
</contributedConfigs>
<dataSources>
<dataSource password="vault:cyberArk:69bef018-0000-7000-0000-0000001d000a:Partner-Ataccama:Database-MySQL-dpp:Content" name="PostgreSQL" driverName="PostgreSQL" user="dpp" url="<JDBC connection string>">
<properties/>
<propertiesEncrypted/>
<propertiesFile/>
<propertiesFileEncrypted/>
</dataSource>
</dataSources>
<databaseDrivers>
<databaseDriver driverClass="org.postgresql.Driver" name="PostgreSQL">
<classpath>
<classpathEntry path="<Path to jdbc driver>/postgresql-42.7.13.jar"/>
</classpath>
</databaseDriver>
</databaseDrivers>
<runtimeComponents/>
<pathVariables/>
</runtimeconfig>
Was this page useful?