bitcot/aws-secrets-manager

使用缓存保存加密值的AWS Secrets Manager实现

dev-main 2023-03-24 08:34 UTC

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文件中。

设置

  1. 在项目的根目录中的.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] 在标记键为不活动之前失败的尝试次数。仅当使用自动更新值时适用
  2. 包括此命名空间以检索秘密

    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;
}

待续...