Browse Source
Change single Vault pki mount to multi pki mounts paths for etcd and kube CA`s (#1552)
Change single Vault pki mount to multi pki mounts paths for etcd and kube CA`s (#1552)
* Added update CA trust step for etcd and kube/secrets roles * Added load_balancer_domain_name to certificate alt names if defined. Reset CA's in RedHat os. * Rename kube-cluster-ca.crt to vault-ca.crt, we need separated CA`s for vault, etcd and kube. * Vault role refactoring, remove optional cert vault auth because not not used and worked. Create separate CA`s fro vault and etcd. * Fixed different certificates set for vault cert_managment * Update doc/vault.md * Fixed condition create vault CA, wrong group * Fixed missing etcd_cert_path mount for rkt deployment type. Distribute vault roles for all vault hosts * Removed wrong when condition in create etcd role vault tasks.pull/1587/merge
committed by
Matthew Mosesohn
36 changed files with 336 additions and 328 deletions
Split View
Diff Options
-
27docs/vault.md
-
2roles/etcd/defaults/main.yml
-
27roles/etcd/tasks/gen_certs_script.yml
-
2roles/etcd/tasks/gen_certs_vault.yml
-
3roles/etcd/tasks/main.yml
-
27roles/etcd/tasks/upd_ca_trust.yml
-
1roles/kubernetes/secrets/defaults/main.yml
-
27roles/kubernetes/secrets/tasks/gen_certs_script.yml
-
28roles/kubernetes/secrets/tasks/gen_certs_vault.yml
-
3roles/kubernetes/secrets/tasks/main.yml
-
27roles/kubernetes/secrets/tasks/upd_ca_trust.yml
-
10roles/reset/tasks/main.yml
-
40roles/vault/defaults/main.yml
-
6roles/vault/tasks/bootstrap/ca_trust.yml
-
20roles/vault/tasks/bootstrap/create_etcd_role.yml
-
21roles/vault/tasks/bootstrap/gen_auth_ca.yml
-
31roles/vault/tasks/bootstrap/gen_ca.yml
-
3roles/vault/tasks/bootstrap/gen_vault_certs.yml
-
59roles/vault/tasks/bootstrap/main.yml
-
26roles/vault/tasks/bootstrap/role_auth_cert.yml
-
11roles/vault/tasks/bootstrap/role_auth_userpass.yml
-
16roles/vault/tasks/bootstrap/sync_etcd_certs.yml
-
11roles/vault/tasks/cluster/create_roles.yml
-
41roles/vault/tasks/cluster/main.yml
-
19roles/vault/tasks/cluster/role_auth_cert.yml
-
10roles/vault/tasks/cluster/role_auth_userpass.yml
-
7roles/vault/tasks/shared/cert_auth_mount.yml
-
9roles/vault/tasks/shared/config_ca.yml
-
16roles/vault/tasks/shared/create_mount.yml
-
35roles/vault/tasks/shared/create_role.yml
-
29roles/vault/tasks/shared/gen_ca.yml
-
15roles/vault/tasks/shared/issue_cert.yml
-
18roles/vault/tasks/shared/mount.yml
-
34roles/vault/tasks/shared/pki_mount.yml
-
1roles/vault/templates/docker.service.j2
-
2roles/vault/templates/rkt.service.j2
@ -0,0 +1,27 @@ |
|||
--- |
|||
- name: Gen_certs | target ca-certificate store file |
|||
set_fact: |
|||
ca_cert_path: |- |
|||
{% if ansible_os_family == "Debian" -%} |
|||
/usr/local/share/ca-certificates/etcd-ca.crt |
|||
{%- elif ansible_os_family == "RedHat" -%} |
|||
/etc/pki/ca-trust/source/anchors/etcd-ca.crt |
|||
{%- elif ansible_os_family in ["CoreOS", "Container Linux by CoreOS"] -%} |
|||
/etc/ssl/certs/etcd-ca.pem |
|||
{%- endif %} |
|||
tags: facts |
|||
|
|||
- name: Gen_certs | add CA to trusted CA dir |
|||
copy: |
|||
src: "{{ etcd_cert_dir }}/ca.pem" |
|||
dest: "{{ ca_cert_path }}" |
|||
remote_src: true |
|||
register: etcd_ca_cert |
|||
|
|||
- name: Gen_certs | update ca-certificates (Debian/Ubuntu/Container Linux by CoreOS) |
|||
command: update-ca-certificates |
|||
when: etcd_ca_cert.changed and ansible_os_family in ["Debian", "CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
- name: Gen_certs | update ca-certificates (RedHat) |
|||
command: update-ca-trust extract |
|||
when: etcd_ca_cert.changed and ansible_os_family == "RedHat" |
@ -1,2 +1,3 @@ |
|||
--- |
|||
kube_cert_group: kube-cert |
|||
kube_vault_mount_path: kube |
@ -0,0 +1,27 @@ |
|||
--- |
|||
- name: Gen_certs | target ca-certificates path |
|||
set_fact: |
|||
ca_cert_path: |- |
|||
{% if ansible_os_family == "Debian" -%} |
|||
/usr/local/share/ca-certificates/kube-ca.crt |
|||
{%- elif ansible_os_family == "RedHat" -%} |
|||
/etc/pki/ca-trust/source/anchors/kube-ca.crt |
|||
{%- elif ansible_os_family in ["CoreOS", "Container Linux by CoreOS"] -%} |
|||
/etc/ssl/certs/kube-ca.pem |
|||
{%- endif %} |
|||
tags: facts |
|||
|
|||
- name: Gen_certs | add CA to trusted CA dir |
|||
copy: |
|||
src: "{{ kube_cert_dir }}/ca.pem" |
|||
dest: "{{ ca_cert_path }}" |
|||
remote_src: true |
|||
register: kube_ca_cert |
|||
|
|||
- name: Gen_certs | update ca-certificates (Debian/Ubuntu/Container Linux by CoreOS) |
|||
command: update-ca-certificates |
|||
when: kube_ca_cert.changed and ansible_os_family in ["Debian", "CoreOS", "Container Linux by CoreOS"] |
|||
|
|||
- name: Gen_certs | update ca-certificates (RedHat) |
|||
command: update-ca-trust extract |
|||
when: kube_ca_cert.changed and ansible_os_family == "RedHat" |
@ -1,9 +1,17 @@ |
|||
--- |
|||
- include: ../shared/auth_backend.yml |
|||
vars: |
|||
auth_backend_description: A Username/Password Auth Backend primarily used for services needing to issue certificates |
|||
auth_backend_path: userpass |
|||
auth_backend_type: userpass |
|||
delegate_to: "{{ groups.vault|first }}" |
|||
run_once: true |
|||
|
|||
- include: ../shared/create_role.yml |
|||
vars: |
|||
create_role_name: "{{ item.name }}" |
|||
create_role_group: "{{ item.group }}" |
|||
create_role_policy_rules: "{{ item.policy_rules }}" |
|||
create_role_options: "{{ item.role_options }}" |
|||
with_items: "{{ vault_roles }}" |
|||
when: item.name == "etcd" |
|||
create_role_name: "{{ vault_etcd_role.name }}" |
|||
create_role_group: "{{ vault_etcd_role.group }}" |
|||
create_role_policy_rules: "{{ vault_etcd_role.policy_rules }}" |
|||
create_role_options: "{{ vault_etcd_role.role_options }}" |
|||
create_role_mount_path: "{{ vault_etcd_role.mount_path }}" |
|||
when: inventory_hostname in groups.etcd |
@ -1,21 +0,0 @@ |
|||
--- |
|||
|
|||
- name: bootstrap/gen_auth_ca | Generate Root CA |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/auth-pki/root/generate/exported" |
|||
headers: "{{ vault_headers }}" |
|||
method: POST |
|||
body_format: json |
|||
body: "{{ vault_ca_options }}" |
|||
register: vault_auth_ca_gen |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- name: bootstrap/gen_auth_ca | Copy auth CA cert to Vault nodes |
|||
copy: |
|||
content: "{{ hostvars[groups.vault|first]['vault_auth_ca_gen']['json']['data']['certificate'] }}" |
|||
dest: "{{ vault_cert_dir }}/auth-ca.pem" |
|||
|
|||
- name: bootstrap/gen_auth_ca | Copy auth CA key to Vault nodes |
|||
copy: |
|||
content: "{{ hostvars[groups.vault|first]['vault_auth_ca_gen']['json']['data']['private_key'] }}" |
|||
dest: "{{ vault_cert_dir }}/auth-ca-key.pem" |
@ -1,31 +0,0 @@ |
|||
--- |
|||
|
|||
- name: bootstrap/gen_ca | Ensure vault_cert_dir exists |
|||
file: |
|||
mode: 0755 |
|||
path: "{{ vault_cert_dir }}" |
|||
state: directory |
|||
|
|||
- name: bootstrap/gen_ca | Generate Root CA in vault-temp |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/pki/root/generate/exported" |
|||
headers: "{{ vault_headers }}" |
|||
method: POST |
|||
body_format: json |
|||
body: "{{ vault_ca_options }}" |
|||
register: vault_ca_gen |
|||
when: inventory_hostname == groups.vault|first and vault_ca_cert_needed |
|||
|
|||
- name: bootstrap/gen_ca | Copy root CA cert locally |
|||
copy: |
|||
content: "{{ hostvars[groups.vault|first]['vault_ca_gen']['json']['data']['certificate'] }}" |
|||
dest: "{{ vault_cert_dir }}/ca.pem" |
|||
mode: 0644 |
|||
when: vault_ca_cert_needed |
|||
|
|||
- name: bootstrap/gen_ca | Copy root CA key locally |
|||
copy: |
|||
content: "{{ hostvars[groups.vault|first]['vault_ca_gen']['json']['data']['private_key'] }}" |
|||
dest: "{{ vault_cert_dir }}/ca-key.pem" |
|||
mode: 0640 |
|||
when: vault_ca_cert_needed |
@ -1,26 +0,0 @@ |
|||
--- |
|||
|
|||
- include: ../shared/sync_auth_certs.yml |
|||
when: inventory_hostname in groups.vault |
|||
|
|||
- include: ../shared/cert_auth_mount.yml |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: ../shared/auth_backend.yml |
|||
vars: |
|||
auth_backend_description: A Cert-based Auth primarily for services needing to issue certificates |
|||
auth_backend_name: cert |
|||
auth_backend_type: cert |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: gen_auth_ca.yml |
|||
when: inventory_hostname in groups.vault and vault_auth_ca_cert_needed |
|||
|
|||
- include: ../shared/config_ca.yml |
|||
vars: |
|||
ca_name: auth-ca |
|||
mount_name: auth-pki |
|||
when: inventory_hostname == groups.vault|first and not vault_auth_ca_cert_needed |
|||
|
|||
- include: create_etcd_role.yml |
|||
when: inventory_hostname in groups.etcd |
@ -1,11 +0,0 @@ |
|||
--- |
|||
|
|||
- include: ../shared/auth_backend.yml |
|||
vars: |
|||
auth_backend_description: A Username/Password Auth Backend primarily used for services needing to issue certificates |
|||
auth_backend_path: userpass |
|||
auth_backend_type: userpass |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: create_etcd_role.yml |
|||
when: inventory_hostname in groups.etcd |
@ -0,0 +1,16 @@ |
|||
--- |
|||
|
|||
- include: ../shared/sync_file.yml |
|||
vars: |
|||
sync_file: "ca.pem" |
|||
sync_file_dir: "{{ vault_etcd_cert_dir }}" |
|||
sync_file_hosts: "{{ groups.etcd }}" |
|||
sync_file_is_cert: true |
|||
|
|||
- name: bootstrap/sync_etcd_certs | Set facts for etcd sync_file results |
|||
set_fact: |
|||
vault_etcd_ca_cert_needed: "{{ sync_file_results[0]['no_srcs'] }}" |
|||
|
|||
- name: bootstrap/sync_etcd_certs | Unset sync_file_results after ca.pem sync |
|||
set_fact: |
|||
sync_file_results: [] |
@ -1,19 +0,0 @@ |
|||
--- |
|||
|
|||
- include: ../shared/cert_auth_mount.yml |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: ../shared/auth_backend.yml |
|||
vars: |
|||
auth_backend_description: A Cert-based Auth primarily for services needing to issue certificates |
|||
auth_backend_name: cert |
|||
auth_backend_type: cert |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: ../shared/config_ca.yml |
|||
vars: |
|||
ca_name: auth-ca |
|||
mount_name: auth-pki |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: create_roles.yml |
@ -1,10 +0,0 @@ |
|||
--- |
|||
|
|||
- include: ../shared/auth_backend.yml |
|||
vars: |
|||
auth_backend_description: A Username/Password Auth Backend primarily used for services needing to issue certificates |
|||
auth_backend_path: userpass |
|||
auth_backend_type: userpass |
|||
when: inventory_hostname == groups.vault|first |
|||
|
|||
- include: create_roles.yml |
@ -0,0 +1,16 @@ |
|||
--- |
|||
- include: ../shared/pki_mount.yml |
|||
vars: |
|||
pki_mount_path: "{{ create_mount_path }}" |
|||
pki_mount_options: |
|||
config: |
|||
default_lease_ttl: "{{ create_mount_default_lease_ttl }}" |
|||
max_lease_ttl: "{{ create_mount_max_lease_ttl }}" |
|||
description: "{{ create_mount_description }}" |
|||
|
|||
- include: ../shared/config_ca.yml |
|||
vars: |
|||
config_ca_ca_pem: "{{ create_mount_cert_dir }}/ca.pem" |
|||
config_ca_ca_key: "{{ create_mount_cert_dir }}/ca-key.pem" |
|||
config_ca_mount_path: "{{ create_mount_path }}" |
|||
when: create_mount_config_ca_needed |
@ -0,0 +1,29 @@ |
|||
--- |
|||
- name: "bootstrap/gen_ca | Ensure cert_dir {{ gen_ca_cert_dir }} exists" |
|||
file: |
|||
mode: 0755 |
|||
path: "{{ gen_ca_cert_dir }}" |
|||
state: directory |
|||
|
|||
- name: "bootstrap/gen_ca | Generate {{ gen_ca_mount_path }} root CA" |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/{{ gen_ca_mount_path }}/root/generate/exported" |
|||
headers: "{{ vault_headers }}" |
|||
method: POST |
|||
body_format: json |
|||
body: "{{ vault_ca_options }}" |
|||
register: vault_ca_gen |
|||
delegate_to: "{{ groups.vault|first }}" |
|||
run_once: true |
|||
|
|||
- name: "bootstrap/gen_ca | Copy {{ gen_ca_mount_path }} root CA cert locally" |
|||
copy: |
|||
content: "{{ hostvars[groups.vault|first]['vault_ca_gen']['json']['data']['certificate'] }}" |
|||
dest: "{{ gen_ca_cert_dir }}/ca.pem" |
|||
mode: 0644 |
|||
|
|||
- name: "bootstrap/gen_ca | Copy {{ gen_ca_mount_path }} root CA key locally" |
|||
copy: |
|||
content: "{{ hostvars[groups.vault|first]['vault_ca_gen']['json']['data']['private_key'] }}" |
|||
dest: "{{ gen_ca_cert_dir }}/ca-key.pem" |
|||
mode: 0640 |
@ -1,18 +0,0 @@ |
|||
--- |
|||
|
|||
- name: shared/mount | Test if PKI mount exists |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/sys/mounts/{{ mount_name }}/tune" |
|||
headers: "{{ vault_headers }}" |
|||
ignore_errors: true |
|||
register: vault_pki_mount_check |
|||
|
|||
- name: shared/mount | Mount PKI mount if needed |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/sys/mounts/{{ mount_name }}" |
|||
headers: "{{ vault_headers }}" |
|||
method: POST |
|||
body_format: json |
|||
body: "{{ mount_options|d() }}" |
|||
status_code: 204 |
|||
when: vault_pki_mount_check|failed |
@ -1,11 +1,27 @@ |
|||
--- |
|||
- name: "shared/mount | Test if {{ pki_mount_path }} PKI mount exists" |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/sys/mounts/{{ pki_mount_path }}/tune" |
|||
headers: "{{ vault_headers }}" |
|||
ignore_errors: true |
|||
register: vault_pki_mount_check |
|||
|
|||
- include: mount.yml |
|||
vars: |
|||
mount_name: pki |
|||
mount_options: |
|||
config: |
|||
default_lease_ttl: "{{ vault_default_lease_ttl }}" |
|||
max_lease_ttl: "{{ vault_max_lease_ttl }}" |
|||
description: The default PKI mount for Kubernetes |
|||
type: pki |
|||
- name: shared/mount | Set pki mount type |
|||
set_fact: |
|||
mount_options: "{{ pki_mount_options | combine({'type': 'pki'}) }}" |
|||
when: vault_pki_mount_check|failed |
|||
|
|||
- name: shared/mount | Mount {{ pki_mount_path }} PKI mount if needed |
|||
uri: |
|||
url: "{{ vault_leader_url }}/v1/sys/mounts/{{ pki_mount_path }}" |
|||
headers: "{{ vault_headers }}" |
|||
method: POST |
|||
body_format: json |
|||
body: "{{ mount_options|d() }}" |
|||
status_code: 204 |
|||
when: vault_pki_mount_check|failed |
|||
|
|||
- name: shared/mount | Unset mount options |
|||
set_fact: |
|||
mount_options: {} |
|||
when: vault_pki_mount_check|failed |
Write
Preview
Loading…
Cancel
Save