rubeus / secret-manager-gcp
用于在GCP的Secret Manager中管理敏感密钥和值的辅助工具
Requires
- php: >=5.6
- google/cloud-secret-manager: ^1.5
This package is auto-updated.
Last update: 2024-09-19 08:04:50 UTC
README
此存储库指的是在需要保护密码/密钥/令牌和其他敏感信息的项目中插入的依赖项。
如何使用Cipher
Cipher是一个提供'encrypt'和'decrypt'函数的类,其名称显然暗示了它们各自的目的。Cipher函数应用于需要保护并随后恢复其原始格式的值的内容。
第1步
该类要求您安全地存储两个密钥(由于使用openssl_encrypt和openssl_decrypt),以加密和解密字符串。我们建议通过环境变量进行配置。
在您的.env文件中添加以下内容
MASTER_SECRET_KEY=senhaExemplo
MASTER_SECRET_IV=senhaForteExemplo
第2步
在需要使用的地方,使用以下方式导入依赖项
<?php
use Rubeus\SecretManagerGcp\Cipher;
使用示例
为了保护一个字符串
Cipher::encrypt(ENV(MASTER_SECRET_KEY), ENV(MASTER_SECRET_IV), "string_for_token_api_client");
预期输出
string(60) "VExSWWVHTlBGOXpDbC90c2JNTVhEcEV5eXBBSDdrclRLMGFVWUtwY25Ncz0="
为了从受保护的字符串中恢复原始值
Cipher::decrypt(ENV(MASTER_SECRET_KEY), ENV(MASTER_SECRET_IV), "dlE0VUZ4aUVMbDF3dTlOYmdtVG5UUT09");
预期输出
string(27) "string_for_token_api_client"
如何使用Hash
对于那些从创建那一刻起就不再需要以原始形式读取的值,应考虑使用Hash。例如,用户密码用于系统内的认证。
第1步
只需在需要使用的地方导入该类
<?php
use Rubeus\SecretManagerGcp\Hash;
使用示例
例如,要创建密码的hash,只需调用以下函数
$secret = Hash::create("senhaUsuario");
预期输出
string(96) "$argon2i$v=19$m=32768,t=4,p=2$a0xRMEUvZTJPd0lvZ2tSdg$wchL2gWLMmqpSt+W5nLCE8xJ6CLaZ1XrTdMBe/RBJZ0"
每次调用create()函数时,即使输入相同的字符串,hash也会不同
create()函数可以传递一些可选参数,这些参数与创建hash的计算成本有关,例如
$memoryCost = 1<<15;
$timeCost = 4;
$threads = 2;
$secret = Hash::create("senhaUsuario", $memoryCost, $timeCost, $threads);
预期输出
string(96) "$argon2i$v=19$m=32768,t=4,p=2$a0xRMEUvZTJPd0lvZ2tSdg$wchL2gWLMmqpSt+W5nLCE8xJ6CLaZ1XrTdMBe/RBJZ0"
- 提示:请记住,增加计算成本会使函数变慢,减少计算成本会使函数变快。根据您正在工作的应用的成本效益来调整。
为了验证/检查hash
$verify = Hash::verify("senhaUsuario", '$argon2i$v=19$m=262144,t=4,p=2$RDkxWlNjMW1aa0FPQWg1bQ$rVZMukB5qPTo6JSxpnxp/Bd18sdG//1IEuGFktmRkrs');
预期输出
bool(true)
要将结果作为对象处理,可以使用toObject()函数
$secretAsObject = Hash::toObject('$argon2i$v=19$m=262144,t=4,p=2$RDkxWlNjMW1aa0FPQWg1bQ$rVZMukB5qPTo6JSxpnxp/Bd18sdG//1IEuGFktmRkrs');
预期输出
object(stdClass)#1 (7) {
["algorithm"]=> string(7) "argon2i"
["version"]=> string(4) "v=19"
["memory_cost"]=> string(7) "m=32768"
["time_cost"]=> string(3) "t=4"
["parallelism"]=> string(3) "p=2"
["salt"]=> string(22) "RVpFT0UzaExYZkFNZFhhaQ"
["secret"]=> string(43) "P63kY29W3vL0mauPA4g0t+EkTtiiA1j9E3MOe2kdPAQ"
}
要执行相反操作并将前面的示例对象再次转换为字符串,请使用toString()函数
$secret = Hash::toString($secretAsObject);
预期输出
string(96) "$argon2i$v=19$m=32768,t=4,p=2$SGx2MkprY1FvOFFFQW1YTg$be782SmBNjc5q+DYZHfyTRidu/Pq/vGuxjlCtRTzy3w"`
如何配置Secret Manager
第1步
将以下变量添加到您的环境(.env)
GOOGLE_APPLICATION_CREDENTIALS=/home/$USER/.service-accounts/secret-manager-account.json
其中secret-manager-account.json是GCP中的一个服务账户,它至少需要以下权限
secretmanager.secrets.create
secretmanager.secrets.get
secretmanager.versions.access
secretmanager.versions.add
secretmanager.versions.list
建议使用以下角色
秘密管理器管理员
第2步
在需要使用的地方,使用以下方式导入依赖项
<?php
use Rubeus\SecretManagerGcp\SecretManager;