Consul

Consul 机密引擎可以根据 Consul ACL 策略动态生成 Consul API 令牌。

配置

大部分机密引擎在工作之前必须要先进行配置。这些步骤通常是由系统管理员或是配置管理工具来完成。

  1. 启用 Consul 机密引擎:
$ vault secrets enable consul
Success! Enabled the consul secrets engine at: consul/

默认情况下,机密引擎会挂载到名字对应的路径上。要在不同路径上启用机密引擎,请使用 -path 参数。

  1. 在 Consul 1.4 之前的版本中,需要从 Consul 获取一个管理令牌,使用 Cosnul 配置文件中的 acl_master_token 或是其他管理令牌:
$ curl \
    --header "X-Consul-Token: my-management-token" \
    --request PUT \
    --data '{"Name": "sample", "Type": "management"}' \
    https://consul.rocks/v1/acl/create

Vault 必须配置一个管理类型的令牌使得它可以创建并吊销 ACL 令牌。上述命令的响应会返回一个新令牌:

{
  "ID": "7652ba4c-0f6e-8e75-5724-5e083d72cfe4"
}

对 Vault 1.4 及以上的版本,可以使用命令行生成具有合适策略的令牌:

CONSUL_HTTP_TOKEN=d54fe46a-1f57-a589-3583-6b78e334b03b consul acl token create -policy-name=global-management
  1. 配置 Vault 连接到 Consul 并进行身份验证:
$ vault write consul/config/access \
    address=127.0.0.1:8500 \
    token=7652ba4c-0f6e-8e75-5724-5e083d72cfe4
Success! Data written to: consul/config/access
  1. 配置将 Vault 中的名称映射到 Consul ACL 策略的角色。根据使用的 Consul 版本,需要设置一个策略文档和一个 token_type,或一组策略。当用户生成凭据时,这些凭据是根据此角色生成的。对于 1.4 以下的 Consul 版本:
$ vault write consul/roles/my-role policy=$(base64 <<< 'key "" { policy = "read" }')
Success! Data written to: consul/roles/my-role

策略需要以 base64 编码。请参照 Consul 策略文档。

对于 Consul 1.4 及以上版本,可以在 Consul 中生成一个策略,然后将策略与 Vault 角色关联起来:

$ vault write consul/roles/my-role policies=readonly
Success! Data written to: consul/roles/my-role

令牌租约期限:如果没有设置 ttl 值(或是在 Consul 1.4 及以下版本中的 lease),那么 Vault 的 Consul 机密引擎创建的令牌默认会有 30 天的 TTL。我们可以通过向命令传递 -ttl=<duration> 参数来修改租约的期限。"duration" 参数是一个以类似 "30s" 或是 "1h" 结尾的字符串。

使用方法

配置了机密引擎后,一个拥有搭配了合适权限的 Vault 令牌的用户或是机器可以生成 Consul 凭据。

通过读取搭配角色名的 /creds 端点来创建一个新的凭据:

$ vault read consul/creds/my-role
Key                Value
---                -----
lease_id           consul/creds/my-role/b2469121-f55f-53c5-89af-a3ba52b1d6d8
lease_duration     768h
lease_renewable    true
token              642783bf-1540-526f-d4de-fe1ac1aed6f0

如果使用的是 Consul 1.4,响应会包括令牌的访问器:

$ vault read consul/creds/my-role
Key                Value
---                -----
lease_id           consul/creds/my-role/7miMPnYaBCaVWDS9clNE0Nv3
lease_duration     768h
lease_renewable    true
accessor           6d5a0348-dffe-e87b-4266-2bec03800abb
token              bc7a42c0-9c59-23b4-8a09-7173c474dc42

令牌的过期轮换:一旦令牌的 TTL 过期,Consul 将不再允许使用该令牌进行操作。这要求我们必须通过外部进程来轮换令牌。目前推荐的方式是相关管理员通过手动执行 vault read consul/creds/my-role 命令来轮换成创建的新令牌。一旦通过 Consul 同步到了新令牌,将新令牌应用到使用 Consul API 的代理或是命令行工具中。

results matching ""

    No results matching ""