#secrets-manager #key-pair #constant #aws #encryption-key #aws-access #access-key

global-secrets-manager

这是一个用于简化AWS Secrets Manager使用的进程宏。该代码允许您通过创建与Secrets Manager中设置的密钥对结构相同的结构来创建同类型的全局常量。这样,您可以在不编写任何从AWS获取它们的代码的情况下访问存储在Secrets Manager中的秘密值。

3个版本

0.1.3 2023年2月13日
0.1.2 2023年2月13日
0.1.1 2023年2月13日

#816 in 过程宏

AGPL-3.0-or-later

11KB

这是什么?

这是一个用于简化AWS Secrets Manager使用的进程宏。该代码允许您通过创建与Secrets Manager中设置的密钥对结构相同的结构来创建同类型的全局常量。这样,您可以在不编写任何从AWS获取它们的代码的情况下访问存储在Secrets Manager中的秘密值。

优点

  • 可以通过简单地定义一个与Secrets Manager中设置的密钥对结构相同的结构来检索密钥对
  • 密钥对定义为全局常量,因此可以从任何地方使用
  • 使用once_cell::sync::Lazy进行惰性评估

示例代码

use global_secrets_manager::GlobalSecretsManager;

/// Please use the same name as Secrets Manager for the name of the structure
/// Please set the keys of Secrets Manager without any omission or excess
#[derive(GlobalSecretsManager)]
#[derive(Debug, serde::Deserialize)]
pub struct SampleSecrets{ 
	key1: String,
	key2: String,
}
fn main(){
	dbg!(&SampleSecrets.key1); //-> value1
	dbg!(&SampleSecrets.key2); //-> value2
}

准备工作

依赖项

以下依赖项是必需的。

aws-config = "0.54.1"
aws-sdk-secretsmanager = "0.24.0"
once_cell = "1.17.0"
dotenvy = "0.15.6"
serde_json = "1.0.93"
tokio = { version = "1.21.2", features = ["full"] }
global-secrets-manager = "0.1.1"

但是,最好使用它们的最新版本。

AWS Secrets Manager设置

请根据相关页面设置您的秘密。为了解释,让我们假设Secrets Manager的名称为SampleSecrets,秘密值如下设置。

秘密密钥 秘密值
key1 value1
key2 value2

AWS凭证获取

请获取您的凭证信息。如果您使用AWS CLI,可以使用以下命令获取。

cat ~/.aws/credentials

.env设置

在您的存储库中创建一个.env文件,并按如下方式输入您的凭证信息。

AWS_ACCESS_KEY_ID=AAAAA
AWS_SECRET_ACCESS_KEY = BBBBB
AWS_REGION = CCCCC

内部规范说明

对于结构

struct SampleSecrets{
	key1:String,
	key2:String
}

相同的全局常量

pub static SampleSecrets: once_cell::sync::Lazy<SampleSecrets> = once_cell::sync::Lazy::new(||SampleSecrets::get());

只在首次访问时初始化一次。它调用结构的get()方法从AWS Secrets Manager获取秘密值。

许可证

AGPL-3.0-or-later。

由此进程宏生成的代码是AGPL的例外。您可以根据需要选择其许可证。

依赖项

~1.5MB
~36K SLoC