📅  最后修改于: 2023-12-03 14:56:15.803000             🧑  作者: Mango
Vault 是一个开源的秘密管理工具,它提供了一种安全地存储和访问网站和应用程序的敏感数据的方法。在生产环境中,我们需要对 Vault 进行部署,并使用其 API 访问敏感数据。
在生产环境中部署 Vault,有几种不同的方法可以选择,包括 Docker 部署和二进制部署。这里介绍使用二进制文件和 systemd 启动 Vault 的方法。
首先,我们需要下载 Vault 的二进制文件,并将其放置在服务器上的任何位置。然后,我们需要在服务器上创建一个名为“vault”的用户,并将 Vault 的可执行文件移动到该用户的主目录中。
接下来,我们需要创建一个 systemd 单元文件,以便我们能够使用 systemd 启动 Vault。以下是一个示例 systemd 单元文件:
[Unit]
Description=Vault service
After=network.target
[Service]
User=vault
Group=vault
PIDFile=/var/run/vault.pid
ExecStart=/home/vault/vault server -config=/etc/vault/vault.hcl
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
请注意,ExecStart 行指定要运行的 Vault 可执行文件的位置,以及配置文件的位置。我们还需要将配置文件放置在 /etc/vault/vault.hcl 的位置。
以下是一个示例 Vault 配置文件:
ui = true
disable_mlock = true
storage "mysql" {
connection_url = "mysql://dbuser:dbpass@tcp(127.0.0.1:3306)/vault"
table = "vault"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
这个配置文件告诉 Vault 使用 MySQL 作为其存储后端,并在端口 8200 上监听来自任何 IP 地址的请求。我们也可以通过 ui = true 来启用 Vault Web UI。
现在我们启动 Vault:
$ sudo systemctl start vault
检查 Vault 是否正在运行:
$ sudo systemctl status vault
如果一切正常,Vault 将正在运行,并且您可以通过执行以下命令来停止它:
$ sudo systemctl stop vault
我们已经在服务器上安装并配置了 Vault,现在我们需要在 PHP 中使用其 API 获取和更新敏感数据。
首先,我们需要在 PHP 代码中包含 Vault 的 PHP 客户端库。可以通过 Composer 安装这个库:
$ composer require hashicorp/vault
接下来,我们需要在代码中创建一个 Vault 客户端实例,如下所示:
require_once __DIR__ . '/vendor/autoload.php';
use \GuzzleHttp\Client as GuzzleHttpClient;
use \GuzzleHttp\Exception\RequestException;
use \GuzzleHttp\Psr7\Request as GuzzleHttpRequest;
use \Hashicorp\Vault\Api\Identity;
use \Hashicorp\Vault\Description\Auth;
$client = new GuzzleHttpClient(['base_uri' => 'http://localhost:8200']);
$vault = new Identity($client);
$vault->setToken('my-token');
在上面的代码中,我们创建了一个 GuzzleHttp 客户端实例,用于与 Vault API 进行通信。然后,我们使用此客户端实例创建了一个 Identity 类型的 Vault 实例,并设置了我们的访问令牌。
现在我们可以通过 Vault 实例来获取和更新敏感数据:
try {
// Write a new secret to Vault
$path = 'secret/data/my-secret';
$data = [
'foo' => 'bar',
'baz' => 'biz',
];
$response = $vault->write($path, ['data' => $data]);
// Read the secret from Vault
$response = $vault->read($path);
$secret = $response->getData();
echo $secret['data']['foo']; // bar
echo $secret['data']['baz']; // biz
} catch (RequestException $e) {
echo $e->getMessage();
}
在上面的代码中,我们首先向 Vault 写入一个新的秘密,然后从 Vault 读取该秘密。注意,我们使用 try-catch 块来处理任何可能的请求异常。
Vault 是一个非常有用的工具,用于安全地存储和访问敏感数据。在生产环境中,我们需要对其进行部署,并使用其 API 来获取和更新数据。通过上述步骤,我们可以快速设置和使用 Vault。