Vault秘钥系统

119 阅读2分钟

概念

名词

  • secret【秘钥】:存储在物理设备上由秘钥引擎管理的机密信息
  • auth mehod【认证方式】:访问秘钥所需的认证信息,通过认证才可以访问相应秘钥

    可以把认证方式看作角色或组

  • policy【权限】:定义对各个秘钥的访问权限
  • token【令牌】:访问密钥的身份凭证
  • appRole【带角色的密钥引擎】
    • role【角色】:带策略的用户模板,用于生成用户密钥ID
    • user【用户】:实际操作密钥的人员,可以看作角色的实例

    把角色看作类的话,用户就是对象

erDiagram
Role ||--|{ User : generate
Role ||--|{ Policy : have
User ||--o{ Secret : manage
User ||..|{ Policy : ref

流程图示

graph LR
Account1[阿里云] -->|口令| Auth(认证)
Account2[亚马逊] -->|口令| Auth(认证)
Account3[Github] -->|口令| Auth(认证)
Account5[用户名密码] -->|口令| Auth(认证)
Auth(认证) -->|通过| Engine(秘钥引擎)
Engine(秘钥引擎) -->|权限| List[遍历]
Engine(秘钥引擎) -->|权限| Put[设置]
Engine(秘钥引擎) -->|权限| Get[查询]
List[遍历] --> Secret1[秘钥1]
Put[设置] --> Secret1[秘钥1]
Get[查询] --> Secret1[秘钥1]
List[遍历] --> Secret2[秘钥2]
Get[查询] --> Secret2[秘钥2]

秘钥体系

vault密钥体系可以类比为文件系统(也可以直接保存到本地文件系统),以密钥app/server/configs/db.prod.toml为例

app/server/configs/db.prod.tomlhost: 127.0.0.1
密钥引擎密钥前缀,可以看作密钥组密钥机密信息,数据类型根据引擎类型

host: 127.0.0.1是db.prod.toml中的内容

Cli API操作

  1. 操作策略(需要root_token或派生token)
    • 读取:vault policy read PPPP
    • 新增/修改:vault policy write PPPP - << EOF~EOF
    • 删除:vault policy delete PPPP
  2. 操作角色(需要root_token或派生token)
    • 新增:
    vault write auth/approle/role/RRRR \
        secret_id_ttl=10m \
        token_num_uses=10 \
        token_ttl=20m \
        token_max_ttl=30m \
        secret_id_num_uses=40 \ 
        policies=PPPP
    
    • 删除:vault delete auth/approle/role/RRRR
  3. 操作用户(需要root_token或派生token)
    • 新增
      • 用户名(role-id):vault read auth/approle/role/RRRR/role-id
      • 密码(secret-id):vault write -force auth/approle/role/RRRR/secret-id
    • 删除
  4. 登录:vault write auth/approle/login role_id="{role-id}" secret_id="{secret_id}"
  5. 操作密钥(需要login_token)
    • 读取:vault kv get -mount=secret -format=json {secret} [-field={key}]
    • 列出所有:vault kv list -mount=secret {secret}
    • 新增/修改:vault kv put -mount=secret {secret} {key}="{value}"
    • 删除:vault kv delete -mount=secret {secret} -field={key}

REST API操作

操作密钥

sequenceDiagram
Client->>Vault: 身份信息
Vault->>ThirdParty: 认证
ThirdParty-->>Vault: 通过
Vault-->>Client: token
Client->>Vault: 访问操作密钥

部署

服务器

  1. 初始化-X POST /v1/sys/init,获取根密钥root_token和密封锁unseal_key
  2. 解锁-X POST -d { "key": ${unseal_key} } /v1/sys/unseal
  3. 开启AppRole密钥引擎-X POST -d { "type": "approle" } /v1/sys/auth/approle
  4. 开启SecretKV密钥引擎-X POST -d { "type": "kv-v2" } /v1/sys/mounts/secret
  5. 之后便可以创建策略、角色、用户、密钥