【自记】Vault工作原理与使用操作说明

  • Vault做什么?如何工作?

1. Vault 是什么?

Vault 是由 HashiCorp 开发的一款用于 安全管理机密信息 的工具。它可以安全地存储、访问和管理敏感数据,如 API 密钥、密码、证书、加密密钥等。Vault 提供了统一的接口来管理这些机密信息,并确保它们的安全性、可审计性和可扩展性。

2.Vault 的核心功能包括:

机密管理:安全存储和访问敏感数据。

加密解密服务:提供加密和解密功能,无需自己管理密钥。

动态机密:按需生成短期有效的机密信息(如数据库凭证)。

身份验证和授权:支持多种身份验证方式(如 LDAP、GitHub、AWS IAM 等),并基于策略控制访问权限。

审计日志:记录所有操作,便于审计和合规性检查。

3.Vault 在你的系统上通过以下方式工作:

 (1)安装与启动

 Vault 以二进制文件的形式安装在你的系统中。

 启动后,Vault 会读取配置文件(如 `/etc/vault.d/vault.hcl`)来确定其行为。

例如:使用哪种存储后端(如文件系统、Consul、S3 等)。

监听哪个网络接口和端口。

是否启用 TLS 加密通信。

 (2)初始化与解封

 初始化:Vault 首次启动时需要初始化,生成一个根令牌(Root Token)和多个解封密钥(Unseal Keys)。

 解封:Vault 启动后处于“密封”状态,无法访问存储的机密信息。必须使用解封密钥解封 Vault 后才能使用。

 (3)存储机密信息

 Vault 将机密信息加密后存储在配置的存储后端(如本地文件系统、Consul、S3 等)。

 存储的机密信息可以是静态的(如密码、API 密钥)或动态的(如临时数据库凭证)。

 (4)访问控制

 Vault 使用策略来控制用户或应用程序对机密信息的访问权限。

 用户或应用程序需要通过身份验证(如令牌、LDAP、GitHub 等)来获取访问权限。

 (5)动态机密

   Vault 可以按需生成动态机密信息。

例如:为应用程序生成一个临时的数据库用户名和密码。

   动态机密的有效期通常很短,过期后会自动撤销。

 (6)加密解密服务

 Vault 可以作为加密服务,提供加密和解密功能。

 应用程序可以将数据发送给 Vault 进行加密,Vault 使用其管理的密钥对数据进行加密,并返回加密后的结果。

 (7)审计与监控

 Vault 会记录所有操作(如读取、写入、解封等)到审计日志中。

 审计日志可以用于合规性检查和故障排查。

4.Vault 的工作流程示例

假设你需要在应用程序中访问一个数据库密码:

(1)应用程序请求访问:

    应用程序向 Vault 发送请求,要求获取数据库密码。

(2)身份验证:

    Vault 验证应用程序的身份(如通过令牌或 AWS IAM 角色)。

(3)授权检查:

    Vault 检查应用程序是否有权限访问请求的机密信息。

(4)返回机密信息:

    如果授权通过,Vault 从存储后端读取数据库密码,并将其返回给应用程序。

(5)动态机密(可选):

    如果配置了动态机密,Vault 会生成一个临时的数据库用户名和密码,并返回给应用程序。

(6)审计日志:

    Vault 将此次访问记录到审计日志中。

5.Vault 的典型使用场景

(1)管理应用程序的机密信息:

    存储和管理应用程序的 API 密钥、数据库密码等。

(2)动态生成数据库凭证:

为每个应用程序实例生成临时的数据库用户名和密码。

Ps:

Vault 动态生成的数据库凭证是真实有效的,可以成功登录数据库。Vault 会与数据库进行交互,完成以下操作:

创建用户: 在数据库中创建一个新的用户,并授予其必要的权限。

设置密码: 为该用户生成一个随机密码。

返回凭证: 将生成的用户名和密码返回给应用程序。

应用程序可以使用这些凭证连接到数据库并执行操作。在凭证过期后,Vault 会自动撤销该用户的权限,确保安全性。

(3)加密解密服务:

    提供加密和解密功能,保护敏感数据。

(4)多环境机密管理:

    在开发、测试和生产环境中统一管理机密信息。

(5)合规性与审计:

    记录所有机密访问操作,满足合规性要求。

  • Vault使用操作说明

1.初始化 Vault

1.1 启动 Vault 服务

确保 Vault 服务已经启动。如果使用的是开发模式,可以通过以下命令快速启动:

<bash>

vault server -dev

注意:开发模式仅用于测试,数据存储在内存中,重启后数据丢失。

对于生产环境,需要配置文件并启动服务:

<bash>

vault server -config=/path/to/config.hcl

1.2 初始化 Vault

首次启动后,Vault 会处于“密封”状态,需要初始化:

<bash>

vault operator init

初始化时,Vault 会输出:

• Unseal Keys:解封密钥,通常有 5 个,至少需要 3 个才能解封。

• Root Token:初始管理令牌,具有最高权限。

重要:记录这些密钥和令牌,丢失后无法恢复!

2.解封 Vault

2.1 解封 Vault

使用初始化时生成的 Unseal Key 解封 Vault:

<bash>

vault operator unseal <unseal-key>

需要输入足够的 Unseal Key(默认 3 个)才能完全解封。

2.2 验证解封状态

检查 Vault 是否已解封:

<bash>

vault status

如果显示包含`Sealed: false`,则表示 Vault 已成功解封。

3.配置 Vault引擎

解封后,Vault 已经可以运行,但默认情况下,它并没有配置任何存储机密信息的后端(Secret Engine)或认证方式(Auth Method)。因此,需要进行一些基本配置,以便能够存储和管理机密信息。

Secret引擎是Vault中用于存储和管理机密信息的组件。默认情况下,Vault提供了多种Secret引擎,例如kv、database、aws等。你需要根据需求启用相应的Secret引擎。

3.1 启用 Secret 引擎

根据需求启用不同的 Secret 引擎。例如,启用通用的`kv`引擎:

<bash>

vault secrets enable -path=secret kv

secrets enable:启用一个Secret引擎

path=secret:指定Secret引擎的路径。可以根据需要更改路径,例如/myapp/secret

kv:指定启用的 Secret 引擎类型为kv 。

执行后,可以在路径/secret下存储和管理机密信息。

3.2 配置动态 Secret 引擎

例如:配置数据库动态凭证引擎:

<bash>

vault secrets enable database

vault write database/config/mydb \

    plugin_name=mysql-database-plugin \

    connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/" \

    allowed_roles="*" \

    username="db_admin" \

password="db_password"

plugin_name:指定使用的数据库插件。

connection_url:数据库的连接 URL。

allowed_roles:允许的角色。

username 和password:数据库管理员的用户名和密码。

3.3 创建角色

为动态 Secret 创建角色:

<bash>

vault write database/roles/myrole \

    db_name=mydb \

creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT ALL PRIVILEGES ON *.* TO '{{name}}'@'%';"

db_name:数据库配置的名称。

creation_statements:SQL 语句,用于创建用户并授予权限。

5.配置认证方式

认证方式(Auth Method)用于定义如何验证用户或服务的身份。默认情况下,Vault 提供了多种认证方式,例如 userpass、token、ldap等。

5.1启用认证方式

userpass是一种简单的用户名和密码认证方式,适用于测试和小型环境。

<bash>

vault auth enable userpass

auth enable:启用一个认证方式。

userpass:指定启用的认证方式为userpass。

5.2创建用户

在启用userpass认证方式后,你需要创建用户并分配策略。

<bash>

vault write auth/userpass/users/john password="password" policies="default"

auth/userpass/users/john:指定创建的用户名为john。

password:用户的密码。

policies:分配给用户的策略。默认为default,可以根据需求创建自定义策略。

5.3登录

使用创建的用户登录 Vault:

<bash>

vault login -method=userpass username=john password=password

-method=userpass:指定使用userpass认证方式。

username和password:用户的用户名和密码。

登录成功后,Vault 会返回一个访问令牌(Token),可以使用其进行后续操作。

6.管理机密信息

6.1 写入机密

将机密信息存储到 Vault 中:

<bash>

vault kv put secret/myapp/config username="admin" password="password123"

6.2 读取机密

从 Vault 中读取机密信息:

<bash>

vault kv get secret/myapp/config

6.3 列举机密

列出某个路径下的所有机密:

<bash>

vault kv list secret/

7.管理用户和策略

7.1 创建用户

创建用户并分配策略:

<bash>

vault auth enable userpass

vault write auth/userpass/users/john password="password" policies="default"

7.2 创建策略

定义访问策略:

<bash>

vault policy write mypolicy - <<EOF

path "secret/myapp/*" {

    capabilities = ["read", "list"]

}

EOF

·vault policy write:这是 Vault 的命令行工具命令,用于创建或更新一个策略。

·mypolicy:这是策略的名称,你可以根据需要自定义。

·-:表示从标准输入(stdin)读取策略内容。这里使用Heredoc语法提供策略内容。

·<<EOF:表示开始一个Heredoc块,EOF是一个标记,用于定义块的结束。

·path "secret/myapp/*":定义了策略的路径匹配规则。这里表示匹配路径 /secret/myapp/ 下的所有子路径。

·capabilities:定义了允许的操作权限。

·read:允许读取指定路径下的机密信息。

·list:允许列出指定路径下的所有键(key)。

7.3 分配策略

将策略分配给用户:

<bash>

vault write auth/userpass/users/john policies="mypolicy"

为用户john分配策略mypolicy ,以便在使用 HashiCorp Vault 的 userpass 认证方式时,用户john能够根据分配的策略访问特定的资源。

8.使用动态 Secret

动态 Secret 是 Vault 的一个重要功能,它允许你动态生成临时的、具有时间限制的凭证,从而增强安全性。

8.1 生成动态凭证

使用动态 Secret 引擎生成临时凭证:

<bash>

vault read database/creds/myrole

vault read用于读取指定路径下的数据。

database:表示使用的是database引擎。

creds:表示生成凭证的路径。

myrole:这是你之前定义的角色名称,用于指定生成凭证的规则。

这条命令会根据你在myrole角色中定义的规则,动态生成临时的数据库用户名和密码。生成的凭证通常具有时间限制(默认为1小时),过期后自动失效。

8.2 使用动态凭证

使用生成的凭证连接数据库:

<bash>

mysql -u <username> -p<password> -h 127.0.0.1

9.审计与监控

审计功能用于记录所有与 Vault 交互的操作,包括用户登录、机密读取、策略变更等。

9.1 启用审计日志

启用审计日志功能:

<bash>

vault audit enable file file_path="/var/log/vault_audit.log"

vault audit enable:这是 Vault 的命令行工具命令,用于启用审计功能。

file:指定审计日志的存储方式为文件。

file_path="/var/log/vault_audit.log":指定审计日志文件的路径。这里将日志存储在   /var/log/vault_audit.log。

9.2 查看审计日志

审计日志记录了所有操作,可用于审计和排查问题:

<bash>

cat /var/log/vault_audit.log

10.常规操作

10.1 重新密封 Vault

将 Vault 重新密封:

<bash>

vault operator seal

重新密封后,Vault 将无法处理任何请求,所有数据将被加密存储,无法访问。

10.2 撤销令牌

撤销用户的访问令牌:

<bash>

vault token revoke <token>

撤销后,该令牌将失效,无法再用于访问 Vault 的任何资源。通常用于用户注销或撤销权限。

10.3 更新机密

更新存储在 Vault 中的机密信息:

<bash>

vault kv put secret/myapp/config username="newuser" password="newpassword"

将键值对(Key-Value)存储到指定路径。•如果路径/secret/myapp/config已经存在,这条命令会更新现有的键值对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值