Skip to content

Commit acac322

Browse files
committed
Add vault_pki role
Install ansible-modules-hashivault from stackhpc fork
1 parent 1a4ecc7 commit acac322

File tree

9 files changed

+150
-2
lines changed

9 files changed

+150
-2
lines changed

.github/workflows/pull_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ jobs:
6565
else
6666
ansible_package=ansible-core
6767
fi
68-
python3 -m pip install $ansible_package==$ansible_version.* docker ansible-modules-hashivault
68+
python3 -m pip install $ansible_package==$ansible_version.* docker git+https://github.com/stackhpc/ansible-modules-hashivault@stackhpc
6969
ansible-galaxy collection build
7070
ansible-galaxy collection install *.tar.gz
7171

roles/vault_pki/defaults/main.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
vault_pki_root_create: True
3+
vault_pki_root_ca_name: ""
4+
vault_pki_root_ca_common_name: "{{ vault_pki_root_ca_name }}"
5+
6+
vault_pki_intermediate_create: True
7+
vault_pki_intermediate_import: False
8+
vault_pki_intermediate_ca_name: ""
9+
vault_pki_intermediate_ca_common_name: "{{ vault_pki_intermediate_ca_name }}"
10+
vault_pki_intermediate_ca_type: "internal"
11+
12+
vault_pki_intermediate_roles: {}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
---
2+
- name: "Ensure Vault Intermediate PKI backend exists"
3+
hashivault_secret_engine:
4+
url: "{{ vault_api_addr }}"
5+
token: "{{ vault_token }}"
6+
name: "{{ vault_pki_intermediate_ca_name }}"
7+
description: "{{ vault_pki_intermediate_ca_name }} CA"
8+
backend: "pki"
9+
10+
- name: "Generate Intermediate CA cert, key and sign CSR"
11+
block:
12+
- name: "Generate Vault Intermediate CA cert and key"
13+
hashivault_pki_ca:
14+
url: "{{ vault_api_addr }}"
15+
token: "{{ vault_token }}"
16+
mount_point: "{{ vault_pki_intermediate_ca_name }}"
17+
type: "{{ vault_pki_intermediate_ca_type }}"
18+
common_name: "{{ vault_pki_intermediate_ca_common_name }}"
19+
kind: "intermediate"
20+
config:
21+
key_bits: 4096
22+
max_lease_ttl: "43830h"
23+
register: intermediate_ca_csr
24+
25+
- name: "Sign Intermediate CSR"
26+
hashivault_pki_cert_sign:
27+
url: "{{ vault_api_addr }}"
28+
token: "{{ vault_token }}"
29+
mount_point: "{{ vault_pki_root_ca_name }}"
30+
csr: "{{ intermediate_ca_csr.data.csr }}"
31+
common_name: "{{ vault_pki_intermediate_ca_common_name }}"
32+
type: intermediate
33+
register: intermediate_ca_csr_signed
34+
35+
- name: "Set Intermediate as signed"
36+
hashivault_pki_set_signed:
37+
url: "{{ vault_api_addr }}"
38+
token: "{{ vault_token }}"
39+
mount_point: "{{ vault_pki_intermediate_ca_name }}"
40+
certificate: "{{ intermediate_ca_csr_signed.data.certificate }}\n{{ intermediate_ca_csr_signed.data.issuing_ca }}"
41+
42+
when: not vault_pki_intermediate_import | bool
43+
44+
- name: "Import Intermediate CA cert and key"
45+
block:
46+
- name: "Import Intermediate CA cert and key"
47+
hashivault_pki_ca_set:
48+
url: "{{ vault_api_addr }}"
49+
token: "{{ vault_token }}"
50+
mount_point: "{{ vault_pki_intermediate_ca_name }}"
51+
pem_bundle: "{{ vault_pki_intermediate_ca_bundle }}"
52+
53+
when: vault_pki_intermediate_import | bool

roles/vault_pki/tasks/main.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
- include_tasks: "prechecks.yml"
3+
- include_tasks: "root.yml"
4+
when: vault_pki_root_create | bool
5+
6+
- include_tasks: "intermediate.yml"
7+
when: vault_pki_intermediate_create | bool
8+
9+
- include_tasks: "roles.yml"
10+
when: vault_pki_intermediate_roles | length > 0
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
- name: "Fail if variables are not set"
3+
fail:
4+
msg: "variable {{ item }} is not set"
5+
when:
6+
- vars[item.name] | length == 0
7+
- item.when
8+
loop:
9+
- { "name": "vault_pki_root_ca_name", "when": "vault_pki_root_create | bool" }
10+
- { "name": "vault_pki_intermediate_ca_name", "when": "vault_pki_intermediate_create | bool" }

roles/vault_pki/tasks/roles.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
- name: "Create PKI role(s)"
3+
hashivault_pki_role:
4+
url: "{{ vault_api_addr }}"
5+
token: "{{ vault_token }}"
6+
mount_point: "{{ vault_pki_intermediate_ca_name }}"
7+
name: "{{ item.name }}"
8+
config: "{{ item.config }}"
9+
loop: "{{ vault_pki_intermediate_roles }}"

roles/vault_pki/tasks/root.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
---
2+
- name: "Ensure Vault RootCA PKI backend exists"
3+
hashivault_secret_engine:
4+
url: "{{ vault_api_addr }}"
5+
token: "{{ vault_token }}"
6+
name: "{{ vault_pki_root_ca_name }}"
7+
description: "{{ vault_pki_root_ca_name }} CA"
8+
backend: "pki"
9+
10+
- name: "Generate Vault Root CA cert and key"
11+
hashivault_pki_ca:
12+
url: "{{ vault_api_addr }}"
13+
token: "{{ vault_token }}"
14+
mount_point: "{{ vault_pki_root_ca_name }}"
15+
type: "internal"
16+
common_name: "{{ vault_pki_root_ca_common_name }}"
17+
kind: "root"
18+
config:
19+
key_bits: 4096
20+
ttl: "43830h"

roles/vault_unseal/tasks/main.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
---
2+
- name: Fail when vault_unseal_keys are empty
3+
fail:
4+
msg: "vault_unseal_keys are empty"
5+
when: not (vault_unseal_keys | length > 0)
6+
27
- name: Unseal Vault
38
hashivault_unseal:
49
authtype: "{{ vault_unseal_authtype | default(omit) }}"
@@ -15,3 +20,10 @@
1520
url: "{{ vault_api_addr }}"
1621
username: "{{ vault_unseal_username | default(omit) }}"
1722
verify: "{{ vault_unseal_verify | default(omit) }}"
23+
register: vault_unseal_status
24+
25+
- name: Fail if vault is sealed (something went wrong)
26+
uri:
27+
url: "{{ vault_api_addr }}/v1/sys/seal-status"
28+
register: vault_seal_status
29+
failed_when: vault_seal_status.json.sealed

tests/test_vault.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,26 @@
2828
import_role:
2929
name: vault_unseal
3030
vars:
31-
vault_keys: "{{ vault_keys.keys_base64 }}"
31+
vault_unseal_keys: "{{ vault_keys.keys_base64 }}"
32+
33+
- name: Configure PKI
34+
import_role:
35+
name: vault_pki
36+
vars:
37+
vault_token: "{{ vault_keys.root_token }}"
38+
vault_pki_root_ca_name: "OS-TLS-ROOT"
39+
vault_pki_intermediate_ca_name: "OS-TLS-INT"
40+
vault_pki_intermediate_roles:
41+
- name: "ServerCert"
42+
config:
43+
max_ttl: 8760h
44+
ttl: 8760h
45+
allow_ip_sans: true
46+
require_cn: false
47+
server_flag: true
48+
key_type: rsa
49+
key_bits: 4096
50+
country: "UK"
51+
locality: "Bristol"
52+
organization: "StackHPC"
53+
ou: "HPC"

0 commit comments

Comments
 (0)