rubeus/secret-manager-gcp

用于在GCP的Secret Manager中管理敏感密钥和值的辅助工具

dev-master / 0.11.x-dev 2023-06-19 05:10 UTC

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;