Skip to content

Commit 8c57aa0

Browse files
authored
Merge pull request #39 from mlorenzofr/mbp-935
mbp-935: Add Vault JWT configuration tasks
2 parents 5987950 + 0c8b949 commit 8c57aa0

File tree

4 files changed

+85
-0
lines changed

4 files changed

+85
-0
lines changed

roles/vault_utils/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ external_secrets_ns: golang-external-secrets
3434
external_secrets_sa: golang-external-secrets
3535
unseal_secret: "vaultkeys"
3636
unseal_namespace: "imperative"
37+
vault_jwt_config: false
3738
```
3839
3940
## Dependencies

roles/vault_utils/defaults/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ external_secrets_sa: golang-external-secrets
2424
external_secrets_secret: golang-external-secrets
2525
unseal_secret: "vaultkeys"
2626
unseal_namespace: "imperative"
27+
vault_jwt_config: false

roles/vault_utils/tasks/main.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,8 @@
1818
- name: Load secrets
1919
ansible.builtin.import_tasks: push_secrets.yaml
2020
tags: push_secrets
21+
22+
- name: Vault JWT configuration
23+
ansible.builtin.import_tasks: vault_jwt.yaml
24+
tags: vault_jwt
25+
when: vault_jwt_config | default(false) | bool
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
- name: Check vault auth configuration
3+
kubernetes.core.k8s_exec:
4+
namespace: "{{ vault_ns }}"
5+
pod: "{{ vault_pod }}"
6+
command: vault auth list -format=json
7+
register: vault_auth_json
8+
until: "'rc' in vault_auth_json"
9+
retries: 20
10+
delay: 45
11+
changed_when: false
12+
failed_when: "'stdout_lines' not in vault_auth_json"
13+
14+
- name: Set vault auth output json fact
15+
ansible.builtin.set_fact:
16+
vault_auth: "{{ vault_auth_json.stdout | from_json }}"
17+
when: vault_auth_json.stdout_lines | length > 0
18+
19+
- name: Set vault auth jwt fact
20+
ansible.builtin.set_fact:
21+
vault_auth_jwt: "{{ true if 'jwt/' in vault_auth else false }}"
22+
when: vault_auth | length > 0
23+
24+
- name: Enable jwt auth
25+
kubernetes.core.k8s_exec:
26+
namespace: "{{ vault_ns }}"
27+
pod: "{{ vault_pod }}"
28+
command: vault auth enable jwt
29+
when: not vault_auth_jwt
30+
31+
- name: Get router CA certificate
32+
kubernetes.core.k8s_info:
33+
kind: Secret
34+
namespace: openshift-ingress-operator
35+
name: router-ca
36+
api_version: v1
37+
register: router_ca_cert
38+
when: not vault_auth_jwt
39+
40+
- name: Copy router CA certificate to vault
41+
kubernetes.core.k8s_cp:
42+
namespace: "{{ vault_ns }}"
43+
pod: "{{ vault_pod }}"
44+
content: "{{ router_ca_cert.resources[0].data['tls.crt'] | b64decode }}"
45+
remote_path: /tmp/router-ca.crt
46+
when: not vault_auth_jwt
47+
48+
- name: Write JWT configuration
49+
kubernetes.core.k8s_exec:
50+
namespace: "{{ vault_ns }}"
51+
pod: "{{ vault_pod }}"
52+
command: >
53+
vault write auth/jwt/config
54+
oidc_discovery_url={{ oidc_discovery_url }}
55+
default_role={{ default_role | default('default') }}
56+
oidc_discovery_ca_pem=@/tmp/router-ca.crt
57+
when: not vault_auth_jwt
58+
59+
- name: Write JWT role
60+
kubernetes.core.k8s_exec:
61+
namespace: "{{ vault_ns }}"
62+
pod: "{{ vault_pod }}"
63+
command: >
64+
vault write auth/jwt/role/{{ default_role | default('default') }}
65+
role_type=jwt
66+
user_claim=sub
67+
bound_audiences={{ spiffe_audience }}
68+
bound_subject={{ spiffe_subject }}
69+
token_ttl={{ token_ttl | default('24h') }}
70+
token_policies={{ vault_global_policy }}-secret
71+
when: not vault_auth_jwt
72+
73+
- name: Delete router CA certificate
74+
kubernetes.core.k8s_exec:
75+
namespace: "{{ vault_ns }}"
76+
pod: "{{ vault_pod }}"
77+
command: rm -f /tmp/router-ca.crt
78+
when: not vault_auth_jwt

0 commit comments

Comments
 (0)