Operating a secure automation platform within private, air-gapped, or highly regulated perimeters requires moving away from clear-text configuration files and external public cloud credential managers.
The platform addresses this by establishing an immutable, localized secrets perimeter. By wrapping an open-source OpenBao server architecture inside our standardized, tag-driven container orchestration layer, sensitive tokens are fully encrypted at rest and safely injected into active service containers at runtime.
The cryptographic lifecycle transitions unconfigured container clusters into highly secure, automatically unsealed credential systems:
graph LR
A[Ansible Vault Payload<br/><code>Encrypted Key Storage</code>] --> B[Docker Stack Ingestion<br/><code>bootstrap_docker_stack</code>]
B --> C[OpenBao Server Init<br/><code>docker-openbao-ansible</code>]
C --> D[Secure Token Distribution<br/><code>mTLS Runtime Handshakes</code>]
style A fill:#f1f5f9,stroke:#cbd5e1,stroke-width:2px;
style B fill:#f1f5f9,stroke:#cbd5e1,stroke-width:2px;
style C fill:#f1f5f9,stroke:#cbd5e1,stroke-width:2px;
style D fill:#f1f5f9,stroke:#cbd5e1,stroke-width:2px;
docker-openbao-ansible)github.com/lj020326/docker-openbao-ansibleopenbao/openbao ecosystem to supply a dedicated secrets container image.To achieve complete automation without human data entry, the system eliminates interactive, manual unsealing workflows by nesting credentials securely across separate automation layers:
ansible-vault blocks.bootstrap_docker_stack role. The framework writes these parameters into secure, volatile memory mount points (/run/secrets/) inside the container namespace, ensuring the keys are never written to host filesystems in the clear.Once the OpenBao cluster is initialized and unsealed by the automation engine, it integrates seamlessly into the local network control plane:
bootstrap_ca_certs track.This configuration profile illustrates how the generic bootstrap_docker_stack variables are used to securely initialize, map, and expose the encrypted OpenBao platform structures without writing custom, non-standard automation tasks:
# Inside inventory/group_vars/security_nodes.yml
docker_stack_name: "security-perimeter"
docker_stack_type: "standalone"
docker_stack_secrets:
- secret_name: "openbao-unseal-key-1"
secret_value: "{{ vault_openbao_key_1 }}" # Securely decrypted from Ansible Vault
secret_type: "text"
- secret_name: "openbao-admin-password"
secret_value: "{{ vault_openbao_root_password }}"
secret_type: "text"
docker_stack_services:
- service_name: "openbao-server"
image: "lj020326/docker-openbao-ansible:latest"
ports:
- "8200:8200"
volumes:
- "/var/data/openbao:/openbao/data"
secrets:
- "openbao-unseal-key-1"
- "openbao-admin-password"
environment:
- "BAO_LOCAL_CONFIG_PATH=/openbao/config/config.hcl"
- "AUTO_UNSEAL_ENABLED=true"
ansible-playbook -i inventory/hosts site.yml \
--tags "bootstrap-docker-stack" \
--limit "security_hosts" \
--ask-vault-pass
ansible-playbook -i inventory/hosts site.yml \
--tags "bootstrap-docker-stack" \
--list-tasks