Konfiguracja Vault Hashicorp: Wstęp i uruchomienie wersji rozwojowej

Wstęp i uruchomienie

W pracy pojawił się problem współdzielenia kilku haseł pomiędzy programistami i ich aktualizacji. Najciekawszym rozwiązaniem tego problemu jest użycie programu Vault firmy HashiCorp. Do funkcji które zwróciły moją uwagę należą kontrola i logowanie dostępu, zarządzanie uprawnieniami, prosta integracja z LDAP oraz dostępne REST API.

Wszystkie kroki wykonywane są na systemie Windows10 z GitBash, jednak pomijając detale powinny działać na innych sytemach

W celu uruchomienia aplikacji należy pobrać paczkę (https://www.vaultproject.io/downloads.html)  i wypakować plik wykonywalny.

Dla wygody, przeniosłem go do program files:

mkdir C:\Program Files\HashiCorp
mkdir C:\Program Files\HashiCorp\Vault
mv vault.exe "C:\Program Files\HashiCorp"

Plik wykonywalny dodałem do ścieżki systemowej, dodatkowo warto dodać wartość VAULT_ADDR:

Żeby sprawdzić czy wszytko jest dobrze otwieramy nową linię komend i wpisujemy:

$ vault –h

Jeśli wszytko się udało powinniśmy uzyskać podstawowe informacje o składni:

$ vault -h
Usage: vault <command> [args]

Common commands:
    read        Read data and retrieves secrets
    write       Write data, configuration, and secrets
    delete      Delete secrets and configuration
    list        List data or secrets
    login       Authenticate locally
    server      Start a Vault server
    status      Print seal and HA status
    unwrap      Unwrap a wrapped secret

Other commands:
    audit          Interact with audit devices
    auth           Interact with auth methods
    lease          Interact with leases
    operator       Perform operator-specific tasks
    path-help      Retrieve API help for paths
    policy         Interact with policies
    secrets        Interact with secrets engines
    ssh            Initiate an SSH session
    token          Interact with tokens

Uruchomienie

Żeby uruchomić Vault w wersji developerskiej należy wydać polecenie:
Takiej konfiguracji nie należy używać na produkcji

$ vault server -dev -log-level=trace

Po jego wykonaniu powinny pojawić inforamcje o konfiguracji (z ważnych rzeczy root token i adres pod którym znajdziemy REST API) oraz logi

$ vault server -dev -log-level=trace
==> Vault server configuration:

                     Cgo: disabled
         Cluster Address: https://127.0.0.1:8201
              Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", tls: "disabled")
               Log Level: trace
                   Mlock: supported: false, enabled: false
        Redirect Address: <strong>http://127.0.0.1:8200</strong>
                 Storage: inmem
                 Version: Vault v0.9.6
             Version Sha: 7e1fbde40afee241f81ef08700e7987d86fc7242

WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.

You may need to set the following environment variable:

    $ set VAULT_ADDR=http://127.0.0.1:8200

The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.

Unseal Key: xSzRUrmkIB4SeiPSW1sdpMhO2XB4BhKybJwydW6H6Bk=
Root Token: <strong>3d6c5024-21f4-a464-1db6-6cf17fd7f76a</strong>

Development mode should NOT be used in production installations!

==> Vault server started! Log data will stream in below:


================= LOGI ==========================

Zapytania za pomocą REST API możemy wykonywać domyślnie pod adresem http://127.0.0.1:8200. Polecem do tego POSTMANA, jednak na potrzeby artykułu będę używał curla, ponieważ łatwiej jest prezentować komunikację po HTTP. W celu sprawdzenia czy działa silnik działa wykonujemy poniższe zapytanie:

$ curl -s http://127.0.0.1:8200/v1/sys/init

Jeśli wszytko jest dobrze powinniśmy otrzymać:

$ curl -s http://127.0.0.1:8200/v1/sys/init
{"initialized":true}

Root Token możemy znaleźć w informacjach wyświetlonych przez serwer po uruchomieniu (Uruchomienie serwera w konfiguracji deweloperskiej – wynik). Ponieważ będzie on nam potrzebny go do zmiennej:
Przed wykonaniem komendy podmień ciąg <Twój token> na własny root token.

export VAULT_TOKEN="<Twój token>"

W celu utworzenia sekretu wykonujemy nastepujące zapytanie:

curl \
-s \
--header "X-Vault-Token: $VAULT_TOKEN" \
--request POST \
--data '{"naszKlucz": "naszawartosc"}' \
http://127.0.0.1:8200/v1/secret/hello

W celu odczytania możemy użyć nastepującej komendy:

curl \
-s \
--header "X-Vault-Token: $VAULT_TOKEN" \
http://127.0.0.1:8200/v1/secret/hello

Co zwróci nam pary klucz-wartość umieszczone w sekrecie oraz kilka dodatkowych informacji:

$ curl -s --header "X-Vault-Token: $VAULT_TOKEN" http://127.0.0.1:8200/v1/secret/hello
{"request_id":"2cce8a90-ffa5-b257-bcbe-fb72368cf706","lease_id":"","renewable":false,"lease_duration":2764800,"data":{"naszKlucz":"naszawartosc"},"wrap_info":null,"warnings":null,"auth":null}

W tym momencie jesteśmy w stanie współdzielić rózne sekrety, jednak są one praktycznie niezabezpieczone, ponieważ musimy udostępnić token roota który posiada najwyższe uprawnienia w aplikacji. W następnym wpise skonfiguruję autoryzację za pomocą LDAP.

Leave a Reply

Your email address will not be published. Required fields are marked *