我意识到这是非常新的,但在任何语言中都看不到任何示例,您将如何为用AWS创建的lambda指定一个角色。
我正试图这么做
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的动态生成自定义角色,但是我也没有看到任何关于如何这样做的例子。
有谁对如何做到这一点有洞察力吗?
发布于 2018-10-04 19:29:16
Lambda已经附带了一个执行角色,并且它已经具有基本的执行权限。如果要向其所具有的角色添加其他权限,请执行以下操作:
import * as iam from '@aws-cdk/aws-iam';
lambda.addToRolePolicy(new iam.PolicyStatement()
.addResource('arn:aws:....')
.addAction('s3:GetThing'));或者更好的是,使用一个方便的函数对某些资源使用权限:
bucket.grantRead(lambda.role);发布于 2020-05-15 22:04:10
即使lambda附带一个IAM角色,您也可以为lambda创建一个自定义角色。您只需确保为它分配正确的最低要求的权限。
您可以创建这样一个角色:
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函数:
const lambda = new lambda.Function(this, 'lambda', {
runtime:....,
code:...,
role: customRole,
handler:....,
memorySize:...,
timeout:....,
vpc:...,
environment: {
....
}
});发布于 2019-07-24 13:46:19
@rix0rrr所接受的答案不再有效。似乎CDK得到了一些更新。目前版本是
"@aws-cdk/core": "^1.1.0"更新代码:
import iam = require("@aws-cdk/aws-iam");
const statement = new iam.PolicyStatement();
statement.addActions("lambda:InvokeFunction");
statement.addResources("*");
lambda.addToRolePolicy(statement); https://stackoverflow.com/questions/52636929
复制相似问题