Skip to content

Commit ed6c72f

Browse files
committed
Extend functionality to write out files and generate certs
1 parent acac322 commit ed6c72f

File tree

13 files changed

+181
-26
lines changed

13 files changed

+181
-26
lines changed

roles/vault/defaults/main.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,14 @@ vault_config: >
3333
{% else %}
3434
"tls_disable": "true"
3535
{% endif %}
36+
}{% if vault_bind_address != '127.0.0.1' %},
37+
},
38+
{
39+
"tcp": {
40+
"address": "127.0.0.1:8200",
41+
"tls_disable": "true"
3642
}
43+
{% endif %}
3744
}],
3845
"storage": {
3946
"consul": {

roles/vault/tasks/consul.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,4 @@
2323
-retry-join "{{ hostvars[host].ansible_facts[consul_bind_interface].ipv4.address }}"
2424
{% endif %}
2525
{% endfor %}
26-
become: True
26+
become: true

roles/vault/tasks/main.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
---
2-
- import_tasks: prechecks.yml
3-
- import_tasks: consul.yml
4-
- import_tasks: vault.yml
2+
- name: "Vault Prechecks"
3+
import_tasks: prechecks.yml
4+
5+
- name: "Deploy Consul"
6+
import_tasks: consul.yml
7+
8+
- name: "Deploy Vault"
9+
import_tasks: vault.yml

roles/vault/tasks/vault.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
VAULT_LOCAL_CONFIG: "{{ vault_config | to_json }}"
1515
command: >
1616
server
17-
become: True
17+
become: true
1818

1919
- name: Check if vault is initialized
2020
uri:
@@ -25,7 +25,8 @@
2525
run_once: true
2626
until: vault_init_status.status == 200
2727

28-
- block:
28+
- name: "Initialize vault"
29+
block:
2930
- name: Initialize vault
3031
hashivault_init:
3132
url: "{{ vault_api_addr }}"

roles/vault_pki/README.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
This role Generates a Root and Intermediate certificate and generates leaf certificates
2+
3+
Requirements
4+
------------
5+
6+
`ansible-modules-hashivault` Python package installed on the Ansible control host
7+
`hvac` Python package installed on the remote hosts
8+
9+
Note that since version `4.6.4`, `ansible-modules-hashivault` requires
10+
`ansible>4`.
11+
12+
Role variables
13+
--------------
14+
15+
* Vault Create Root
16+
* `vault_pki_root_create`: Wether to create a RootCA certificate or not (default: `true`)
17+
* Mandatory if `vault_pki_root_create` equals `true`
18+
* `vault_pki_root_ca_name`: The name of the RootCA to create (string)
19+
* `vault_pki_root_ca_common_name`: The common name of the RootCA (default: vault_pki_root_ca_name)
20+
* `vault_pki_write_root_ca_to_file`: Wether to write the root CA certificate to a file for importing into a systems trust store (default: `false`)
21+
22+
* Vault Create Intermediate
23+
* `vault_pki_intermediate_create`: Wether to create an intermediate CA or not (default: `true`)
24+
* `vault_pki_intermediate_import`: Wether to import a pre-existing intermediate pem bundle (default: `false`)
25+
* `vault_pki_intermediate_export`: Wether to export the generated intermediate pem bundle (default: `false`)
26+
27+
* Mandatory if `vault_pki_intermediate_create` equals `true`
28+
* `vault_pki_intermediate_ca_name`: The name of the Intermediate CA to create
29+
* `vault_pki_intermediate_ca_common_name`: The common name of the RootCA (default: `vault_pki_intermediate_ca_name`)
30+
* Mandatory if `vault_pki_intermediate_import`: equals `true`
31+
* `vault_pki_intermediate_ca_bundle`: Concatenated certificate, intermediate and private key
32+
* `vault_pki_intermediate_roles`: Certificate Roles to create for the intermediate CA. List of Dicts containing `{name: <role_name>, config: { <pki_option>: <value> ...}`
33+
34+
* Certificate Output
35+
* `vault_pki_generate_certificates`: whether to generate leaf certificates or not (default: `false`)
36+
* `vault_pki_write_certificates_host:` The host on which certificates will be written to. (default: "localhost")
37+
* `vault_pki_certificates_directory`: directory to output certificate files to.
38+
* `vault_pki_write_certificates`: wether to write generated certificates to a file or not (default: `false`)
39+
* `vault_pki_certificate_subject`: The certificate subject parameters e.g. `ttl` `ip_sans`. List of Dicts containing `{role: <name of Certificate role>, common_name: <common name of certificate>, extra_params: {ttl: <value>, alt_sans: <value>, ip_sans: <value> }}`

roles/vault_pki/defaults/main.yml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
---
2-
vault_pki_root_create: True
2+
vault_pki_root_create: true
33
vault_pki_root_ca_name: ""
44
vault_pki_root_ca_common_name: "{{ vault_pki_root_ca_name }}"
5+
vault_pki_write_root_ca_to_file: false
56

6-
vault_pki_intermediate_create: True
7-
vault_pki_intermediate_import: False
7+
vault_pki_intermediate_create: true
8+
vault_pki_intermediate_import: false
9+
vault_pki_intermediate_export: false
810
vault_pki_intermediate_ca_name: ""
911
vault_pki_intermediate_ca_common_name: "{{ vault_pki_intermediate_ca_name }}"
10-
vault_pki_intermediate_ca_type: "internal"
12+
vault_pki_intermediate_ca_bundle: ""
1113

1214
vault_pki_intermediate_roles: {}
15+
16+
vault_pki_generate_certificates: false
17+
18+
vault_pki_write_certificates_host: "localhost"
19+
vault_pki_write_certificates_directory: ""
20+
vault_pki_write_certificate_files: false
21+
22+
vault_pki_certificate_subject: []
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
- name: "Generate Certificate"
3+
hashivault_pki_cert_issue:
4+
url: "{{ vault_api_addr }}"
5+
token: "{{ vault_token }}"
6+
mount_point: "{{ vault_pki_intermediate_ca_name }}"
7+
common_name: "{{ item.common_name }}"
8+
role: "{{ item.role }}"
9+
extra_params: "{{ item.extra_params }}"
10+
loop: "{{ vault_pki_certificate_subject }}"
11+
register: certificate_data
12+
13+
- name: "Write out certificate pem_bundle"
14+
copy:
15+
content: |
16+
{{ item.data.certificate }}
17+
{{ item.data.issuing_ca }}
18+
{{ item.data.private_key }}
19+
dest: "{{ vault_pki_certificates_directory }}/{{ item.item.common_name | replace(' ', '-') }}.pem"
20+
mode: 0600
21+
delegate_to: "{{ vault_pki_certificates_host }}"
22+
loop: "{{ certificate_data.results }}"
23+
when: vault_pki_write_certificate_files | bool

roles/vault_pki/tasks/intermediate.yml

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414
url: "{{ vault_api_addr }}"
1515
token: "{{ vault_token }}"
1616
mount_point: "{{ vault_pki_intermediate_ca_name }}"
17-
type: "{{ vault_pki_intermediate_ca_type }}"
17+
type: "{% if vault_pki_intermediate_export | bool %}exported{% else %}internal{% endif %}"
1818
common_name: "{{ vault_pki_intermediate_ca_common_name }}"
1919
kind: "intermediate"
2020
config:
2121
key_bits: 4096
2222
max_lease_ttl: "43830h"
23+
default_lease_ttl: "43830h"
2324
register: intermediate_ca_csr
2425

2526
- name: "Sign Intermediate CSR"
@@ -37,7 +38,35 @@
3738
url: "{{ vault_api_addr }}"
3839
token: "{{ vault_token }}"
3940
mount_point: "{{ vault_pki_intermediate_ca_name }}"
40-
certificate: "{{ intermediate_ca_csr_signed.data.certificate }}\n{{ intermediate_ca_csr_signed.data.issuing_ca }}"
41+
certificate: |
42+
{{ intermediate_ca_csr_signed.data.certificate }}
43+
{{ intermediate_ca_csr_signed.data.issuing_ca }}
44+
when:
45+
- not vault_pki_intermediate_export | bool
46+
47+
- name: "Set Exported Intermediate as signed"
48+
hashivault_pki_ca_set:
49+
url: "{{ vault_api_addr }}"
50+
token: "{{ vault_token }}"
51+
mount_point: "{{ vault_pki_intermediate_ca_name }}"
52+
pem_bundle: |
53+
{{ intermediate_ca_csr_signed.data.certificate }}
54+
{{ intermediate_ca_csr_signed.data.issuing_ca }}
55+
{{ intermediate_ca_csr.data.private_key }}
56+
when:
57+
- vault_pki_intermediate_export | bool
58+
59+
- name: "Write out Intermediate Certs and keys to file"
60+
copy:
61+
content: |
62+
{{ intermediate_ca_csr_signed.data.certificate }}
63+
{{ intermediate_ca_csr_signed.data.issuing_ca }}
64+
{{ intermediate_ca_csr.data.private_key }}
65+
dest: "{{ vault_pki_certificates_directory }}/{{ vault_pki_intermediate_ca_name |replace(' ', '-') }}.pem"
66+
mode: 0600
67+
delegate_to: "{{ vault_pki_certificates_host }}"
68+
when:
69+
- vault_pki_intermediate_export | bool
4170

4271
when: not vault_pki_intermediate_import | bool
4372

@@ -49,5 +78,5 @@
4978
token: "{{ vault_token }}"
5079
mount_point: "{{ vault_pki_intermediate_ca_name }}"
5180
pem_bundle: "{{ vault_pki_intermediate_ca_bundle }}"
52-
81+
5382
when: vault_pki_intermediate_import | bool

roles/vault_pki/tasks/main.yml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
---
2-
- include_tasks: "prechecks.yml"
3-
- include_tasks: "root.yml"
2+
- name: "Prechecks"
3+
include_tasks: "prechecks.yml"
4+
5+
- name: "Generate Root"
6+
include_tasks: "root.yml"
47
when: vault_pki_root_create | bool
58

6-
- include_tasks: "intermediate.yml"
9+
- name: "Generate Intermediate"
10+
include_tasks: "intermediate.yml"
711
when: vault_pki_intermediate_create | bool
812

9-
- include_tasks: "roles.yml"
13+
- name: "Define Roles"
14+
include_tasks: "roles.yml"
1015
when: vault_pki_intermediate_roles | length > 0
16+
17+
- name: "Generate Certificates"
18+
include_tasks: "create_cert.yml"
19+
when:
20+
- vault_pki_generate_certificates | bool
21+
- vault_pki_certificate_subject | length > 0

roles/vault_pki/tasks/prechecks.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
msg: "variable {{ item }} is not set"
55
when:
66
- vars[item.name] | length == 0
7-
- item.when
7+
- item.when
88
loop:
99
- { "name": "vault_pki_root_ca_name", "when": "vault_pki_root_create | bool" }
1010
- { "name": "vault_pki_intermediate_ca_name", "when": "vault_pki_intermediate_create | bool" }

0 commit comments

Comments
 (0)