Add bare-metal install instructions
Add instructions for a bare-metal install (like on a raspberry pi) for use with transit-keys and break-glass scenarios.
This commit is contained in:
122
README.md
122
README.md
@@ -9,6 +9,115 @@ brew install hashicorp/tap/vault
|
||||
brew install jq
|
||||
```
|
||||
|
||||
## Install (bare metal)
|
||||
|
||||
1. [Download Vault](https://www.vaultproject.io/downloads)
|
||||
|
||||
2. Create a vault user
|
||||
|
||||
```bash
|
||||
useradd --system --home /etc/vault.d --shell /bin/false vault
|
||||
```
|
||||
|
||||
2. Create a config file
|
||||
|
||||
```bash
|
||||
mkdir -p /etc/vault.d
|
||||
touch /etc/vault.d/vault.hcl
|
||||
chmod 640 /etc/vault.d/vault.hcl
|
||||
chown --recursive vault:vault /etc/vault.d
|
||||
```
|
||||
|
||||
3. Add the following
|
||||
|
||||
```hcl
|
||||
storage "file" {
|
||||
path = "/vault/data"
|
||||
}
|
||||
|
||||
listener "tcp" {
|
||||
address = "0.0.0.0:8200"
|
||||
tls_disable = 0
|
||||
tls_cert_file = "/etc/ssl/certs/pi-vault.pem"
|
||||
tls_key_file = "/etc/vault.d/pi-vault.key"
|
||||
}
|
||||
|
||||
ui = true
|
||||
```
|
||||
|
||||
4. Add your CA (if you have one) to /etc/ssl/certs and run `update-ca-certificates`
|
||||
|
||||
5. Create a vault storage location
|
||||
|
||||
```bash
|
||||
mkdir -p /vault/data
|
||||
chown --recursive vault:vault /vault/data/
|
||||
```
|
||||
|
||||
6. Allow vault to use mlock syscall to prevent memory from being swapped
|
||||
|
||||
```bash
|
||||
setcap cap_ipc_lock=+ep /usr/local/bin/vault
|
||||
```
|
||||
|
||||
7. Create a systemd process
|
||||
|
||||
```bash
|
||||
touch /etc/systemd/system/vault.service
|
||||
```
|
||||
|
||||
8. Add the following
|
||||
|
||||
```conf
|
||||
[Unit]
|
||||
Description="HashiCorp Vault - A tool for managing secrets"
|
||||
Documentation=https://www.vaultproject.io/docs/
|
||||
Requires=network-online.target
|
||||
After=network-online.target
|
||||
ConditionFileNotEmpty=/etc/vault.d/vault.hcl
|
||||
StartLimitIntervalSec=60
|
||||
StartLimitBurst=3
|
||||
|
||||
[Service]
|
||||
User=vault
|
||||
Group=vault
|
||||
ProtectSystem=full
|
||||
ProtectHome=read-only
|
||||
PrivateTmp=yes
|
||||
PrivateDevices=yes
|
||||
SecureBits=keep-caps
|
||||
AmbientCapabilities=CAP_IPC_LOCK
|
||||
Capabilities=CAP_IPC_LOCK+ep
|
||||
CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK
|
||||
NoNewPrivileges=yes
|
||||
ExecStart=/usr/local/bin/vault server -config=/etc/vault.d/vault.hcl
|
||||
ExecReload=/bin/kill --signal HUP $MAINPID
|
||||
KillMode=process
|
||||
KillSignal=SIGINT
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
TimeoutStopSec=30
|
||||
StartLimitInterval=60
|
||||
StartLimitIntervalSec=60
|
||||
StartLimitBurst=3
|
||||
LimitNOFILE=65536
|
||||
LimitMEMLOCK=infinity
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
```
|
||||
|
||||
9. Start the service with `systemctl start vault`
|
||||
10. Run `vault operator init` on the server to generate keys
|
||||
11. Unseal the vault
|
||||
12. Add the following backup job to /etc/crontab
|
||||
|
||||
```crontab
|
||||
0 0 * * * root tar czvf /vault/backups/$(date +\%y-\%m-\%d-\%H-\%M)-pivault.tar.gz /vault/data
|
||||
0 0 * * * root find /vault/backups/* -mtime +7 -exec rm {} +
|
||||
```
|
||||
|
||||
## Install (Standalone)
|
||||
|
||||
```bash
|
||||
@@ -582,11 +691,12 @@ Add signing role
|
||||
vault write ssh-client-signer/roles/ducoterra -<<"EOH"
|
||||
{
|
||||
"allow_user_certificates": true,
|
||||
"allowed_users": "*",
|
||||
"allowed_users": "ducoterra",
|
||||
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
||||
"default_extensions": [
|
||||
{ "permit-pty": "" }
|
||||
],
|
||||
"algorithm_signer": "rsa-sha2-512",
|
||||
"key_type": "ca",
|
||||
"default_user": "ducoterra",
|
||||
"ttl": "30m0s"
|
||||
@@ -598,11 +708,12 @@ EOH
|
||||
vault write ssh-client-signer/roles/pi -<<"EOH"
|
||||
{
|
||||
"allow_user_certificates": true,
|
||||
"allowed_users": "*",
|
||||
"allowed_users": "pi",
|
||||
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
||||
"default_extensions": [
|
||||
{ "permit-pty": "" }
|
||||
],
|
||||
"algorithm_signer": "rsa-sha2-512",
|
||||
"key_type": "ca",
|
||||
"default_user": "pi",
|
||||
"ttl": "30m0s"
|
||||
@@ -614,11 +725,12 @@ EOH
|
||||
vault write ssh-client-signer/roles/rancher -<<"EOH"
|
||||
{
|
||||
"allow_user_certificates": true,
|
||||
"allowed_users": "*",
|
||||
"allowed_users": "rancher",
|
||||
"allowed_extensions": "permit-pty,permit-port-forwarding",
|
||||
"default_extensions": [
|
||||
{ "permit-pty": "" }
|
||||
],
|
||||
"algorithm_signer": "rsa-sha2-512",
|
||||
"key_type": "ca",
|
||||
"default_user": "rancher",
|
||||
"ttl": "30m0s"
|
||||
@@ -629,7 +741,7 @@ EOH
|
||||
Sign a key
|
||||
|
||||
```bash
|
||||
export SSHUSER=pi; vault write -field=signed_key ssh-client-signer/sign/$SSHUSER public_key=@$HOME/.ssh/test_rsa.pub > ~/.ssh/test_rsa-cert.pub
|
||||
export SSHUSER=pi; vault write -field=signed_key ssh-client-signer/sign/$SSHUSER public_key=@$HOME/.ssh/id_rsa.pub > ~/.ssh/id_rsa-cert.pub
|
||||
```
|
||||
|
||||
SSH using the signed key
|
||||
@@ -638,7 +750,7 @@ SSH using the signed key
|
||||
# If you saved the signed pub as key_name"-cert.pub" then you don't need to specify the signed-cert.pub part.
|
||||
ssh -i signed-cert.pub -i ~/.ssh/test_rsa client
|
||||
|
||||
# or without the cert (using default client)
|
||||
# without the cert (using default client)
|
||||
ssh -i ~/.ssh/test_rsa client
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user