Apresentação e considerações

  • Este projeto tem como objetivo apresentar de forma prática o Vault da HashiCorp
  • A configuração/orquestração do ambiente será realizado através do Ansible, que terá como objetivo preparar 2 containers:
    • 1 MySQL
    • 1 Vault Server
  • Após a configuração teremos um ambiente totalmente disponível para realização dos exemplos que teremos logo abaixo.
  • O ambiente foi configurado na Amazon AWS em um instância t2.micro, porém é possível que você execute em outros players de Cloud ou até mesmo em seu ambiente local.

O que é o Vault HashiCorp?

O Vault nada mais é que uma ferramenta para acessar de forma segura os "secrets". Um secret pode ser qualquer coisa que você deseja controlar o acesso, como chaves, API’s, senhas, certificados e etc.

O Vault fornece uma interface unificada para qualquer secret, proporcionando um controle de acesso totalmente seguro e com um registro de auditoria bem detalhado.

Escrito em Go (linguagem criada pelo Google) e distribuído em um único binário, é possível realizar sua instação com poucos comandos.

Uma vez que que o binário esteja em seu ambiente, basta executar os comandos, possibilitando a configuração de um client/server.

Orquestrando o ambiente

  • Configurando o ambiente (AWS ou OpenStack)

Passo 1 – Clone do projeto

$ git clone https://github.com/vandocouto/Vault-Meetup-Churrops.git

Passo 2 – Acessando o projeto

$ cd Vault-Meetup-Churrops/ansible/vault/

Passo 3 – Configurando o arquivo hosts

  • No arquivo hosts deverá conter o ip da instância (AWS ou OpenStack) – Ubuntu 16.04, e o caminha da chave de acesso (vault.pem)
  • No meu exemplo o ip da instância será 54.172.229.173
[vault]
54.172.229.173

[all:vars]
# EC2
ansible_ssh_user=ubuntu
ansible_ssh_private_key_file=../../keys/vault.pem

# SSL
fqdn=tutoriaisgnulinux.com

Passo 4 – Preparando a instância para “rodar” o playbook

  • Instalado via ansible o pacote python-simplejson.
$ ansible 54.172.229.173 -i hosts -m 'raw apt-get -y install python-simplejson' -b

Passo 5 – Ansible playbook

$ ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i hosts ./tasks/main.yml

Vault na prática

Configurando o ambiente

Passo 6 – Criando a variável de dentro da instância EC2

$ export VAULT_ADDR=https://127.0.0.1:8200

Passo 7 – Criando a variável no ambiene local

$ export VAULT_ADDR=https://54.172.229.173:8200

keys – token – sealed – unseal

  • Durante inicialização (vault init) as chaves de criptografia serão geradas (chaves unseal e o token de root inicial).
  • Esta é a única vez que todos esses dados são conhecidos pelo Vault
  • É necessário que guarde todas essas chaves em um local seguro, distribuindo em ambientes diferentes.
  • Quando o Vault é resselado (“sealed”), reiniciado, ou parado, você deverá fornecer pelo menos 3 chaves para que ele volte ao estado (“desselado”) unseal.

Passo 8 – Inicialização – Vault init

$ vault init -tls-skip-verify
Unseal Key 1: QLBm12RW4diu7AEwzLW6V7WkEHA9/7OktJ2YcqZ3Vz15
Unseal Key 2: tdjpuYHFi+GNSv/CIZ5hC1WppjFKuBt5toeADGYIe9Ex
Unseal Key 3: qz/cKss9B91ueRtBqfkvy5zDsltQB774nr8FNNcyqv6R
Unseal Key 4: blbft5ofQXphq/3mwPm9uwQ705Oc/+qB+eRQdP5Kwamn
Unseal Key 5: KWNKH3BuSxqLodN0YxuPnLEh/3nMOIaFpp/yeNKD+qKD
Initial Root Token: cbbfb448-60ab-22f8-c585-afa4e6aed339

Vault initialized with 5 keys and a key threshold of 3. Please
securely distribute the above keys. When the vault is re-sealed,
restarted, or stopped, you must provide at least 3 of these keys
to unseal it again.

Vault does not store the master key. Without at least 3 keys,
your vault will remain permanently sealed.

Inserindo as chaves

Passo 9 – Chave 1 e Chave 2

 
evandrocouto@desktop:~$ vault unseal -tls-skip-verify QLBm12RW4diu7AEwzLW6V7WkEHA9/7OktJ2YcqZ3Vz15
Sealed: true
Key Shares: 5
Key Threshold: 3
Unseal Progress: 1

Unseal Nonce: 6b2fb500-bb6a-bdc7-2817-f3d5857d2407
evandrocouto@desktop:~$ vault unseal -tls-skip-verify tdjpuYHFi+GNSv/CIZ5hC1WppjFKuBt5toeADGYIe9Ex
Sealed: true
Key Shares: 5
Key Threshold: 3
Unseal Progress: 2
Unseal Nonce: 6b2fb500-bb6a-bdc7-2817-f3d5857d2407

root@ip-10-0-0-111:/home/ubuntu# vault unseal -tls-skip-verify qz/cKss9B91ueRtBqfkvy5zDsltQB774nr8FNNcyqv6R
Sealed: false
Key Shares: 5
Key Threshold: 3
Unseal Progress: 0
Unseal Nonce: 

Passo 11 – Chave 3

$vault unseal -tls-skip-verify
Key (will be hidden): 
Sealed: false
Key Shares: 5
Key Threshold: 3
Unseal Progress: 0
Unseal Nonce: 

Bingo!

evandrocouto@desktop:~$ vault unseal -tls-skip-verify
Vault is already unsealed.
  • O processo unseal é totalmente stateful, possibilitando que através de outro computador com o Vault instalado, possa executar o processo de desbloqueio (unseal),
    isso quanto o Vault estiver direcionado para o mesmo Vault Server.
  • Isso é extremamente importante para o processo de unseal. Somente assim, duas ou mais pessoas poderão liberar o Vault.
  • O Vault pode ser “aberto” de vários computadores e as chaves nunca deverão estarem juntas.
  • Desta forma, um único operador não possuirá chaves suficientes para ser mal-intencionado.

Vault Auth

  • Uma vez que o ambiente esteja unseal, o passo seguinte será o comando vault auth, que terá como função autenticar-se no Vault com o token root.
  • Com o token root, será possível fechar o Vault (Único operador que poderá fazer isso).
  • Isso permite que um único operador bloqueie o Vault em uma emergência sem consultar os demais operadores.
  • Qaundo o Vault é selado (sealed) novamente, ele limpa todo o estado (incluindo a chave de criptografia) da memória.

Passo 12 – vault auth

$ vault auth -tls-skip-verify 
Token (will be hidden): 
Successfully authenticated! You are now logged in.
token: 11fbbd18-3e55-e49d-f949-0148c6bb0c87
token_duration: 0
token_policies: [root]

Primeiro Secret

  • Para criar o primeiro secret, basta utilizar o comando vault write,
    informando o path.

Passo 13 – vault write

$ vault write -tls-skip-verify secret/hello value=world 
Success! Data written to: secret/hello

Lendo um secret

  • O Vault lê os dados do armazenamento e em seguida desencriptografa-os.
  • O formato de saída é propositadamente separado em espaços em branco para facilitar a utilização de ferramentas como cut, awk, grep e etc.
  • Além do formato do Vault, é possível também utilizar ferramentas como o jq (apt-get Install jq), podendo enviar os dados no formato JSON.

Passo 14 – vault read

$ vault read -tls-skip-verify secret/hello 
Key             	Value
---             	-----
refresh_interval	768h0m0s
value           	world

Passo 15 – vault read (json)

vault read -tls-skip-verify -format=json secret/hello
{
	"request_id": "55814798-f9bc-9740-594f-a862d8e76e87",
	"lease_id": "",
	"lease_duration": 2764800,
	"renewable": false,
	"data": {
		"value": "world"
	},
	"warnings": null
}

Passo 16 – vault read (json + jq)

$ vault read -tls-skip-verify -format=json secret/hello | jq -r .data.value
world

Excluindo um secret

  • Para excluir um secret, basta utilizar o comando vault delete.

Passo 17 – vault delete

$ vault delete -tls-skip-verify secret/hello
Success! Deleted 'secret/hello' if it existed.

Backends secret (secret/prefix)

  • Para que seja possível escrever os secrets no Vault é necessário especificar qual o backend que pretende utilizar.
  • Por padrão, o Vault monta um backend chamado de genérico.
  • O backend lê e grava os dados no Storage Backend.
  • O Vault suporte outros tipos de backends, além do genérico, e esse recurso em particular é o que torna o Vault exclusivo.
  • O Vault se comporta como um sistema de arquivos: Os backends são montados em caminhos específicos (backend/prefix).
Alguns backend suportados:
* CockroachDB
* Consul 
* DynamoDB
* Etcd
* Filesystem
* Google Cloud
* In-Memory
* Mysql
* PostrgreSQL
* Cassandra
* S3
* Swift
* Zookeper

Mount Backend

  • Assim como em um sistema de arquivos normal, o Vault pode montar um backend várias vezes em diferentes pontos de montagem.
  • Também é importante saber que com o Vault é possível aplicar politicas de segurança através de caminhos diferentes.

Passo 18 – vault mounts (list)

$ vault mounts -tls-skip-verify
Path        Type       Accessor            Plugin  Default TTL  Max TTL  Force No Cache  Replication Behavior  Description
cubbyhole/  cubbyhole  cubbyhole_3d283166  n/a     n/a          n/a      false           local                 per-token private secret storage
secret/     generic    generic_61fb4a37    n/a     system       system   false           replicated            generic secret storage
sys/        system     system_997f9d46     n/a     n/a          n/a      false           replicated            system endpoints used for control, policy and debugging

Passo 19 – vault mount (create)

$ vault mount -tls-skip-verify generic
Successfully mounted 'generic' at 'generic'!

Passo 20 – vault mount (list)

$ vault mounts -tls-skip-verify
Path        Type       Accessor            Plugin  Default TTL  Max TTL  Force No Cache  Replication Behavior  Description
cubbyhole/  cubbyhole  cubbyhole_3d283166  n/a     n/a          n/a      false           local                 per-token private secret storage
generic/    generic    generic_baf5911b    n/a     system       system   false           replicated            
secret/     generic    generic_61fb4a37    n/a     system       system   false           replicated            generic secret storage
sys/        system     system_997f9d46     n/a     n/a          n/a      false           replicated            system endpoints used for control, policy and debugging

Unmount backend

  • Uma vez que o backend for desmontado, todos os seus secrets serão revogados e seus dados excluídos.

Passo 21 – vault unmount

$ vault unmount -tls-skip-verify generic 
Successfully unmounted 'generic' if it was mounted

Vault Token

  • Você pode criar mais tokens usando o vault token-create
  • Por padrão, o Vault token criará um token filho do seu token atual (pai) que herdará todos as mesmos direitos (políticas).
$ vault token-create -tls-skip-verify
Key            	Value
---            	-----
token          	ee3afb8f-152d-3178-0fdc-c97ea03111f3
token_accessor 	8fa5e81f-71ad-27ca-d104-e69bba49891e
token_duration 	0s
token_renewable	false
token_policies 	[root]
  • Depois que um token é criado, é possível revogá-lo com o token-revoke.
$ vault token-revoke -tls-skip-verify ee3afb8f-152d-3178-0fdc-c97ea03111f3
Success! Token revoked if it existed.

Auth Backends

  • Além dos tokens, é possível também adicionar outros métodos de autenticação.
  • Auth backends permite métodos alternativos de identificação com o Vault.
  • Essas identidades são vinculadas de volta a um conjunto de políticas de acesso, assim como tokens.

Passo 22 – Habilitando o método de autenticação pelo GitHub

$ vault auth-enable -tls-skip-verify github
Successfully enabled 'github' at 'github'!

Passo 23 – Criando o secret/prefix e fixando a organização do GitHub

$ vault write -tls-skip-verify auth/github/config organization=tutoriaisgnulinux
Success! Data written to: auth/github/config

Passo 24 – Por fim, com o comando vault auth, basta informar o token gerado no GitHub para obter acesso no Vault.

$  vault auth -tls-skip-verify -method=github token=1a014ecc8e71d2938abba8d8d8830fd71dd052cd
Successfully authenticated! You are now logged in.
The token below is already saved in the session. You do not
need to "vault auth" again with the token.
token: 17229894-200b-80aa-f8af-e9ec813f7100
token_duration: 2764800
token_policies: [default]

Passo 25 – Para revogar a autenticação

$ vault token-revoke -tls-skip-verify -mode=path auth/github
Success! Token revoked if it existed.

Passo 26 – Desativando o backend

$ vault auth-disable -tls-skip-verify github

Policys

  • As policys do Vault controlam os acessos dos usuários.
  • Para autenticação, o Vault possui várias opções ou backends que podem ser ativados e usados.
  • Para autorização e políticas (policys), o Vault sempre usa o mesmo formato.
  • Todos os backends de autenticação devem mapear as identidades de volta para as políticas principais configuradas com o Vault.
  • Ao inicializar o Vault, sempre existe uma política (policy) especial que não pode ser removida: (root).
  • Está politica (policy) é uma política especial que lhe dará o acesso de super-user em tudo que há no Vault.
  • Uma identidade mapeada para a diretiva root pode fazer qualquer coisa.
  • As políticas do Vault controlam o acesso do usuário.
  • Para autenticação, o Vault possui várias opções ou backends que podem ser ativadas e usadas.
  • Para autorização e políticas, o Vault sempre usa o mesmo formato.
  • Todos os backends de autenticação devem mapear identidades de volta para as políticas principais configuradas com o Vault.
  • Ao inicializar o Vault, sempre existe uma política especial que não pode ser removida: a política raiz.
  • Esta política é uma política especial que lhe dá acesso de superusuário a tudo no Vault.
  • Uma identidade mapeada para a diretiva raiz pode fazer qualquer coisa.
  • As políticas (policys) no Vault são criadas no formato HCL.
  • O HCL é um formato de configuração legível para humanos e também é compatível com o formato JSON.
Exemplo:
ath "secret/*" {
  capabilities = ["create"]
}

path "secret/foo" {
  capabilities = ["read"]
}

path "auth/token/lookup-self" {
  capabilities = ["read"]
}

Passo 27 – vault auth token root

vault auth -tls-skip-verify
Token (will be hidden): 
Successfully authenticated! You are now logged in.
token: ba3534bd-cadc-5520-30f9-c51449ec29c6
token_duration: 0
token_policies: [root]

Passo 28 – Listando as policys

$ vault read -tls-skip-verify sys/policy
Key     	Value
---     	-----
keys    	[default root]
policies	[default root]

Criando policys

Passo 29 – Acesse o diretório policys

$ cd policys/

Passo 30 – Criando a policy meetup

$ vault write -tls-skip-verify sys/policy/meetup rules=@meetup.hcl
Success! Data written to: sys/policy/meetup

Passo 31 – Criando a policy github

$ vault write -tls-skip-verify sys/policy/github rules=@github.hcl
Success! Data written to: sys/policy/github

Passo 32 – Lendo a estrutura da policy
meetup

$ vault read -tls-skip-verify sys/policy/meetup
Key  	Value
---  	-----
name 	meetup
rules	path "secret/meetup" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

github

$ vault read -tls-skip-verify sys/policy/github
Key  	Value
---  	-----
name 	github
rules	path "secret/github/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

Mapeando policys para outros Backends

Passo 33 – Novamente acessando o Vault com o token do GitHub

$ vault auth -tls-skip-verify -method=github token=1a014ecc8e71d2938abba8d8d8830fd71dd052cd
Successfully authenticated! You are now logged in.
The token below is already saved in the session. You do not
need to "vault auth" again with the token.
token: 17229894-200b-80aa-f8af-e9ec813f7100
token_duration: 2764800
token_policies: [default]

Passo 34 – Criando um novo secret no path secret/github “hello” com o valor “world”

$ vault write -tls-skip-verify secret/github/hello value=world
Error writing data to secret/github/hello: Error making API request.

URL: PUT https://127.0.0.1:8200/v1/secret/github/hello
Code: 403. Errors:

* permission denied

ERROR!

Resolvendo o problema

Passo 35 – Mapeando a indentidade (github) para o token do GitHub.

$ vault write -tls-skip-verify auth/github/map/teams/default value=github
Success! Data written to: auth/github/map/teams/default

Passo 36 – Novamente com o token do GitHub.

$ vault auth -tls-skip-verify -method=github token=1a014ecc8e71d2938abba8d8d8830fd71dd052cd
Successfully authenticated! You are now logged in.
The token below is already saved in the session. You do not
need to "vault auth" again with the token.
token: 996b80c8-7bc5-b67f-2aad-80796bdcf821
token_duration: 2764800
token_policies: [default github]

PAsso 37 – Escrevendo no secret/github com o token do GitHub.

$ vault write -tls-skip-verify secret/github/hello value=world
Success! Data written to: secret/github/hello

Bingo!

Brincando com os tokens

Passo 38 – Autenticando com o token root

vault auth -tls-skip-verify
Token (will be hidden): 
Successfully authenticated! You are now logged in.
token: ba3534bd-cadc-5520-30f9-c51449ec29c6
token_duration: 0
token_policies: [root]

Passo 39 – Criando o token para a policy meetup

$ vault token-create -tls-skip-verify -policy=meetup
Key            	Value
---            	-----
token          	45f823ce-fc72-8ca1-f8f0-9c9f4e38078d
token_accessor 	0cd5d109-1976-5791-2882-32fd03c48a36
token_duration 	768h0m0s
token_renewable	true
token_policies 	[default meetup]

Passo 40 – Acessando com o token criado para policy meetup

$ vault auth -tls-skip-verify
Token (will be hidden): 
Successfully authenticated! You are now logged in.
token: 45f823ce-fc72-8ca1-f8f0-9c9f4e38078d
token_duration: 2764641
token_policies: [default meetup]

Passo 41 – Escrevendo no secret/meetup

vault write -tls-skip-verify secret/meetup value=world
Success! Data written to: secret/meetup

Passo 41 – Escrevendo no secret/meetup e criando um novo prefix com o valor world

ERROR!

vault write -tls-skip-verify secret/meetup/teste value=world
Error writing data to secret/meetup/teste: Error making API request.

URL: PUT https://127.0.0.1:8200/v1/secret/meetup/teste
Code: 403. Errors:

* permission denied
  • Não foi possivel pelo fato da policy (meetup.hcl) não permitir que seja criado novos prefix.
path "secret/meetup" {
  capabilities = ["create", "read", "update", "delete", "list"]
}
  • Para resolver, basta alterar o arquivo (meetup.hcl), inserindo o /*.
path "secret/meetup/*" {
  capabilities = ["create", "read", "update", "delete", "list"]
}

Passo 42 – Ajustando novamente a policy

$ vault write -tls-skip-verify sys/policy/meetup rules=@meetup.hcl
Success! Data written to: sys/policy/meetup

Passo 43 – Testando novamente com o token do meetup

$ vault write -tls-skip-verify secret/meetup/teste value=world
Success! Data written to: secret/meetup/teste

Vault e AWS

Backend secret AWS

  • Com o Backend AWS é possível gerir as credenciais de acesso no Amazon AWS dinamicamente bom base nas políticas IAM.
  • As credenciais podem ser geradas facilmente, podendo ser revogadas quando a concessão (lease) do Vault expirar.

Passo 44 – Montando o backend aws.
Obs: Ao contrário do backend genérico, o backend da Aws não é montado por padrão.

$ vault mount -tls-skip-verify aws
Successfully mounted 'aws' at 'aws'!

Passo 45 – Em seguida, será preciso informar as credenciais (AWS) que o Vault usuará para gerenciar o IAM

$ vault write -tls-skip-verify aws/config/root access_key="$AWS_ACCESS_KEY_ID" secret_key="$AWS_SECRET_ACCESS_KEY" region="us-east-1"
Success! Data written to: aws/config/root

Passo 46 – Neste passo será necessário importar o arquivo iam-policy.json

  • Isso é usado para criar dinamicamente um novo par de credenciais IAM quando necessário.
  • A policy será carregada através do arquivo chamado iam-policy.json.
 cat iam-policy.json 
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*"
    }
  ]
}
  • Function: Nome lógico que será mapeado para uma policy, usado para gerenciar as credenciais.
  • Por exemplo: Criando a function “dev” através da policy inline:
$ vault write -tls-skip-verify aws/roles/dev policy=@iam-policy.json
Success! Data written to: aws/roles/dev
Criando dinamicamente um par de credenciais IAM, quando necessário.

Passo 46 – Para gerar um novo conjunto de credenciais IAM, bastar ler executar a function abaixo:

$ vault read -tls-skip-verify aws/creds/dev
Key            	Value
---            	-----
lease_id       	aws/creds/dev/a6ef57b6-1187-1ca1-4f11-6bfafe9fb642
lease_duration 	768h0m0s
lease_renewable	true
access_key     	AKIAJMZFG5PAZ5EPFS7Q
secret_key     	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
security_token 	

Passo 47 – Caso execute novamente, será criado um novo conjunto de credenciais

$ vault read -tls-skip-verify aws/creds/dev
Key            	Value
---            	-----
lease_id       	aws/creds/dev/a6ef57b6-1187-1ca1-4f11-6bfafe9fb642
lease_duration 	768h0m0s
lease_renewable	true
access_key     	AKIAJZ5YRPHFH3QHRRRQ
secret_key     	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
security_token 	

Passo 48 – Neste outro exemplo, será cria uma function “de leitura” usando uma nova policy AWS

$ vault write -tls-skip-verify aws/roles/readonlyec2 arn=arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
Success! Data written to: aws/roles/readonlyec2

Passo 49 – Para gerar o conjunto de chaves IAM, bastar ler executar a function readonlyec2

$ vault read -tls-skip-verify aws/creds/readonlyec2
Key            	Value
---            	-----
lease_id       	aws/creds/readonlyec2/675a475f-3adf-ef3c-3de5-936b8f7d736b
lease_duration 	3m0s
lease_renewable	true
access_key     	AKIAJTTKWCRXB3QE2JLA
secret_key     	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
security_token 	

Passo 50 – Criando um policy para o prefix ec2rdss3vpcfull, carregando a policy do arquivo ec2rdss3vpcfull.json

$ cd policys
$ vault write -tls-skip-verify aws/roles/ec2rdss3vpcfull policy=@ec2rdss3vpcfull.json

Passo 51 – Gerando o access_key e o secret_key

Obs: A policy ec2rdss3vpcfull irá conceder a permissão Full para EC2 e RDS.

$ vault read -tls-skip-verify aws/creds/ec2rdss3vpcfull
Key            	Value
---            	-----
lease_id       	aws/creds/ec2rdss3vpcfull/aefcc6f6-59e9-5be1-cdfa-4b89432a0b73
lease_duration 	3m0s
lease_renewable	true
access_key     	AKIAJ3BCNUC6X2SYYACA
secret_key     	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
security_token 	

Vault SSH

  • O backend secret SSH do Vault fornece autenticação segura e autorização para acesso a máquinas através do protocolo SSH.
  • O backend SSH do Vault ajuda a gerenciar a infra-estrutura da máquina, fornecendo várias maneiras de emitir credenciais para o protocolo SSH.
  • Temos três tipos suportados para o backend SSH, são eles:

Signed Certificates

  • O Vault gerencia novas chaves privadas e públicas.

SSH OTP

  • O Vault emite uma senha SSH de uma única vez (OTP).
  • A principal preocupação com o tipo de backend OTP é a conexão do host remoto com o Vault; se comprometido, um invasor poderia falsificar o servidor do Vault retornando pedido bem-sucedido.

Dynamic Key:

  • O administrador registra uma chave secret com privilégios.
  • Para cada solicitação de credencial autorizada, o Vault cria um novo par de chaves SSH e acrescenta a chave pública recém-gerada ao arquivo authorized_keys para o nome de usuário configurado no host remoto.
  • O Vault usa o script de instalação configurável para conseguir isso.
Veremos os métodos Signed Certificates e Dynamic Key

Passo 52 – Montando o backend SSH

$ vault mount ssh

Passo 53 – Carregando a chave (.pem) default, para o Vault

$ vault write ssh/keys/jenkins key=@jenkins.pem

Método 1 – (Signed Certificates)

Passo 54 – Criando a role chamada jenkins (instância – EC2 / IP:54.197.7.243/32)

$ vault write ssh/roles/jenkins key_type=dynamic key=jenkins admin_user=ubuntu default_user=ubuntu cidr_list=54.197.7.243/32

Passo 55 – Logando através do Vault na instância (jenkins / IP: 54.197.7.243)

$ vault ssh -role jenkins ubuntu@54.197.7.243

Método 2 – (Dynamic Key)

Passo 56 – Gerando uma chave (pem) temporário e salvando no arquivo jenkins-vaul.pem

$ vault write -format=json ssh/creds/dynamic_key_role ip=54.197.7.243 | jq -r .data.key > jenkins-vault.pem

Passo 57 – Ajustando a permissão do arquivo (jenkins-vault.pem)

$ chmod 400 jenkins-vault.pem

Passo 58 – Logando na instância (jenkins / IP: 54.197.7.243), coma a chave (pem) gerada pelo Vault

ssh -i jenkins-vault.pem ubuntu@54.197.7.243

Passo 59 – Verificando os backends montados

$ vault mounts

Passo 60 – Desmontando o backend ssh

$ vault unmount ssh

Lease, Renew, and Revoke

  • Por segurança o Vault guarda por um determinado período as informações em metadados contendo a duração do tempo, renovabilidade e muito mais de um secret.
  • O Vault precisa garantir que os dados serão válidos durante a duração que foi determinado (TTL).
  • Uma vez que aquele arrendamento do secret expirou, o Vault pode revogar automaticamente os dados, e com isso o consumidor não poderá mais ter certeza que aquela informação do secret seja válida.
  • Após revogados, os consumidores dos secrets precisam fazer o check-in no Vault para renovar o contrato de arrendamento (caso permitido).
  • Isso faz com que os logs de auditoria do Vault sejam mais valiosos e também tornando a chave muto mais fácil.
  • Todos os secrets dinâmicos no Vault são obrigados a terem um contrato de arrendamento.
  • Quando uma locação for revogada, o secret imediatamente será invalidado para evitar novas renovações.
  • Exemplo:
    • Com o backend secret da AWS, as chaves de acesso serão excluídas da AWS no momento em que o secret for revogado.Isso tornará as chaves de acesso inválida a partir desse ponto.
  • OBs: Com o Backend (Generic Backend Storage) com os secret arbitrários não será possível trabalhar com o lease.

Passo 61 – Ajustando o lease do backend AWS.

$ vault write -tls-skip-verify aws/config/lease lease=30s lease_max=5m
Success! Data written to: aws/config/lease

Passo 62 – Verificando as alterações

$ vault read -tls-skip-verify aws/creds/dev
Key            	Value
---            	-----
lease_id       	aws/creds/dev/d9dfa5d0-bc22-3677-0063-55ed1ebd1fa0
lease_duration 	30s
lease_renewable	true
access_key     	AKIAJDAKPDF4ONFRF5FQ
secret_key     	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
security_token 	

Revogando backends

Passo 63 – Revogando o backend AWS

$ vault revoke -tls-skip-verify -prefix aws/
Success! Revoked the secret with ID 'aws/', if it existed.

Passo 55 – Revogando o backend GitHub

$  vault revoke -tls-skip-verify -prefix github/
Success! Revoked the secret with ID 'github/', if it existed.

Brincando com os scripts python (Using the HTTP APIs)

  • No diretório scripts, contém dois arquivos (get – post) para testes do Vault via requests.
  • Para executá-los, basta alterar as variáveis de ip, value e payload.

Post

$ cd scripts
$ python post-secret_hello.py

Get

$ cd scripts
$ python get-secret_hello.py

Fonte:
https://www.vaultproject.io