「Vault/Install」:修訂間差異
(未顯示同一使用者於中間所作的 1 次修訂) | |||
第12行: | 第12行: | ||
== 安裝 == | == 安裝 == | ||
如果是在minimal的環境裡面,你會需要先裝一些基本的東西: | 如果是在minimal的環境裡面,你會需要先裝一些基本的東西(通常是用root執行這串指令): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
第18行: | 第18行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
然後: | 然後再安裝Vault: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> |
於 2022年3月16日 (三) 18:08 的最新修訂
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_key
與secret_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_key
與secret_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
看到不少資訊。
參考文獻
- ↑ /sys/health - HTTP API. [2020-07-17] (English).