概念
名词
- 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.toml | host: 127.0.0.1 |
|---|---|---|---|
| 密钥引擎 | 密钥前缀,可以看作密钥组 | 密钥 | 机密信息,数据类型根据引擎类型 |
host: 127.0.0.1是db.prod.toml中的内容
Cli API操作
- 操作策略(需要root_token或派生token)
- 读取:
vault policy read PPPP - 新增/修改:
vault policy write PPPP - << EOF~EOF - 删除:
vault policy delete PPPP
- 读取:
- 操作角色(需要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
- 操作用户(需要root_token或派生token)
- 新增
- 用户名(role-id):
vault read auth/approle/role/RRRR/role-id - 密码(secret-id):
vault write -force auth/approle/role/RRRR/secret-id
- 用户名(role-id):
- 删除
- 新增
- 登录:
vault write auth/approle/login role_id="{role-id}" secret_id="{secret_id}" - 操作密钥(需要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: 访问操作密钥
部署
服务器
- 初始化
-X POST /v1/sys/init,获取根密钥root_token和密封锁unseal_key - 解锁
-X POST -d { "key": ${unseal_key} } /v1/sys/unseal - 开启AppRole密钥引擎
-X POST -d { "type": "approle" } /v1/sys/auth/approle - 开启SecretKV密钥引擎
-X POST -d { "type": "kv-v2" } /v1/sys/mounts/secret - 之后便可以创建策略、角色、用户、密钥