1
+ #! /usr/bin/env bash
2
+
3
+ # # Important notice
4
+ # # This shell script configures the Vault server with the following:
5
+ # # - Root CA certificate
6
+ # # - Intermediate CA certificate
7
+ # # - PKI role
8
+ # # - AppRole auth method
9
+ # # - Token auth method
10
+ # # - KV v2 secret engine
11
+ # # - LDAP auth method
12
+ # # - Active Directory secret engine
13
+ # # - Userpass auth method
14
+ # # - TLS Certificate auth method
15
+ # # - Certificates for authentication
16
+ # # - Policies for the certificates
17
+ # # - Provisioner / Admin / Knight tokens
18
+ # # - TOTP secret engine
19
+ # # This script should be used as model for configuring an dev/test environment,
20
+ # # and should NEVER used in production.
21
+ # #
22
+
23
+ # Create standard policies
24
+ vault policy write admin ./policies/admin-policy.hcl
25
+ vault policy write provisioner ./policies/provisioner-policy.hcl
26
+
27
+ # Enable PKI secret engine
28
+ vault secrets enable pki
29
+
30
+ # Configure PKI TTL
31
+ vault secrets tune -max-lease-ttl=" 87600h" pki
32
+
33
+ # Create root CA certificate
34
+ vault write -field=certificate pki/root/generate/internal \
35
+ common_name=" chatopsknight.ibm.com,default.svc.cluster.local" \
36
+ ttl=" 87600h" > CA_cert.crt
37
+
38
+ # Enable Intermediary PKI
39
+ vault secrets enable -path=pki_int pki
40
+
41
+ # Configure Intermediary PKI TTL
42
+ vault secrets tune -max-lease-ttl=" 87600h" pki_int
43
+
44
+ # Create intermediate CSR
45
+ vault write -format=json pki_int/intermediate/generate/internal \
46
+ common_name=" chatopsknight.ibm.com Intermediate Authority" \
47
+ | jq -r ' .data.csr' > pki_intermediate.csr
48
+
49
+ # Sign intermediate Certificate
50
+ vault write -format=json pki/root/sign-intermediate csr=@pki_intermediate.csr \
51
+ format=pem_bundle ttl=" 87600h" \
52
+ | jq -r ' .data.certificate' > intermediate.cert.pem
53
+
54
+ # Set intermediate certificate signed by root CA
55
+ vault write pki_int/intermediate/set-signed
[email protected]
56
+
57
+ # Create a role
58
+ vault write pki_int/roles/chatopsknight \
59
+ allowed_domains=" chatopsknight.kyndryl.net" \
60
+ allow_subdomains=true \
61
+ max_ttl=" 87600h"
62
+
63
+ # Issue new certificate
64
+ vault write pki_int/issue/chatopsknight common_name=" vault.chatopsknight.kyndryl.net" ttl=" 87500h"
65
+
66
+ # Create a policy
67
+ vault policy write knight-vault ./policies/chatops-knight-vault.hcl
68
+
69
+ # Apply policy to role for AppRole auth method
70
+ vault write auth/approle/role/knight secret_id_ttl=" 720h" token_ttl=" 12h" token_max_tll=" 12h" policies=" knight-vault"
71
+
72
+ # Apply policy to role for Token auth method
73
+ vault write auth/token/roles/knight token_explicit_max_ttl=43200 allowed_policies=" knight-vault"
74
+
75
+ # Check role-id
76
+ vault read auth/approle/role/knight/role-id
77
+
78
+ # Create new secret-id
79
+ vault write -f auth/approle/role/knight/secret-id
80
+
81
+ # Check if pair role-id and secret-id are working
82
+ vault write auth/approle/login -field=token role_id=${ROLE_ID} secret_id=${SECRET_ID}
83
+
84
+ # Update issuing and clr points to use https
85
+ vault write pki/config/urls \
86
+ issuing_certificates=" https://127.0.0.1:8200/v1/pki/ca" \
87
+ crl_distribution_points=" https://127.0.0.1:8200/v1/pki/crl"
88
+
89
+ # Enable KV v2 secret engine for the app
90
+ vault secrets enable -path=knight kv-v2
91
+
92
+ # Enable LDAP auth method
93
+ vault auth enable ldap
94
+
95
+ # Enable Active Directory secret engine
96
+ vault secrets enable ad
97
+
98
+ # Download mock OpenLDAP CA certificates chain
99
+ openssl s_client -showcerts -verify 5 -connect ldap.chatopsknight.com:636 < /dev/null | awk ' /BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'
100
+ cat cert? .pem > ldap-server.pem
101
+ rm cert? .pem
102
+
103
+ # Configure LDAP auth method for authentication
104
+ vault write auth/ldap/config \
105
+ url=" ldaps://ldap.chatopsknight.com:636" \
106
+ userattr=" uid" \
107
+ userdn=" ou=Employees,dc=chatopsknight,dc=com" \
108
+ groupdn=" ou=Groups,dc=chatopsknight,dc=com" \
109
+ discoverdn=false \
110
+
111
+ insecure_tls=false \
112
+ starttls=false
113
+
114
+ vault write auth/ldap/groups/provisioners policies=" provisioner"
115
+ vault write auth/ldap/groups/admins policies=" admin"
116
+ vault write auth/ldap/users/jane.doe groups=" admins"
117
+
118
+ # Configure AD secret engine
119
+
120
+ vault write ad/config \
121
+ binddn=' cn=admin,dc=chatopsknight,dc=com' \
122
+ bindpass=' LD@PS3cr3t!' \
123
+ url=ldaps://ldap.chatopsknight.com \
124
+ userdn=' dc=chatopsknight,dc=com' \
125
+
126
+ insecure_tls=false
127
+
128
+ vault write ad/library/sre-team \
129
+
130
+ ttl=10h \
131
+ max_ttl=20h \
132
+ disable_check_in_enforcement=false
133
+
134
+ # Configure Userpass auth method
135
+ vault auth enable userpass
136
+
137
+ vault write auth/userpass/users/nathan.hale password=" r3s1st@anc3" policies=" admin"
138
+
139
+ # Create Provisioner / Admin / Knight tokens
140
+ vault token create -policy=" provisioner"
141
+ vault token create -policy=" admin"
142
+ vault token create -policy=" knight-vault"
143
+
144
+ # Enable TLS Certificate auth method
145
+ vault auth enable cert
146
+
147
+ # Create a PKI role to issue certificates
148
+ vault write pki_int/roles/vault-cert \
149
+ allow_any_name=true \
150
+ max_ttl=720h \
151
+ generate_lease=true
152
+
153
+ # Create a policy for the certificates issued
154
+ vault policy write cert-policy ./policies/cert-policy.hcl
155
+
156
+ # Issue a certificate based on the create role
157
+ vault write -format=json pki_int/issue/vault-cert \
158
+ common_name=vault-cert | tee \
159
+ >( jq -r .data.certificate > vault-cert-certificate.pem) \
160
+ >( jq -r .data.issuing_ca > vault-cert-issuing-ca.pem) \
161
+ >( jq -r .data.private_key > vault-cert-private-key.pem)
162
+
163
+ # Create a cert for authentication
164
+ vault write auth/cert/certs/vault-cert \
165
+ display_name=vault-cert \
166
+ policies=cert \
167
+
168
+
169
+ # Test cert login
170
+ vault login -method=cert -client-cert=vault-cert-certificate.pem \
171
+ -client-key=vault-cert-private-key.pem
172
+
173
+ curl --request POST --cacert /Users/rodanami/github/chatops-knight/hashi-vault/kubernetes/certs/ca.crt --cert /Users/rodanami/github/chatops-knight/hashi-vault/kubernetes/certs/vault.crt --key /Users/rodanami/github/chatops-knight/hashi-vault/kubernetes/certs/vault.key --data @payload.json https://vault.chatopsknight.ibm.com:8200/v1/auth/cert/login
174
+
175
+ # Configure TOTP secret engine
176
+
177
+ vault secrets enable totp
178
+
179
+ # End
0 commit comments