如何在 CDK 中创建允许 Lamda 创建 EventBridge 目标的角色
How to create a role in CDK that will allow a Lamda to create an EventBridge target
在我的 CDK 代码中,我创建了一个 Lambda 函数,我想创建一个 EventBridge 目标。在 Lambda 中创建 EventBridge 目标时,我需要传递一个 RoleArn
。我已尝试创建此角色并将 ARN 传递给 Lambda 函数。
当 Lambda 运行时,出现以下错误:
ValidationException: RoleArn is not supported for target arn:aws:lambda:eu-central-...
我正在这样创建规则:
const actionFunctionRole = new iam.Role(this, `ActionServiceRole`, {
assumedBy: new iam.ServicePrincipal('events.amazonaws.com'),
})
actionFunctionRole.addToPolicy(
new iam.PolicyStatement({
resources: ['*'],
actions: ['events:*', 'lambda:*'],
})
)
在 Lambda 函数中,我像这样使用角色 ARN:
await eventBridge
.putTargets({
Rule: `USER_EVENT_${images.new.userId.S}_${images.new.eventId.S}`,
Targets: [
{
Arn: actionFunctionArn,
Id: `USER_EVENT_TARGET_${images.new.userId.S}_${images.new.eventId.S}`,
Input: '{"a": 123, "b": "YES"}',
RoleArn: actionFunctionRoleArn,
},
],
})
.promise()
我的角色定义有什么问题导致它在 Lambda 中失败?
对于作为目标的 lambda,您不能使用 IAM 角色。相反,你 must specify resource-based policy 用于你的 lambda 函数。
换句话说,您必须设置您的函数的基于资源的策略(不是执行角色,它们是不同的),以允许 EB 调用它。
在我的 CDK 代码中,我创建了一个 Lambda 函数,我想创建一个 EventBridge 目标。在 Lambda 中创建 EventBridge 目标时,我需要传递一个 RoleArn
。我已尝试创建此角色并将 ARN 传递给 Lambda 函数。
当 Lambda 运行时,出现以下错误:
ValidationException: RoleArn is not supported for target arn:aws:lambda:eu-central-...
我正在这样创建规则:
const actionFunctionRole = new iam.Role(this, `ActionServiceRole`, {
assumedBy: new iam.ServicePrincipal('events.amazonaws.com'),
})
actionFunctionRole.addToPolicy(
new iam.PolicyStatement({
resources: ['*'],
actions: ['events:*', 'lambda:*'],
})
)
在 Lambda 函数中,我像这样使用角色 ARN:
await eventBridge
.putTargets({
Rule: `USER_EVENT_${images.new.userId.S}_${images.new.eventId.S}`,
Targets: [
{
Arn: actionFunctionArn,
Id: `USER_EVENT_TARGET_${images.new.userId.S}_${images.new.eventId.S}`,
Input: '{"a": 123, "b": "YES"}',
RoleArn: actionFunctionRoleArn,
},
],
})
.promise()
我的角色定义有什么问题导致它在 Lambda 中失败?
对于作为目标的 lambda,您不能使用 IAM 角色。相反,你 must specify resource-based policy 用于你的 lambda 函数。
换句话说,您必须设置您的函数的基于资源的策略(不是执行角色,它们是不同的),以允许 EB 调用它。