Giter VIP home page Giter VIP logo

vault-postgresql's Introduction

Vault-Postgre

O que é o Vault e pra que serve?

Vault é uma ferramenta desenvolvida pela HashiCorp, essa ferramenta tem como objetivo fazer um armazenamento inteligente de “segredos”, podem ser eles, chaves de ssh, dados de acesso a um banco e dados, api tokens e assim por diante.

Saiba mais...

Pré requisitos

minikube com vault e consul instalados em um mesmo namespace.

Configurando integração do vault com o postgreSQL

  • Criando um namespace chamado postgres.

    $ kubectl create namespace postgres
  • Verificando seus pods.

    $ kubectl get pods -n postgres
  • Criando um pod com base no postgre.yml.

    $ kubectl apply -f postgre.yml -n postgres
  • Fazendo login com o usuario root do vault.

    $ kubectl exec -ti vault-0 -n vault -- vault login
  • Dizendo ao vault que a secret será um database.

    $ kubectl exec -ti vault-0 -n vault -- vault secrets enable database
  • Checando pods do vault e postgress.

    $ kubectl get pods -n vault
    $ kubectl get pods -n postgres
  • Acessando o postgres.

    $ kubectl exec -it -n postgres $(kubectl get pods -n postgres --selector "app=postgres" -o jsonpath="{.items[0].metadata.name}") -c postgres -- bash -c 'PGPASSWORD=password psql -U postgres'
  • Pegar o ip do namespace postgres.

    $ kubectl get services -n postgres
  • Declarando url de conexão com o banco. Na url de conexão foi colocado postgres.postgres isso é importante pois não precisamos colocar o ip do namespace postgres, só precisamos dizer o namespace e o service. Nesse caso tanto o namespace quanto o service contem o mesmo nome.

    $ kubectl exec -ti vault-0 -n vault -- vault write database/config/dev     plugin_name=postgresql-database-plugin     allowed_roles="*"     connection_url="postgresql://{{username}}:{{password}}@postgres.postgres:5432/dev?sslmode=disable" username="postgres"     password="password"
  • Declarando uma regra.

    $ kubectl exec -ti vault-0 -n vault -- vault write database/roles/dev     db_name=dev     creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
        GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";"     revocation_statements="ALTER ROLE \"{{name}}\" NOLOGIN;"    default_ttl="1h"     max_ttl="24h"
  • Delegando ao vault o gerenciamento da senha e do nome de usuário.

    $ kubectl exec -ti vault-0 -n vault -- vault write --force /database/rotate-root/dev
  • Tentando acessar o banco do postgre. Aqui o vault irá bloquear o acesso, pois é necessário solicitar um usuário e senha para ele.

    $ kubectl exec -it -n postgres $(kubectl get pods -n postgres --selector "app=postgres" -o jsonpath="{.items[0].metadata.name}") -c postgres -- bash -c 'PGPASSWORD=password psql -U postgres'
  • Com o comando abaixo o vault irá criar um username e password criptografados. Esse acesso irá atender as regras especificadas.

    $ kubectl exec -ti vault-0 -n vault -- vault read database/creds/dev
  • Entrando com o password e username dados pelo vault.

    $ kubectl exec -it -n postgres $(kubectl get pods -n postgres --selector "app=postgres" -o jsonpath="{.items[0].metadata.name}") -c postgres -- bash -c 'PGPASSWORD=A1a-3af2yrGLTL3bRoeC psql -U v-root-dev-bhedY39fUUzZHPtmy2Sy-1609169341 dev'

vault-postgresql's People

Contributors

rafaelcmonteiro avatar

Watchers

 avatar

Forkers

ldolenc98

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.