Vault/Install

出自Gea-Suan Lin's Wiki
跳至導覽 跳至搜尋

Vault/Install將介紹Vault的安裝與設定。

簡介

這邊提供的方式是希望在AWS上面架設HA架構的Vault服務。

  • 兩台EC2主機執行Vault服務。
  • 前端可以使用ELB或是利用Route 53提供HA界面。
  • 後端部份使用KMS加密(即「Seal」),並且透過KMS在啟動時自動解封(Auto-Unseal)。
  • 儲存部份使用DynamoDB(即「Storage」)。

安裝

如果是在minimal的環境裏面,你會需要先裝一些基本的東西(通常是用root執行這串指令):

apt install -y curl gnupg software-properties-common sudo

然後再安裝Vault:

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -; sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main"; sudo apt update && sudo apt install vault

設定KMS、DynamoDB與IAM

這邊是以AWS環境下設計的模式。

DynamoDB

建立一個表格(這邊叫vault),依照官方的設計:

  • Primary partition key設為Path(string)。
  • Primary sort key設為Key(string)。

量很少時可以考慮使用on-demand模式按照讀寫的量計費,而非以保證讀寫的容量計費。

KMS

使用SYMMETRIC_DEFAULT建立即可。

IAM

建立使用者並且產生對應的AWS key(access_keysecret_key),或是使用EC2的Role來提供權限。

接着掛入對應的Inline Policy Policy-Vault-DynamoDB,需要修改帳戶編號(這邊是123456789012)與DynamoDB的表格名稱部份(這邊是vault):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:ListTagsOfResource",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "dynamodb:DescribeTimeToLive",
                "dynamodb:GetRecords"
            ],
            "Resource": [
                "arn:aws:dynamodb:ap-southeast-1:123456789012:table/vault/stream/*",
                "arn:aws:dynamodb:ap-southeast-1:123456789012:table/vault/index/*",
                "arn:aws:dynamodb:ap-southeast-1:123456789012:table/vault"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeReservedCapacityOfferings",
                "dynamodb:ListTables",
                "dynamodb:DescribeReservedCapacity",
                "dynamodb:DescribeLimits"
            ],
            "Resource": "*"
        }
    ]
}

以及Policy-Vault-KMS,需要修改帳戶編號(這邊是123456789012)與KMS的Key ID部份(UUID格式,這邊是01234567-89ab-cdef-0123-456789abcdef):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:ap-southeast-1:123456789012:key/01234567-89ab-cdef-0123-456789abcdef"
        }
    ]
}

設定vault.hcl

先把原來系統安裝的vault.hcl備份起來:

sudo cp /etc/vault.d/vault.hcl /etc/vault.d/vault.hcl.bak

然後把自己的設定放進去,下面的設定裏需要修改自己的網絡位置(這邊使用10.10.10.10)。

#
api_addr = "http://10.10.10.10:8200"
cluster_addr = "http://10.10.10.10:8201"
log_level = "Info"
ui = true

listener "tcp" {    
  address         = "0.0.0.0:8200"
  cluster_address = "10.10.10.10:8201"
  tls_disable     = "true"
}

seal "awskms" {
  region     = "ap-southeast-1"
  access_key = "x"
  secret_key = "x"
  kms_key_id = "x"
}

storage "dynamodb" {
  ha_enabled = "true"
  region     = "ap-southeast-1"
  table      = "vault"
  access_key = "x"
  secret_key = "x"
}

如果是把機器放在AWS內部的話,可以用EC2 Role的方式,就不需要在設定檔內指定access_keysecret_key,Vault會自己去內部網絡的169.254.169.254裏抓EC2 Role提供的權限。

然後重跑vault:

sudo service vault restart

初始化

第一次執行時需要初始化,在其中一台機器執行:

vault operator init -recovery-shares=1 -recovery-threshold=1 -address=http://127.0.0.1:8200

這邊會產生root token讓使用者操作。

設定ELB

這邊建議用ALB:

  • 使用ACM管理HTTPS所需要的憑證。
  • 使用/v1/sys/health的狀態設定health check,只有active node會傳回200[1]

檢修

vault.hcl內的log_level改為Debug後,可以在/var/log/syslog看到不少資訊。

參考文獻

  1. /sys/health - HTTP API. [2020-07-17] (English). 

相關連結