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

我正在阅读有关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?


ITMISS
浏览 84回答 1
1回答

长风秋雁

根据您的实际情况,有两种可能的变体。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-iam2. 定义为堆栈一部分的 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);    }}请看一下这个问题的答案以供参考。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript