cloudtaser-cli source configure¶
Configures a previously initialized secret store (OpenBao or Vault) with the policies, roles, and authentication methods required for CloudTaser sovereign secret injection.
With --beacon-tenant-stdin this command instead performs only a fresh tenant credential transaction. Supply the expected --beacon-tenant-id, an HTTPS --secretstore-address, and a separate private --admin-token-fd pipe. The source generates its own independent salt; existing tenant state is never overwritten. No policy configuration flags may be combined with this mode.
This command: 1. Configure the Kubernetes auth method (see --kubernetes-auth) 2. Enable KV v2 secret engine 3. Create CloudTaser wrapper, operator and Volume Shield broker policies 4. Create their Kubernetes auth roles (skipped with --kubernetes-auth none) 5. Create the migrate policy and the operator-enrollment and pod token roles 6. Reconcile the exact cloudtaser-port policy and AppRole (no SecretID) 7. Enable stdout audit logging where the backend allows it
Kubernetes auth (--kubernetes-auth): in-cluster OpenBao runs as a pod of the workload cluster and verifies ServiceAccount JWTs with its own pod ServiceAccount CA and JWT (default). Against an OpenBao that is not a pod this fails before any other change and removes the auth mount it created. external OpenBao runs outside the workload cluster and pods authenticate to it directly. Requires --kubernetes-host and --kubernetes-ca-cert-file; --kubernetes-token-reviewer-jwt-file is optional. The server-local pod fallback is disabled. none No Kubernetes auth mount, config or roles. For stores that workloads reach only through the CloudTaser Port (P2P / beacon relay), such as a VM-hosted OpenBao. The Port policy grant is reconciled in every mode.
Requires a root token or a token with sufficient privileges. Pass the token via --secretstore-token-file or SECRETSTORE_TOKEN.
These settings can also be set via environment variables. Flags take precedence. The --kubernetes-* flags are flag-only.
Environment variables: OPENBAO_ADDR Secret store service URL OPENBAO_NAMESPACE K8s namespace where secret store is deployed OPENBAO_RELEASE_NAME Helm release name BOOTSTRAP_KV_PATH KV v2 mount path (default "secret") BOOTSTRAP_AUTH_PATH Kubernetes auth mount path (default "kubernetes") BOOTSTRAP_POLICY_NAME Policy name (default "cloudtaser") BOOTSTRAP_ROLE_NAME Role name (default "cloudtaser") BOOTSTRAP_ROLE_BOUND_SA_NAMES Bound service account names (default "") BOOTSTRAP_ROLE_BOUND_SA_NAMESPACES Bound service account namespaces (default "") BOOTSTRAP_ROLE_TTL Role token TTL (default "1h") BOOTSTRAP_OPERATOR_SA_NAME Operator service account name (default "cloudtaser-operator") BOOTSTRAP_OPERATOR_NAMESPACE Operator namespace (default "cloudtaser-system")
Usage¶
Examples¶
# Configure with namespace auto-discovery
cloudtaser-cli source configure --namespace openbao --secretstore-token-file /etc/cloudtaser/admin.token
# Configure using a root token (from init output)
cloudtaser-cli source configure \
--secretstore-address https://openbao.vault.svc:8200 \
--secretstore-token-file /etc/cloudtaser/admin.token
# Configure using environment variables
export OPENBAO_ADDR=https://openbao.vault.svc:8200
export SECRETSTORE_TOKEN="$(cat /etc/cloudtaser/admin.token)"
cloudtaser-cli source configure
# Configure with custom policy/role names
cloudtaser-cli source configure \
--secretstore-address https://openbao.vault.svc:8200 \
--secretstore-token-file /etc/cloudtaser/admin.token \
--policy-name my-policy \
--secretstore-role my-role
# VM-hosted OpenBao reached only through the CloudTaser Port (no Kubernetes auth)
cloudtaser-cli source configure \
--secretstore-address http://127.0.0.1:8200 \
--kv-mount cloudtaser \
--kubernetes-auth none \
--secretstore-token-file /etc/cloudtaser/admin.token
# External OpenBao that workload pods authenticate to directly
cloudtaser-cli source configure \
--secretstore-address https://openbao.example.eu:8200 \
--secretstore-token-file /etc/cloudtaser/admin.token \
--kubernetes-auth external \
--kubernetes-host https://203.0.113.10:6443 \
--kubernetes-ca-cert-file ./cluster-ca.pem
# Dry-run to see what would be configured
cloudtaser-cli source configure \
--namespace openbao \
--secretstore-token-file /etc/cloudtaser/admin.token \
--dry-run
Flags¶
| Flag | Type | Default | Required | Description |
|---|---|---|---|---|
--admin-token-fd |
int | -1 |
no | separate private inherited token pipe for --beacon-tenant-stdin |
--allow-plaintext-vault |
bool | false |
no | allow plain HTTP vault discovery (NOT for production; vault traffic including tokens sent in cleartext) |
--backend |
string | openbao |
no | secret store backend: openbao or vault |
--beacon-auth-key |
string | (empty) |
no | base64-encoded beacon auth key to store in vault (from beacon install output) |
--beacon-materials-dir |
string | (empty) |
no | path to beacon activation materials directory (reads PEM files and stores in vault) |
--beacon-tenant-id |
string | (empty) |
no | expected canonical tenant ID for --beacon-tenant-stdin |
--beacon-tenant-stdin |
bool | false |
no | configure only a fresh tenant from a private stdin pipe; source generates its independent salt |
--bound-sa-names |
string | (empty) |
no | one enrolled service account (no default role, env: BOOTSTRAP_ROLE_BOUND_SA_NAMES) |
--bound-sa-namespaces |
string | (empty) |
no | one enrolled namespace (no wildcard, env: BOOTSTRAP_ROLE_BOUND_SA_NAMESPACES) |
--dry-run |
bool | false |
no | print what would be done without making changes |
--generate-beacon-auth-key |
bool | false |
no | generate a new beacon auth key and store it in vault |
--help, -h |
bool | false |
no | help for configure |
--kubeconfig |
string | (empty) |
no | path to kubeconfig file |
--kubernetes-auth |
string | in-cluster |
no | Kubernetes auth setup: in-cluster (OpenBao is a pod of the workload cluster), external (OpenBao outside the cluster; needs --kubernetes-host and --kubernetes-ca-cert-file), or none (workloads reach this store only through the CloudTaser Port, e.g. a VM-hosted OpenBao) |
--kubernetes-ca-cert-file |
string | (empty) |
no | PEM CA certificate(s) for --kubernetes-host; files with private keys are refused (--kubernetes-auth external only) |
--kubernetes-host |
string | (empty) |
no | Kubernetes API server https URL that OpenBao calls for TokenReview (--kubernetes-auth external only) |
--kubernetes-token-reviewer-jwt-file |
string | (empty) |
no | optional file holding a TokenReview JWT; without it each login's own JWT reviews itself, so workload ServiceAccounts need system:auth-delegator (--kubernetes-auth external only) |
--kv-mount |
string | (empty) |
no | KV v2 mount path (default "secret", env: BOOTSTRAP_KV_PATH) |
--namespace, -n |
string | openbao |
no | K8s namespace where secret store is deployed (env: OPENBAO_NAMESPACE) |
--operator-namespace |
string | (empty) |
no | operator namespace (default "cloudtaser-system", env: BOOTSTRAP_OPERATOR_NAMESPACE) |
--operator-sa-name |
string | (empty) |
no | operator service account name (default "cloudtaser-operator", env: BOOTSTRAP_OPERATOR_SA_NAME) |
--policy-name |
string | (empty) |
no | policy name (default "cloudtaser", env: BOOTSTRAP_POLICY_NAME) |
--release-name |
string | (empty) |
no | Helm release name (env: OPENBAO_RELEASE_NAME) |
--replace-app-policy |
bool | false |
no | explicitly replace existing app grants even when no secret paths are declared (maintenance window) |
--replace-app-role |
bool | false |
no | explicitly replace existing app role bindings (maintenance acknowledgement affecting all consumers) |
--role-max-ttl |
string | (empty) |
no | maximum role token lifetime (default 24h; 1m <= role-ttl <= role-max-ttl <= 24h, env: BOOTSTRAP_ROLE_MAX_TTL) |
--role-ttl |
string | (empty) |
no | role token TTL (default "1h", env: BOOTSTRAP_ROLE_TTL) |
--secret-paths |
string | (empty) |
no | exact comma-separated KV-v2 app records; no wildcard grant (env: BOOTSTRAP_ROLE_SECRET_PATHS); requires finite --bound-sa-names and --bound-sa-namespaces |
--secretstore-address |
string | (empty) |
no | secret store service URL (env: CLOUDTASER_SECRETSTORE_ADDRESS, VAULT_ADDR, OPENBAO_ADDR) |
--secretstore-auth-path |
string | (empty) |
no | Kubernetes auth mount path (default "kubernetes", env: BOOTSTRAP_AUTH_PATH) |
--secretstore-ca-file |
string | (empty) |
no | PEM CA bundle for verified secret-store TLS (env: VAULT_CACERT) |
--secretstore-role |
string | (empty) |
no | role name (default "cloudtaser", env: BOOTSTRAP_ROLE_NAME) |
--secretstore-token |
string | (empty) |
no | root token or token with admin privileges |
--secretstore-token-file |
string | (empty) |
no | path to file containing token, or '-' for stdin |
--timeout |
duration | 20m0s |
no | maximum time for the command to complete (default 20m0s; also CLOUDTASER_TIMEOUT env) |
--workload-cidrs |
string | (empty) |
no | optional explicit app-token source CIDRs (env: BOOTSTRAP_WORKLOAD_CIDRS); ineffective behind shared NAT; does not stop node root |