bitcot / aws-secrets-manager
使用缓存保存加密值的AWS Secrets Manager实现
dev-main
2023-03-24 08:34 UTC
Requires
- ext-json: *
- aws/aws-sdk-php: ^3.184
- illuminate/cache: ^8.47
- illuminate/encryption: ^8.47
- illuminate/filesystem: ^8.47
- illuminate/support: ^8.47
- symfony/filesystem: ^5.3
- vlucas/phpdotenv: ^5.3
This package is not auto-updated.
Last update: 2024-09-20 16:41:20 UTC
README
一个从AWS Secrets Manager获取密钥值对的库
此库加密检索到的值并无限期存储在缓存中。使用以下任一方法获取AWS的最新键值对并更新缓存:
- 通过调用
secrets::clearSecrets();
清除缓存 - 通过在秘密使用的地方添加
secrets::isLatest('key');
和secrets::markAsWorking('key');
来在运行时设置从AWS自动更新 - [Laravel特定] 使用Artisan命令
php artisan cache:clear
先决条件
安装
通过Composer轻松安装
$ composer require bitcot/aws-secrets-manager
或手动添加到您的composer.json
文件中。
设置
-
在项目的根目录中的
.env
文件中设置环境变量。更多信息APP_KEY=<base64_string_preferably_32_characters_long> BSM_AWS_PROFILE=<AWS_credentials_profile> BSM_SECRET_NAME=<AWS_secret_name> BSM_AWS_REGION=<AWS_secret_region> BSM_CACHE_KEY=<secrets_manager_cache_key> BSM_MAX_RETRY_COUNT=<failed_secrets_max_retries>
- APP_KEY [必需] 用于加密的base64字符串,最好为32个字符长 更多信息
- 如果这是'未设置'/'空字符串',则此库中的所有方法都将返回失败响应值(在
secrets::get($key)
的情况下为null
)
- 如果这是'未设置'/'空字符串',则此库中的所有方法都将返回失败响应值(在
- BSM_AWS_PROFILE [默认: default] 存储在 ~/.aws/credentials 中的AWS访问密钥ID和秘密访问密钥的配置文件
- BSM_SECRET_NAME [默认: project/env] 存储在AWS中的秘密名称
- BSM_AWS_REGION [默认: us-east-2] 存储秘密的AWS区域
- BSM_CACHE_KEY [默认: bsmAwsSecrets] 存储在缓存中的秘密键
- BSM_MAX_RETRY_COUNT [默认: 10] 在标记键为不活动之前失败的尝试次数。仅当使用自动更新值时适用
- APP_KEY [必需] 用于加密的base64字符串,最好为32个字符长 更多信息
-
包括此命名空间以检索秘密
use Bitcot\AwsSecretsManager\secrets;
用法
使用密钥检索值
secrets::get('key');
返回
- 给定键的值
null
如果秘密是一个空字符串null
如果在AWS中不存在给定键的秘密
检索所有键值对
secrets::getAll();
返回
- 键值对对象
- 如果AWS中不存在键值对,则返回空对象
获取秘密的所有信息
secrets::getInfo();
要获取单个键值对的值,请调用此方法时传递键
secrets::getInfo('key');
返回
包含每个存储在缓存中键的值、重试次数和状态的对象
null
如果在调用方法时传递了键而没有与该键对应的秘密
清除所有秘密从缓存
secrets::clearSecrets();
返回
如果成功清除缓存中的秘密,则返回true
,否则返回false
。
检查缓存中的键值对是否与AWS中的键值对匹配
如果AWS中可用新值,则可以使用此功能设置缓存值的自动更新
secrets::isLatest('key');
此方法默认情况下,如果AWS中的最新值与缓存中的值不匹配,则会清除缓存中存储的所有密钥。要停止此操作,请将第二个参数传递为false
。
secrets::isLatest('key', false);
返回
true
:如果AWS中的值与缓存中的值匹配,否则false
。
- 如果给定的键不存在于AWS中,则返回
true
。
将密钥值对标记为正在工作。
应与isLatest()
结合使用,以实现如果AWS中存在新值,则自动更新缓存中的值。
secrets::markAsWorking('key');
返回
true
:如果键值对已被标记为正在工作,并将重试次数设置为0,否则false
。
获取密钥的状态。
secrets::status();
返回
一个包含总、活动、失败、已失败和未知键数组的对象。
实现类型
如果AWS中有新值,则手动更新缓存中的值。
获取密钥
在文件顶部包含此命名空间
use Bitcot\AwsSecretsManager\secrets;
要检索值
echo secrets::get('key');
从AWS更新值
- 通过调用
secrets::clearSecrets();
清除缓存 - [Laravel特定] 使用Artisan命令
php artisan cache:clear
如果AWS中有新值,则自动更新缓存中的值[近似值]
在文件顶部包含此命名空间
use Bitcot\AwsSecretsManager\secrets;
要检索最新值
function apiCallSimulation($secondTry = false){ echo secrets::get('key'); //call the API if ('API call failed dude to wrong/invalid secret'){ if (!secrets::isLatest('key') && !$secondTry){ return apiCallSimulation(true); } } if ('API call is successful'){ secrets::markAsWorking('key'); } }
清除密钥 - Laravel 示例
创建自定义 artisan 命令,在顶部包含命名空间,并在 handle 方法中使用此代码
public function handle(secrets $secrets) { $success = $secrets->clearSecrets(); if ($success){ $this->info('The command was successful!'); }else { $this->error('Something went wrong!'); } return 0; }