You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AWS CDK将跨账号自定义Event Bus设为Event Rule目标?

问题解决:AWS CDK跨账号Event Rule关联自定义Event Bus报错

错误原因

你直接把跨账号Event Bus的ARN字符串传给eventTarget.EventBus构造函数是错误的——这个构造函数需要接收的是events.IEventBus类型的CDK对象,而非纯ARN字符串,这会导致CDK无法正确识别资源,从而抛出“无法找到长度未定义的资源”的错误。

修正代码

账号A的CDK代码(创建Event Rule并关联跨账号Event Bus)

先通过ARN创建跨账号Event Bus的CDK引用对象,再将其作为目标添加到Event Rule:

// 从传入的ARN生成跨账号Event Bus的CDK引用
const crossAccountEventBus = events.EventBus.fromEventBusArn(this, 'CrossAccountEventBus', props.anotherAccountEventBusArn);

const eventRule = new events.Rule(this, 'event-rule', {
  ruleName: getResourceName(this, 'event-rule', 'rule-name', props.envName),
  description: 'This rule will be used to capture events',
  eventPattern: {"source": ['source']},
});

// 将跨账号Event Bus设为规则目标
eventRule.addTarget(new eventTarget.EventBus(crossAccountEventBus));

关键补充:账号B的Event Bus权限配置

仅修改账号A的代码还不够,你需要在账号B的CDK栈中给自定义Event Bus添加权限,允许账号A的Event Rule发送事件过来:

// 账号B中的自定义Event Bus(如果已存在,可改用fromEventBusArn引用)
const customEventBus = new events.EventBus(this, 'CustomEventBus', {
  eventBusName: '你的自定义Event Bus名称',
});

// 添加资源策略,允许账号A的Event Rule发送事件
customEventBus.addToResourcePolicy(new iam.PolicyStatement({
  effect: iam.Effect.ALLOW,
  principals: [new iam.ServicePrincipal('events.amazonaws.com')],
  actions: ['events:PutEvents'],
  resources: [customEventBus.eventBusArn],
  conditions: {
    StringEquals: {
      'aws:SourceAccount': '账号A的AWS账号ID',
    },
    ArnLike: {
      'aws:SourceArn': 'arn:aws:events:你的区域:账号A的AWS账号ID:rule/你的规则名称前缀*',
    },
  },
}));

说明

  • events.EventBus.fromEventBusArn方法会创建一个代表已有Event Bus的CDK引用对象,让CDK能正确识别这个跨账号资源。
  • 账号B的权限策略是必须的,否则账号A的Event Rule会因权限不足无法向账号B的Event Bus发送事件。

内容的提问来源于stack exchange,提问作者Jatin Mehrotra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:37:08