查看“Vault/Install”的源代码
←
Vault/Install
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
'''Vault/Install'''將介紹[[Vault]]的安裝與設定。 == 簡介 == 這邊提供的方式是希望在[[AWS]]上面架設HA架構的Vault服務。 * 兩台[[EC2]]主機執行Vault服務。 * 前端可以使用[[ELB]]或是利用[[Route 53]]提供HA界面。 * 後端部份使用[[KMS]]加密(即「Seal」)。 * 儲存部份使用[[DynamoDB]](即「Storage」)。 == 安裝 == Vault是單執行檔,建議安裝的路徑是<code>/usr/local/bin/vault</code>,這點沒有在官方的文件裡提到,但官方的範例常使用這個路徑<ref name="ops-deployment-guide">{{Cite web |url=https://learn.hashicorp.com/vault/day-one/ops-deployment-guide |title=Vault Deployment Guide |accessdate=2020-07-15 |language=en}}</ref>。 以Linux版的例子來說: <syntaxhighlight lang="bash"> cd /tmp; wget -c https://releases.hashicorp.com/vault/1.6.1/vault_1.6.1_linux_amd64.zip; unzip vault_1.6.1_linux_amd64.zip; sudo cp vault /usr/local/bin/vault; sudo chmod 755 /usr/local/bin/vault </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>)。 接著掛入對應的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> == 建立系統的使用者 == 建立<code>vault</code>使用者: <syntaxhighlight lang="bash"> sudo groupadd -r vault; sudo useradd -g vault -r vault </syntaxhighlight> == 設定vault.hcl == 先建立對應的路徑: <syntaxhighlight lang="bash"> sudo mkdir /etc/vault.d; sudo touch /etc/vault.d/vault.hcl; sudo chown vault:vault /etc/vault.d/vault.hcl; sudo chmod 600 /etc/vault.d/vault.hcl </syntaxhighlight> Vault的設定檔建議的路徑是<code>/etc/vault.d/vault.hcl</code>,這點沒有在官方的文件裡提到,但官方的範例常使用這個路徑<ref name="ops-deployment-guide"/>。需要修改自己的網路位置(這邊使用<code>10.10.10.10</code>)。 <syntaxhighlight lang="nginx"> 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" } </syntaxhighlight> 如果是把機器放在AWS內部的話,可以用EC2 Role的方式,就不需要在設定檔內指定<code>access_key</code>與<code>secret_key</code>,Vault會自己去內部網路的<code>169.254.169.254</code>裡抓EC2 Role提供的權限。 == 設定systemd相關設定 == 放到<code>/lib/systemd/system/vault.service</code>: <syntaxhighlight lang="ini"> [Unit] Description="HashiCorp Vault - A tool for managing secrets" Documentation=https://www.vaultproject.io/docs/ Requires=network-online.target After=network-online.target ConditionFileNotEmpty=/etc/vault.d/vault.hcl StartLimitIntervalSec=60 StartLimitBurst=3 [Service] User=vault Group=vault ProtectSystem=full ProtectHome=read-only PrivateTmp=yes PrivateDevices=yes SecureBits=keep-caps AmbientCapabilities=CAP_IPC_LOCK Capabilities=CAP_IPC_LOCK+ep CapabilityBoundingSet=CAP_SYSLOG CAP_IPC_LOCK NoNewPrivileges=yes ExecStart=/usr/local/bin/vault server -config=/etc/vault.d/vault.hcl ExecReload=/bin/kill --signal HUP $MAINPID KillMode=process KillSignal=SIGINT Restart=on-failure RestartSec=5 TimeoutStopSec=30 StartLimitInterval=60 StartLimitIntervalSec=60 StartLimitBurst=3 LimitNOFILE=65536 LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target </syntaxhighlight> 然後設定開機啟動,並且馬上啟動: <syntaxhighlight lang="bash"> sudo systemctl daemon-reload; sudo systemctl enable vault; sudo service vault start </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>看到不少資訊。 == 參考文獻 == {{Reflist|2}} == 相關連結 == * [[Vault]] [[Category:Vault]]
该页面使用的模板:
Template:Cite web
(
查看源代码
)
Template:Column-count
(
查看源代码
)
Template:Reflist
(
查看源代码
)
模块:Citation/CS1
(
查看源代码
)
模块:Citation/CS1/Configuration
(
查看源代码
)
模块:Citation/CS1/Date validation
(
查看源代码
)
模块:Citation/CS1/Whitelist
(
查看源代码
)
返回至
Vault/Install
。
导航菜单
个人工具
登录
名字空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
台灣正體
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息