casahugo/secrets

v0.4 2021-10-31 22:52 UTC

This package is auto-updated.

Last update: 2024-09-29 06:08:59 UTC


README

基于 symfony/framework-bundle 的 CLI PHP vault,链接:symfony/framework-bundle

安装

composer require casahugo/secrets

生成加密密钥

为了加密和解密密钥,应用程序需要加密密钥。可以通过以下命令生成一对密钥:

php vendor/bin/secrets --dir=config/secrets generate-keys

这将生成一对非对称加密密钥。每个环境都有自己的密钥集。假设你在开发环境中本地编码,这将创建

config/secrets/dev/dev.encrypt.public.php

用于加密/向保险库添加密钥。可以安全提交。

config/secrets/dev/dev.decrypt.private.php

用于从保险库中解密/读取密钥。开发解密密钥可以提交(假设开发保险库中没有存储高度敏感的密钥),但生产解密密钥绝不能提交。

你可以通过以下命令为生产环境生成一对加密密钥:

APP_ENV=prod php vendor/bin/secrets --dir=config/secrets generate-keys

这将生成 config/secrets/prod/prod.encrypt.public.phpconfig/secrets/prod/prod.decrypt.private.php

🚨 prod.decrypt.private.php 文件非常敏感。您的开发团队甚至持续集成服务都不需要这个密钥。如果解密密钥已经泄露(例如员工离职),您应考虑通过运行:secrets:generate-keys --rotate 生成新的密钥。

创建或更新密钥

假设您想将数据库密码存储为密钥。通过使用 set 命令,您应该将此密钥添加到开发环境和生产保险库中

# the input is hidden as you type for security reasons

# set your default development value (can be overridden locally)
php vendor/bin/secrets --dir=config/secrets set DATABASE_PASSWORD

# set your production value
APP_ENV=prod php vendor/bin/secrets --dir=config/secrets set DATABASE_PASSWORD

列出现有密钥

每个人都可以使用 list 命令列出密钥名称。如果您有解密密钥,还可以通过传递 --reveal 选项揭示密钥的值

php vendor/bin/secrets --dir=config/secrets list --reveal

 ------------------- ------------ -------------
  Name                Value        Local Value
 ------------------- ------------ -------------
  DATABASE_PASSWORD   "my secret"
 ------------------- ------------ -------------

移除密钥

php vendor/bin/secrets --dir=config/secrets secrets:remove DATABASE_PASSWORD

本地密钥:覆盖本地密钥

开发环境中的密钥应包含适合开发的良好默认值。但有时开发人员仍然需要在开发时本地覆盖密钥值。

大多数密钥命令 - 包括 set - 都有一个 --local 选项,该选项将“密钥”存储在 .env.{env}.local 文件中作为标准环境变量。要覆盖本地 DATABASE_PASSWORD 密钥,请运行

APP_ENV=prod php vendor/bin/secrets --dir=config/secrets set DATABASE_PASSWORD --local

如果您输入了 root,您现在可以在 .env.dev.local 文件中看到这个

DATABASE_PASSWORD=root

这将覆盖 DATABASE_PASSWORD 密钥,因为环境变量始终优先于密钥。

列出密钥时也会显示本地变量

php vendor/bin/secrets --dir=config/secrets list --reveal
 ------------------- ------------- -------------
  Name                Value         Local Value
 ------------------- ------------- -------------
  DATABASE_PASSWORD   "dev value"   "root"
 ------------------- ------------- -------------

命令还提供了 decrypt-to-local 命令,该命令解密所有密钥并将其存储在本地保险库中,以及 encrypt-from-local 命令将所有本地密钥加密到保险库中。

密钥轮换

generate-keys 命令提供了一个 --rotate 选项来重新生成加密密钥。应用程序将使用旧密钥解密现有密钥,生成新的加密密钥,并使用新密钥重新加密密钥。为了解密以前的密钥,开发人员必须拥有解密密钥。