Vault/Install:修订间差异
(→AWS) |
(→安裝) |
||
(未显示同一用户的58个中间版本) | |||
第1行: | 第1行: | ||
'''Vault''' | '''Vault/Install''' 將介紹[[Vault]]的 安裝與設定 。 | ||
== | == 簡介 == | ||
這邊提供的方式是希望在[[AWS]]上面架設HA架構的Vault服務。 | |||
* 兩台[[EC2]]主機執行Vault服務。 | |||
* 前端 可以 使用[[ELB]]或是利用[[Route 53]]提供HA界面。 | |||
* 後端部份使用[[KMS]]加密(即「Seal」),並且透過KMS在啟動時自動解封(Auto-Unseal)。 | |||
* 儲 存 部份使用[[DynamoDB]](即「Storage」) 。 | |||
== 安裝 == | == 安裝 == | ||
如果 是 在minimal 的 環境 裡 面 , 你會需要先裝一些基本 的 東西(通 常 是用root執行 這 串指令): | |||
<syntaxhighlight lang="bash"> | |||
apt install -y curl gnupg software-properties-common sudo | |||
</syntaxhighlight> | |||
然後再安裝Vault : | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
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 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== 設 | == 設 定KMS、DynamoDB與IAM == | ||
這邊是以[[AWS]]環境下設計的模式。 | |||
=== DynamoDB === | |||
建立一個表格(這邊叫<code>vault</code>),依照官方的設計: | |||
* Primary partition key設為<code>Path</code>(string)。 | |||
* Primary sort key設為<code>Key</code>(string)。 | |||
量很少時可以考慮使用on-demand模式按照讀寫的量計費,而非以保證讀寫的容量計費。 | |||
=== KMS === | |||
使用<code>SYMMETRIC_DEFAULT</code>建立即可 。 | |||
=== | === IAM === | ||
建立使用者並且產生對應的AWS key(<code>access_key</code>與<code>secret_key</code>),或是使用EC2的Role來提供權限。 | |||
接著掛入對應的Inline Policy <code>Policy-Vault-DynamoDB</code>,需要修改帳戶編號(這邊是<code>123456789012</code>)與DynamoDB 的 表格名稱部份(這邊是<code>vault</code>) : | |||
* | <syntaxhighlight lang="json"> | ||
{ | |||
"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": "*" | |||
} | |||
] | |||
} | |||
</syntaxhighlight> | |||
以及<code>Policy-Vault-KMS</code>,需要修改帳戶編號(這邊是<code>123456789012</code>) 與KMS的Key ID部份(UUID格式 , 這邊是<code>01234567-89ab-cdef-0123-456789abcdef</code>) : | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"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" | |||
} | |||
] | |||
} | |||
</syntaxhighlight> | |||
== | == 設定vault.hcl == | ||
先把原來系統安裝的vault.hcl 備份起來: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo cp /etc/vault.d/vault.hcl /etc/vault.d/vault.hcl.bak | |||
</syntaxhighlight> | |||
然後把自己的設定放進去,下面的設定裡需要修改自己的網路位置(這邊使用<code>10.10.10.10</code>)。 | |||
<syntaxhighlight lang="nginx"> | |||
# | |||
api_addr = "http://10.10.10.10:8200" | api_addr = "http://10.10.10.10:8200" | ||
cluster_addr = "http://10.10.10.10:8201" | cluster_addr = "http://10.10.10.10:8201" | ||
log_level = "Info" | log_level = "Info" | ||
ui = true | |||
listener "tcp" { | listener "tcp" { | ||
第61行: | 第147行: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
如果是把機器放在AWS內部的話,可以用EC2 Role的方式,就不需要在設定檔內指定<code>access_key</code>與<code>secret_key</code>,Vault會自己去內部網路的<code>169.254.169.254</code>裡抓EC2 Role提供的權限。 | |||
然後重跑vault: | |||
<syntaxhighlight lang="bash"> | |||
sudo service vault restart | |||
</syntaxhighlight> | |||
== 初始化 == | |||
第一次執行時需要初始化,在其中一台機器執行: | |||
<syntaxhighlight lang="bash"> | |||
vault operator init -recovery-shares=1 -recovery-threshold=1 -address=http://127.0.0.1:8200 | |||
</syntaxhighlight> | |||
這邊會產生root token讓使用者操作。 | |||
== 設定ELB == | |||
這邊建議用ALB: | |||
* 使用ACM管理HTTPS所需要的憑證。 | |||
* 使用<code>/v1/sys/health</code>的狀態設定health check,只有active node會傳回200<ref>{{Cite web |url=https://www.vaultproject.io/api/system/health.html |title=/sys/health - HTTP API |accessdate=2020-07-17 |language=en}}</ref>。 | |||
== 檢修 == | |||
把<code>vault.hcl</code>內的<code>log_level</code>改為<code>Debug</code>後,可以在<code>/var/log/syslog</code>看到不少資訊。 | |||
== 參考文獻 == | == 參考文獻 == | ||
第66行: | 第181行: | ||
{{Reflist|2}} | {{Reflist|2}} | ||
== | == 相關 連結 == | ||
* | * [[Vault]] | ||
[[Category: | [[Category:Vault]] |
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).