如何在 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 调用它。