【发布时间】:2020-06-08 01:41:33
【问题描述】:
我正在阅读有关 SecretsManager 的 CDK 文档,但我不确定我是否误解了,但我认为从他们的示例中可行的方法似乎并没有授予我预期的权限。本质上,我有一个包含一些 Lambda 的堆栈,我希望它们都能够从 SecretsManager 中读取两个秘密。
class CdkStack extends cdk.Stack {
/**
*
* @param {cdk.Construct} scope
* @param {string} id
* @param {cdk.StackProps=} props
*/
constructor(scope, id, props) {
super(scope, id, props);
// eslint-disable-next-line no-new
new APIServices(this, "APIServices");
const role = new iam.Role(this, "SecretsManagerRead", {
assumedBy: new iam.AccountRootPrincipal(),
});
const dbReadSecret = new secretsmanager.Secret(this, "databaseReader");
const dbWriteSecret = new secretsmanager.Secret(this, "databaseWriter");
dbReadSecret.grantRead(role);
dbWriteSecret.grantRead(role);
}
}
如果我理解正确,我应该简单地创建这个角色并授予它访问机密的权限吗?然而,当我尝试运行它们时,我的 Lambda 仍然失败。我是否还需要做我正在阅读的文档中未提及的任何其他关于将该角色明确分配给 Lambda 的事情?
【问题讨论】:
-
您是在部署 Lambda 后添加的吗?如果是这样,它可能已经承担并且需要再次承担该角色。此外,此代码正在创建角色,但未将其与 Lambda 关联:(
-
您是否将此角色添加到 Lambda 函数作为其执行角色?
-
我确实在土地已经部署后添加了这个。 @DennisTraub 您将如何将附加角色与 Lamda 相关联?
-
一个 Lambda 函数只能承担一个执行角色。您要么必须将具有上述权限的策略添加到现有角色,要么将附加到现有 Lambda 函数的角色替换为新角色。
-
@DennisTraub 谢谢!你有任何例子的链接吗?或者,如果您通过示例弹出答案并且它有效,那么我可以接受:)
标签: javascript amazon-web-services aws-cdk aws-secrets-manager