4.2 Retrieving Credentials at Runtime¶
Automation tools retrieve credentials from Vault at runtime, never storing them in code or configuration files.
Python Vault Helper¶
Create scripts/vault_helper.py:
import os
import hvac
def get_vault_client():
vault_addr = os.getenv('VAULT_ADDR', 'https://10.252.200.10:8200')
vault_token = os.getenv('VAULT_TOKEN')
client = hvac.Client(url=vault_addr, token=vault_token)
if not client.is_authenticated():
raise Exception("Vault authentication failed")
return client
def get_secret(path):
client = get_vault_client()
response = client.secrets.kv.v2.read_secret_version(path=path)
return response['data']['data']
# Example usage
if __name__ == "__main__":
dnac_creds = get_secret('secret/abhavtech/dnac/admin')
print(f"DNAC URL: {dnac_creds['url']}")
print(f"Username: {dnac_creds['username']}")
Terraform Integration¶
# Use Vault provider
provider "vault" {
address = "https://10.252.200.10:8200"
token = var.vault_token
}
# Retrieve DNAC credentials
data "vault_generic_secret" "dnac" {
path = "secret/abhavtech/dnac/admin"
}
# Use in DNAC provider
provider "dnacenter" {
base_url = data.vault_generic_secret.dnac.data["url"]
username = data.vault_generic_secret.dnac.data["username"]
password = data.vault_generic_secret.dnac.data["password"]
}
Ansible Integration¶
---
- name: Retrieve Vault secrets
hosts: localhost
tasks:
- name: Get ISE credentials from Vault
community.hashi_vault.vault_read:
url: https://10.252.200.10:8200
path: secret/data/abhavtech/ise/ers
token: "{{ lookup('env', 'VAULT_TOKEN') }}"
register: ise_creds
- name: Configure ISE NAD
cisco.ise.network_device:
ise_hostname: "{{ ise_creds.data.data.url }}"
ise_username: "{{ ise_creds.data.data.username }}"
ise_password: "{{ ise_creds.data.data.password }}"
name: "fabric-edge-01"
ip_address: "10.252.1.101"
Related Sections: - 4.1 HashiCorp Vault Deployment - 4.3 Ansible Vault for Playbook Secrets