首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AWS CDK为lambda指定自定义角色

使用AWS CDK为lambda指定自定义角色
EN

Stack Overflow用户
提问于 2018-10-03 23:21:30
回答 6查看 31.2K关注 0票数 22

我意识到这是非常新的,但在任何语言中都看不到任何示例,您将如何为用AWS创建的lambda指定一个角色。

我正试图这么做

代码语言:javascript
复制
const cdk       = require('@aws-cdk/cdk');
const lambda    = require('@aws-cdk/aws-lambda');
const iam       = require('@aws-cdk/aws-iam');

const path      = require('path');

class MyStack extends cdk.Stack {
    constructor (parent, id, props) {
            super(parent, id, props);

            //
            // Create a lambda...
            const fn = new lambda.Function(this, 'MyFunction-cdktest', {
                runtime: lambda.Runtime.NodeJS810,
                handler: 'index.handler',
                code: lambda.Code.directory( path.join( __dirname, 'lambda')),
                role: iam.RoleName('lambda_basic_execution')
            });

    }
}

class MyApp extends cdk.App {
        constructor (argv) {
                super(argv);

                new MyStack(this, 'hello-cdk');
        }
}

console.log(new MyApp(process.argv).run());

为了尝试为函数指定一个现有的IAM角色,但这似乎不是正确的语法。我也可以(甚至更喜欢)在特定于这个lambda的动态生成自定义角色,但是我也没有看到任何关于如何这样做的例子。

有谁对如何做到这一点有洞察力吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-10-04 19:29:16

Lambda已经附带了一个执行角色,并且它已经具有基本的执行权限。如果要向其所具有的角色添加其他权限,请执行以下操作:

代码语言:javascript
复制
import * as iam from '@aws-cdk/aws-iam';

lambda.addToRolePolicy(new iam.PolicyStatement()
   .addResource('arn:aws:....')
   .addAction('s3:GetThing'));

或者更好的是,使用一个方便的函数对某些资源使用权限:

代码语言:javascript
复制
bucket.grantRead(lambda.role);
票数 28
EN

Stack Overflow用户

发布于 2020-05-15 22:04:10

即使lambda附带一个IAM角色,您也可以为lambda创建一个自定义角色。您只需确保为它分配正确的最低要求的权限。

您可以创建这样一个角色:

代码语言:javascript
复制
    const customRole = new Role(this, 'customRole', {
                    roleName: 'customRole',
                    assumedBy: new ServicePrincipal('lambda.amazonaws.com'),
                    managedPolicies: [
                        ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole"),
                        ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaBasicExecutionRole")
                    ]
                })

如果lambda不需要在VPC中,则可以跳过AWSLambdaVPCAccessExecutionRole。

并将此角色分配给lambda函数:

代码语言:javascript
复制
const lambda = new lambda.Function(this, 'lambda', {
                runtime:....,
                code:...,
                role: customRole,
                handler:....,
                memorySize:...,
                timeout:....,
                vpc:...,
                environment: {
                   ....
                }
            });
票数 19
EN

Stack Overflow用户

发布于 2019-07-24 13:46:19

@rix0rrr所接受的答案不再有效。似乎CDK得到了一些更新。目前版本是

代码语言:javascript
复制
"@aws-cdk/core": "^1.1.0"

更新代码:

代码语言:javascript
复制
    import iam = require("@aws-cdk/aws-iam");

    const statement = new iam.PolicyStatement();
    statement.addActions("lambda:InvokeFunction");
    statement.addResources("*");

    lambda.addToRolePolicy(statement); 
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52636929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档