aws-cdk - 将敏感值作为环境变量传递到 aws-cdk 自定义资源中是否安全
问题描述
在通过自定义资源初始化 cdk 堆栈时,我想将初始管理员用户保存到我的 dynamodb 表中,并且不确定安全地为该用户传递值的最佳方法。我的代码dotEnv
现在使用并将值作为环境变量传递:
import * as cdk from "@aws-cdk/core";
import * as lambda from "@aws-cdk/aws-lambda";
import * as dynamodb from "@aws-cdk/aws-dynamodb";
import * as customResource from "@aws-cdk/custom-resources";
require("dotenv").config();
export class CDKBackend extends cdk.Construct {
public readonly handler: lambda.Function;
constructor(scope: cdk.Construct, id: string) {
super(scope, id);
const tableName = "CDKBackendTable";
// not shown here but also:
// creates a dynamodb table for tableName and a seedData lambda with access to it
// also some lambdas for CRUD operations and an apiGateway.RestApi for them
const seedDataProvider = new customResource.Provider(this, "seedDataProvider", {
onEventHandler: seedDataLambda
});
new cdk.CustomResource(this, "SeedDataResource", {
serviceToken: seedDataProvider.serviceToken,
properties: {
tableName,
user: process.env.ADMIN,
password: process.env.ADMINPASSWORD,
salt: process.env.SALT
}
});
}
}
此代码有效,但以这种方式通过 ADMIN、ADMINPASSWORD 和 SALT 是否安全?这种方法与从 AWS Secrets Manager 访问这些值之间的安全差异是什么?我还计划在为所有新用户生成 passwordDigest 值时使用该 SALT 值,而不仅仅是这个管理员用户。
解决方案
这些properties
值将在部署时进行评估。因此,它们将成为 CloudFormation 模板的一部分。CloudFormation 模板可以在 AWS Web 控制台中查看。因此,从安全角度来看,以这种方式传递秘密是有问题的。
解决此问题的一种方法是使用AWS Secrets Manager存储密钥。aws-cdk
与 Secrets Manager 有很好的集成。创建秘密后,您可以通过以下方式导入它:
const mySecretFromName = secretsmanager.Secret.fromSecretNameV2(stack, 'SecretFromName', 'MySecret')
不幸的是,AWS 自定义资源中不支持解析CloudFormation 动态引用。你可以在你的 lambda ( seedDataLambda
) 中自己解决这个秘密。SqlRun存储库提供了一个示例。
请记住授予对自定义资源 lambda ( seedLambda
) 的密钥的访问权限,例如
secret.grantRead(seedDataProvider.executionRole)
推荐阅读
- c - 为什么我的代码在 scanf 上运行良好,但在我使用 fgets 时显示输出差异?
- excel - 如何使用 Apache poi 库将 word、excel 文件嵌入到 ppt 文件中?
- android - 在 kotlin 的警报对话框中禁用积极按钮
- java - 何时以及如何在 flatMap 上执行 1 到 0..n 映射 Stream mapMulti
- r - 按日期集分组 data.table
- r - 将 Bibtex 类对象转换为为每个引用格式化的一系列文本字符串
- swift - 如何快速从父视图控制器访问子视图控制器?
- javascript - 网站所有者或服务器是否可以知道浏览器的详细信息
- excel - Excel 验证电话号码
- hyperledger-fabric - 支付网关与 Hyperledger Fabric 的集成