minio/docs/kms
Andreas Auernhammer 5549a44566 rename vault namespace env variable to be more idiomatic (#6905)
This commit renames the env variable for vault namespaces
such that it begins with `MINIO_SSE_`. This is the prefix
for all Minio SSE related env. variables (like KMS).
2018-12-01 05:28:49 -08:00
..
README.md rename vault namespace env variable to be more idiomatic (#6905) 2018-12-01 05:28:49 -08:00

KMS Quickstart Guide Slack

KMS feature allows you to use Vault to generate and manage encryption keys for use by the minio server to encrypt objects. This document explains how to configure Minio with Vault as KMS.

Get started

1. Prerequisites

Install Minio - Minio Quickstart Guide.

2. Configure Vault

Vault as Key Management System requires following to be configured in Vault

  • transit backend configured with a named encryption key-ring
  • AppRole based authentication with read/update policy for transit backend. In particular, read and update policy are required for the Generate Data Key endpoint and Decrypt Data endpoint.

Here is a sample quick start for configuring vault with a transit backend and Approle with correct policy

2.1 Start Vault server in dev mode

In dev mode, Vault server runs in-memory and starts unsealed. Note that running Vault in dev mode is insecure and any data stored in the Vault is lost upon restart.

vault server -dev

2.2 Set up vault transit backend and create an app role

cat > vaultpolicy.hcl <<EOF
path "transit/datakey/plaintext/my-minio-key" { 
  capabilities = [ "read", "update"]
}
path "transit/decrypt/my-minio-key" { 
  capabilities = [ "read", "update"]
}
path "transit/encrypt/my-minio-key" { 
  capabilities = [ "read", "update"]
}

EOF

export VAULT_ADDR='http://127.0.0.1:8200'
vault auth enable approle    # enable approle style auth
vault secrets enable transit  # enable transit secrets engine
vault write -f  transit/keys/my-minio-key  #define a encryption key-ring for the transit path
vault policy write minio-policy ./vaultpolicy.hcl  #define a policy for AppRole to access transit path
vault write auth/approle/role/my-role token_num_uses=0  secret_id_num_uses=0  period=60s # period indicates it is renewable if token is renewed before the period is over
# define an AppRole
vault write auth/approle/role/my-role policies=minio-policy # apply policy to role
vault read auth/approle/role/my-role/role-id  # get Approle ID
vault write -f auth/approle/role/my-role/secret-id

The AppRole ID, AppRole Secret Id, Vault endpoint and Vault key name can now be used to start minio server with Vault as KMS.

Note: If Vault Namespaces are in use, VAULT_NAMESPACE variable needs to be set before setting approle and transit secrets engine.

3. Environment variables

You'll need the Vault endpoint, AppRole ID, AppRole SecretID and encryption key-ring name defined in step 2.2

export MINIO_SSE_VAULT_APPROLE_ID=9b56cc08-8258-45d5-24a3-679876769126
export MINIO_SSE_VAULT_APPROLE_SECRET=4e30c52f-13e4-a6f5-0763-d50e8cb4321f
export MINIO_SSE_VAULT_ENDPOINT=https://vault-endpoint-ip:8200
export MINIO_SSE_VAULT_KEY_NAME=my-minio-key
minio server ~/export

Optionally set MINIO_SSE_VAULT_CAPATH as the path to a directory of PEM-encoded CA cert files to verify the Vault server SSL certificate.

export MINIO_SSE_VAULT_CAPATH=/home/user/custom-pems

Optionally set MINIO_SSE_VAULT_NAMESPACE if AppRole and Transit Secrets engine have been scoped to Vault Namespace

export MINIO_SSE_VAULT_NAMESPACE=ns1

4. Test your setup

To test this setup, start minio server with environment variables set in Step 3, and server is ready to handle SSE-S3 requests.

Explore Further