[Day 02] - Vault 的啟動及 Unseal 概念


Starting Vault Server

安裝完畢後,可以啟動 Vault server 來玩了!

使用以下指令,即可啟動 Vault server:

$ vault server -dev
==> Vault server configuration:

             Api Address: http://127.0.0.1:8200
                     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", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
               Log Level: info
                   Mlock: supported: true, enabled: false
           Recovery Mode: false
                 Storage: inmem
                 Version: Vault v1.3.2

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:

    $ export 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: LLuGlaFVgmqnt40ubuseHYvNvJFalLnbO12q4gBkeAA=
Root Token: s.lazjRdaqKjDNUMUTgmwponKe

Development mode should NOT be used in production installations!

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

Warning! 以上為 dev server ,不適合用在生產環境上!

dev mode server 有以下幾個特性:

  1. 資料存在記憶體,只要每次重開,資料就會不見。
  2. 服務會在開在 localhost:8200 上並且沒有進行 https 加密(without TLS)
  3. 自動 unseal,且只有一把 unseal key
    • vault 有兩種狀態:
      • seal: seal 狀態的 vault,沒辦法進行大部份的操作,就連讀取資料也不行。
      • unseal:解封狀態的 vault,才可以進行各項操作唷!
  4. 自動建立路徑為 secret/KV secrets engine。
  5. 自動身份驗證。

為了方便,我們就先啟用 dev mode server 吧!

在啟動完畢後,還要先做幾件事才能連讓 vault client(CLI) 連上 vault server !

  1. 打開 terminal,輸入以下指令:
    $ export VAULT_ADDR='http://127.0.0.1:8200'
    # 如果沒有 VAULT_ADDR 這個環境變數的話,預設為 https://127.0.0.1:8200
    
  2. Unseal Key 記錄下來。
  3. Root Token 記錄下來,並設為環境變數 VAULT_DEV_ROOT_TOKEN_ID
    $ export VAULT_DEV_ROOT_TOKEN_ID="s.lazjRdaqKjDNUMUTgmwponKe"
    

    第二第三點,是避免沒存到,之後要使用的時候忘了,造成不能使用,但其實如果只是做LAB,再重開一次就好了XD。

驗證 vault server 有正常啟動!

執行 vault status 這個指令,如果成功的話,應該會有下面的畫面:

$ vault status

Key             Value
---             -----
Seal Type       shamir
Initialized     true
Sealed          false
Total Shares    1
Threshold       1
Version         1.3.2
Cluster Name    vault-cluster-d871077f
Cluster ID      fb0e5b60-bef0-bff9-295d-146f19af2dc7
HA Enabled      false

接下來就可以跟 vault server 進行互動啦!


Seal and Unseal

在介紹操作之前我們先來了解一下,先前提到的 Seal 以及 Unseal
當 Vault server 開機的時候,一開始會是 sealed(封鎖) 狀態。
server 知道資料存放的地方,也知道怎麼存取,但不知道怎麼解密,所以在 sealed 狀態下的 vault server ,沒辦法進行進一步的操作。

WHY?

Vault 存放資料時會使用 encryption key 針對資料進行加密,而讀取資料的時候,也需要這一把鑰匙,才能進行解密。
encryption key 會跟著要存放的資料一起儲存,但在存放 encryption key 的時候,會使用另一把稱為 master key 的鑰匙去進行加解密。

vault server 啟動時, vault server 是sealed(封鎖)狀態的,為了要讓 vault server 能夠針對資料加解密。
我們需要先提供 master key 給 vault server,讓 vault server 給能針對 encryption key 加解密,才能再針對資料做處理。

那要怎麼提供 master key 呢? vault server 預設使用了 Shamir 演算法master key 拆解成數個 Unseal Key,如下圖。

圖片來源:https://www.vaultproject.io/docs/internals/architecture/

Unseal Key提供給 vault server 後,即可重組成 master key,同時 vault server 也進入 Unseal 狀態,此時就讀取設定檔以及存放的資料。

進入 Unseal 狀態的 vault server,要進一步的進行操作的話,就要提供身份驗證啦!
以上的 Unseal 以及 身份驗證 在 dev mode server 都會自動完成,我們只要專注在操作即可!

下一篇我們就會開始把玩啦!

Reference

#vault







你可能感興趣的文章

Laravel 入門:在 Mac 安裝與啟動 Laravel

Laravel 入門:在 Mac 安裝與啟動 Laravel

【譯】Tokio 內部機制:從頭理解 Rust 非同步 I/O 框架

【譯】Tokio 內部機制:從頭理解 Rust 非同步 I/O 框架

[ 筆記 ] Express 03 - Deployment

[ 筆記 ] Express 03 - Deployment






留言討論