Vault/Install:修订间差异

来自Gea-Suan Lin's Wiki
跳到导航 跳到搜索
此页面具有访问限制。如果您看见此消息,则说明您没有权限访问此页面。
 
(未显示同一用户的19个中间版本)
第7行: 第7行:
* 兩台[[EC2]]主機執行Vault服務。
* 兩台[[EC2]]主機執行Vault服務。
* 前端可以使用[[ELB]]或是利用[[Route 53]]提供HA界面。
* 前端可以使用[[ELB]]或是利用[[Route 53]]提供HA界面。
* 後端部份使用[[KMS]]加密(即「Seal」)。
* 後端部份使用[[KMS]]加密(即「Seal」 ),並且透過KMS在啟動時自動解封(Auto-Unseal )。
* 儲存部份使用[[DynamoDB]](即「Storage」)。
* 儲存部份使用[[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>。
如果 在minimal 環境 你會需要先裝一些基本 東西(通 是用root執行 串指令):


  以Linux版的例子來說
<syntaxhighlight lang="bash">
apt install -y curl gnupg software-properties-common sudo
</syntaxhighlight>
 
  然後再安裝Vault


<syntaxhighlight lang="bash">
<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
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>


第39行: 第43行:
=== IAM ===
=== IAM ===


 建立使用者並且產生對應的AWS key(<code>access_key</code>與<code>secret_key</code>)。
 建立使用者並且產生對應的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>):
 接著掛入對應的Inline Policy <code>Policy-Vault-DynamoDB</code>,需要修改帳戶編號(這邊是<code>123456789012</code>)與DynamoDB的表格名稱部份(這邊是<code>vault</code>):
第103行: 第107行:
    ]
    ]
}
}
</syntaxhighlight>
== 建立系統的使用者 ==
建立<code>vault</code>使用者:
<syntaxhighlight lang="bash">
sudo groupadd -r vault; sudo useradd -g vault -r vault
</syntaxhighlight>
</syntaxhighlight>


== 設定vault.hcl ==
== 設定vault.hcl ==


 先 建立對應的路徑
 先 把原來系統安裝的vault.hcl備份起來


<syntaxhighlight lang="bash">
<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
sudo cp /etc/vault.d/vault.hcl /etc/vault.d/vault.hcl.bak
</syntaxhighlight>
</syntaxhighlight>


Vault 的設定 檔建議的路徑是<code>/etc/vault.d/vault.hcl</code> 這點沒有在官方 文件 提到,但官方的範例常使用這個路徑<ref name="ops-deployment-guide"/>。 需要修改自己的網路位置(這邊使用<code>10.10.10.10</code>)。
然後把自己 的設定 放進去 下面 設定 裡需要修改自己的網路位置(這邊使用<code>10.10.10.10</code>)。


<syntaxhighlight lang="nginx">
<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"
第153行: 第150行:
 如果是把機器放在AWS內部的話,可以用EC2 Role的方式,就不需要在設定檔內指定<code>access_key</code>與<code>secret_key</code>,Vault會自己去內部網路的<code>169.254.169.254</code>裡抓EC2 Role提供的權限。
 如果是把機器放在AWS內部的話,可以用EC2 Role的方式,就不需要在設定檔內指定<code>access_key</code>與<code>secret_key</code>,Vault會自己去內部網路的<code>169.254.169.254</code>裡抓EC2 Role提供的權限。


== 設定systemd相關設定 ==
 然後 重跑vault
 
放到<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">
<syntaxhighlight lang="bash">
sudo systemctl daemon-reload; sudo systemctl enable vault; sudo service vault start
sudo service vault restart
</syntaxhighlight>
</syntaxhighlight>



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_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). 

相关连结