forked from TrueCloudLab/certificates
Added some example ansible configs (#813)
This commit is contained in:
parent
4a0cfd24e5
commit
808f039b09
6 changed files with 142 additions and 0 deletions
18
examples/ansible/smallstep-certs/defaults/main.yml
Normal file
18
examples/ansible/smallstep-certs/defaults/main.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
|
||||
# Root cert for each will be saved in /etc/ssl/smallstep/ca/{{ ca_name }}/certs/root_ca.crt
|
||||
smallstep_root_certs: []
|
||||
# -
|
||||
# ca_name: your_ca
|
||||
# ca_url: "https://certs.your_ca.ca.smallstep.com"
|
||||
# ca_fingerprint: "56092...2200"
|
||||
|
||||
# Each leaf cert will be saved in /etc/ssl/smallstep/leaf/{{ cert_subject }}/{{ cert_subject }}.crt|key
|
||||
smallstep_leaf_certs: []
|
||||
# -
|
||||
# ca_name: your_ca
|
||||
# cert_subject: "{{ inventory_hostname }}"
|
||||
# provisioner_name: "admin"
|
||||
# provisioner_password: "{{ smallstep_ssh_provisioner_password }}"
|
||||
|
44
examples/ansible/smallstep-certs/tasks/main.yml
Normal file
44
examples/ansible/smallstep-certs/tasks/main.yml
Normal file
|
@ -0,0 +1,44 @@
|
|||
|
||||
- name: "Ensure provisioners directories exist"
|
||||
file:
|
||||
path: "/etc/ssl/smallstep/provisioners/{{ item.context }}/{{ item.provisioner_name }}"
|
||||
state: directory
|
||||
mode: 0600
|
||||
owner: root
|
||||
group: root
|
||||
with_items: "{{ smallstep_leaf_certs }}"
|
||||
no_log: true
|
||||
|
||||
- name: "Ensure provisioner passwords are up to date"
|
||||
copy:
|
||||
dest: "/etc/ssl/smallstep/provisioners/{{ item.context }}/{{ item.provisioner_name }}/provisioner-pass.txt"
|
||||
content: "{{ item.provisioner_password }}"
|
||||
mode: 0700
|
||||
owner: root
|
||||
group: root
|
||||
with_items: "{{ smallstep_leaf_certs }}"
|
||||
no_log: true
|
||||
|
||||
- name: "Get root certs for CAs"
|
||||
command:
|
||||
cmd: "step ca bootstrap --context {{ item.context }} --ca-url {{ item.ca_url }} --fingerprint {{ item.ca_fingerprint }}"
|
||||
with_items: "{{ smallstep_root_certs }}"
|
||||
no_log: true
|
||||
|
||||
- name: "Get leaf certs"
|
||||
command:
|
||||
cmd: "step ca certificate --context {{ item.context }} {{ item.cert_subject }} {{ item.cert_path }} {{ item.key_path }} --force --console --provisioner {{ item.provisioner_name }} --provisioner-password-file /etc/ssl/smallstep/provisioners/{{ item.context }}/{{ item.provisioner_name }}/provisioner-pass.txt"
|
||||
with_items: "{{ smallstep_leaf_certs }}"
|
||||
no_log: true
|
||||
|
||||
- name: Ensure cron to renew leaf certs is up to date
|
||||
cron:
|
||||
user: "root"
|
||||
name: "renew leaf cert {{ item.cert_subject }}"
|
||||
cron_file: smallstep
|
||||
job: "step ca renew --context {{ item.context }} {{ item.cert_path }} {{ item.key_path }} --expires-in 6h --force >> /var/log/smallstep-{{ item.cert_subject }}.log 2>&1"
|
||||
state: present
|
||||
minute: "*/30"
|
||||
with_items: "{{ smallstep_leaf_certs }}"
|
||||
when: "{{ item.cron_renew }}"
|
||||
no_log: true
|
2
examples/ansible/smallstep-install/defaults/main.yml
Normal file
2
examples/ansible/smallstep-install/defaults/main.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
smallstep_install_step_version: 0.15.3
|
||||
smallstep_install_step_ssh_version: 0.19.1-1
|
29
examples/ansible/smallstep-install/tasks/main.yml
Normal file
29
examples/ansible/smallstep-install/tasks/main.yml
Normal file
|
@ -0,0 +1,29 @@
|
|||
|
||||
# These steps automate the installation guide here:
|
||||
# https://smallstep.com/docs/sso-ssh/hosts/
|
||||
|
||||
- name: Download step binary
|
||||
get_url:
|
||||
url: "https://files.smallstep.com/step-linux-{{ smallstep_install_step_version }}"
|
||||
dest: "/usr/local/bin/step-{{ smallstep_install_step_version }}"
|
||||
mode: '0755'
|
||||
|
||||
- name: Link binaries to correct version
|
||||
file:
|
||||
src: "/usr/local/bin/step-{{ smallstep_install_step_version }}"
|
||||
dest: "{{ item }}"
|
||||
state: link
|
||||
with_items:
|
||||
- /usr/bin/step
|
||||
- /usr/local/bin/step
|
||||
|
||||
- name: Link /usr/local/bin/step to correct binary version
|
||||
file:
|
||||
src: "/usr/local/bin/step-{{ smallstep_install_step_version }}"
|
||||
dest: /usr/local/bin/step
|
||||
state: link
|
||||
|
||||
- name: Ensure step-ssh is installed
|
||||
apt:
|
||||
deb: "https://files.smallstep.com/step-ssh_{{ smallstep_install_step_ssh_version }}_amd64.deb"
|
||||
state: present
|
8
examples/ansible/smallstep-ssh/defaults/main.yml
Normal file
8
examples/ansible/smallstep-ssh/defaults/main.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
# If this host is behind a bastion this variable should contain the hostname of the bastion
|
||||
smallstep_ssh_host_behind_bastion_name: ""
|
||||
smallstep_ssh_host_is_bastion: false
|
||||
smallstep_ssh_ca_url: "https://ssh.mycompany.ca.smallstep.com"
|
||||
smallstep_ssh_ca_fingerprint: "XXXXXXXXXXXXXXX"
|
||||
|
||||
# Whether or not to reinitialize the host even if it's already been installed
|
||||
smallstep_ssh_force_reinit: true
|
41
examples/ansible/smallstep-ssh/tasks/main.yml
Normal file
41
examples/ansible/smallstep-ssh/tasks/main.yml
Normal file
|
@ -0,0 +1,41 @@
|
|||
|
||||
# These steps automate the installation guide here:
|
||||
# https://smallstep.com/docs/sso-ssh/hosts/
|
||||
|
||||
# TODO: Figure out how to make this idempotent instead of reinstalling on each run
|
||||
|
||||
- name: Bootstrap node to connect to CA
|
||||
command: "step ca bootstrap --context ssh --ca-url {{ smallstep_ssh_ca_url }} --fingerprint {{ smallstep_ssh_ca_fingerprint }} --force"
|
||||
# when: smallstep_ssh_installed.changed or smallstep_ssh_force_reinit
|
||||
|
||||
- name: Get a host SSH certificate
|
||||
command: "step ssh certificate --context ssh {{ inventory_hostname }} /etc/ssh/ssh_host_ecdsa_key.pub --host --sign --provisioner=\"Service Account\" --token=\"{{ smallstep_ssh_enrollment_token }}\" --force"
|
||||
# when: smallstep_ssh_installed.changed or smallstep_ssh_force_reinit
|
||||
|
||||
- name: Configure SSHD (will be overwriten by the sshd template in Ansible later)
|
||||
command: "step ssh config --context ssh --host --set Certificate=ssh_host_ecdsa_key-cert.pub --set Key=ssh_host_ecdsa_key"
|
||||
# when: smallstep_ssh_installed.changed or smallstep_ssh_force_reinit
|
||||
|
||||
- name: Activate SmallStep PAM/NSS modules and nohup sshd
|
||||
command: "step-ssh activate {{ inventory_hostname }}"
|
||||
# when: smallstep_ssh_installed.changed or smallstep_ssh_force_reinit
|
||||
|
||||
- name: Generate host tags list
|
||||
set_fact:
|
||||
smallstep_ssh_host_tags_string: "{{ smallstep_ssh_host_tags | to_json | regex_replace('\\:\\ ','=') | regex_replace('\\{\\\"|,\\ \\\"', ' --tag \"') | regex_replace('[\\[\\]{}]') }}"
|
||||
|
||||
- name: Generate command to register
|
||||
set_fact:
|
||||
smallstep_ssh_register_string: |
|
||||
step-ssh-ctl register
|
||||
--hostname {{ inventory_hostname }}
|
||||
{% if not smallstep_ssh_host_is_bastion %}--bastion '{{ smallstep_ssh_host_behind_bastion_name|default("") }}'{% endif %}
|
||||
{% if smallstep_ssh_host_is_bastion %}--is-bastion{% endif %}
|
||||
{{ smallstep_ssh_host_tags_string }}
|
||||
|
||||
- debug: var=smallstep_ssh_register_string
|
||||
|
||||
- name: Register host with smallstep
|
||||
command: "{{ smallstep_ssh_register_string }}"
|
||||
# when: smallstep_ssh_installed.changed or smallstep_ssh_force_reinit
|
||||
|
Loading…
Reference in a new issue