为了账号安全,请及时绑定邮箱和手机立即绑定

如何添加机密管理器 IAM 权限?

如何添加机密管理器 IAM 权限?

ITMISS 2022-09-23 16:34:07
我正在阅读有关Secretager的CDK文档,我不确定我是否误解了,但我认为从他们的例子中可以工作的东西似乎并没有授予我预期的许可。从本质上讲,我有一个包含一些Lambdas的堆栈,我希望它们都能够从秘密管理器中读取两个秘密。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仍然失败了。我是否需要执行我正在阅读的文档中未提及的任何其他操作,以明确将该角色分配给 Lambdas?
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

根据您的实际情况,有两种可能的变体。


1. 导入现有角色


如果已预定义 Lambda 函数(例如,在不同的堆栈中),则可以通过先将现有 Lambda 执行角色导入此 CDK 堆栈来向其添加其他权限。


class CdkStack extends cdk.Stack {

    constructor(scope, id, props) {

        // ...


        // Import the existing role into the stack

        const roleArn = 'arn:aws:iam::123456789012:role/MyExistingLambdaExecutionRole'

        const role = iam.Role.fromRoleArn(this, 'Role', roleArn, {

            mutable: true,

        });


        const dbReadSecret = new secretsmanager.Secret(this, "databaseReader");

        const dbWriteSecret = new secretsmanager.Secret(this, "databaseWriter");


        dbReadSecret.grantRead(role);

        dbWriteSecret.grantRead(role);

    }

}

有关 CDK 模块用法的详细信息,请参阅指向文档的链接。在这里,您可以了解有关 Lambda 执行角色本身的更多信息。aws-iam


2. 定义为堆栈一部分的 Lambda 函数


如果已在此堆栈中的某个位置定义了 lambda 函数,则您只需分别使用 和 通过其引用将权限附加到 Lambda 函数即可。dbReadSecret.grantRead(lambda.role)dbWriteSecret.grantRead(lambda.role)


class CdkStack extends cdk.Stack {

    constructor(scope, id, props) {

        // ...


        // Create the function or retrieve the reference if 

        // it has been defined somewhere else in the stack


        const lambda = ...


        const dbReadSecret = new secretsmanager.Secret(this, "databaseReader");

        const dbWriteSecret = new secretsmanager.Secret(this, "databaseWriter");


        dbReadSecret.grantRead(lambda.role);

        dbWriteSecret.grantRead(lambda.role);

    }

}

请看一下这个问题的答案以供参考。


查看完整回答
反对 回复 2022-09-23
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信