当前位置: 首页 > 知识库问答 >
问题:

如何使用CloudFormation或CDK将另一个AWS帐户的事件总线指定为EventBridge规则的目标?

商骞仕
2023-03-14

如何使用CloudFormation或CDK将另一个AWS帐户的事件总线指定为CloudWatch规则的目标?

下面是一个使用CDK的示例规则,我尝试将CodeDeploy事件发送到另一个帐户:

Rule codedeployCreateDeploymentEventRule = Rule.Builder.create(this, "CodedeployCreateDeploymentEventRule")
                                                   .description("CloudWatch event rule covering CodeDeploy CreateDeployment notifications.")
                                                   .ruleName("MyRule")
                                                   .enabled(true)
                                                   .targets(List.of(...something here...))
                                                   .eventPattern(EventPattern.builder()
                                                                             .source(List.of("aws.codedeploy"))
                                                                             .detail(Map.of("eventName", List.of("CreateDeployment")))
                                                                             .build())
                                                   .build();

如何将另一个帐户的EventBus指定为目标?语法是什么?是ARN还是什么?

共有1个答案

濮宇定
2023-03-14

要在云信息中将CW事件从Acc1中继到Acc2,需要三件事:

AWS::E::EventBusPolicy,允许Acc1提交事件。例如:

  MyEventBusPolicy:
    Type: AWS::Events::EventBusPolicy
    Properties: 
      Action: events:PutEvents
      EventBusName: default
      Principal: 2234322123 # Account1 Id
      StatementId: AcceptEventsFromAcc1

IAM角色,允许Acc1中的CW事件将事件发布到Acc 2。示例:

  MyCWEventsRole:
    Type: AWS::IAM::Role
    Properties: 
      AssumeRolePolicyDocument:                   
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service: [events.amazonaws.com]
            Action: ["sts:AssumeRole"]
      Description: Role for CW event to be able to publish events to acc2
      Policies: 
        - PolicyName: MyEventPolicy
          PolicyDocument: !Sub |
            {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Action": [
                            "events:PutEvents"
                        ],
                        "Resource": [
                            "arn:aws:events:${RegionId}:${AccountId}:event-bus/default"
                         ]
                    }
                ]
            }

其中,AccountId和RegionId是Acc2值,而不是Acc1。

它将从第2步开始使用IAM角色。例如,要依赖CodeCommit事件(我之前设置过,所以我知道它有效):

  MyRule:
    Type: AWS::Events::Rule
    Properties: 
      Description: Monitor master branch of our repo and rely to Acc2
      EventPattern: !Sub |
            {
              "source": [
                "aws.codecommit"
              ],
              "detail-type": [
                "CodeCommit Repository State Change"
              ],
              "resources": [
                "${GitRepoArn}"
              ],
              "detail": {
                "event": [
                  "referenceCreated",
                  "referenceUpdated"
                ],
                "referenceType": [
                  "branch"
                ],
                "referenceName": [
                  "master"
                ]
               }
             }  
      State: ENABLED
      Targets: 
        - Arn: !Sub "arn:aws:events:${RegionId}:${AccountId}:event-bus/default"
          Id: MyEventToAcc2
          RoleArn: !GetAtt MyCWEventsRole.Arn

其中,AccountId和RegionId是Acc2值,而不是Acc1。

 类似资料:
  • 在我的Lambda CDK堆栈中,我想设置一个事件规则,以便每10分钟向我的Lambda发送一个事件。 aws事件规则 这将工作并以lambda为目标部署规则 问题是这只针对没有别名或版本的基本ARN(实际上总是指向$Latest)。AWS控制台中有此选项可用于为目标设置别名或版本(下图),如何在CDK中执行此操作? AWS控制台UI允许别名和版本的目标arn具有别名时配置通过UI

  • 我正在尝试创建一个以Lambda函数为目标的AWS Eventbridge规则。我可以添加规则和目标,但当我尝试通过RoleArn设置lambda权限时,Cloudformation堆栈部署失败,目标arn不支持RoleArn:aws:lambda:us-east-1:1234567890:功能:联系lambda消费新客户。(服务:AmazonCloudWatchEvents;状态代码:400;错

  • 我有3个独立的堆栈(都在同一个帐户和区域) he AuthStack通过lambda post-confirmation trigger lambda函数进行身份验证,并向EventsBusStack发送一个新的用户事件对象 EventBusStack通过后确认lambda接收newUser对象 然而,使用CDK,我似乎无法找到一种方法来定位位于第三个堆栈中的lambda函数,即RewardsSt

  • 我正在制作一个CloudFormation模板,以捕获将CloudWatch事件发送到Kinesis Firehose交付流的流程的组件。(它在AWS中工作,通过控制台手动配置。) 当我定义AWS::E通风口::规则时,有一个目标属性需要有效目标的ARN。问题是资源不支持检索其ARN,只返回其逻辑ID。(Fn::GetAtt可用于获取的ARN,但没有。) 我是不是走错了路,或者这只是云阵还不支持的

  • 我在AWS云服务中设置了一个项目。在那里我使用了EC2实例、AMI、弹性IP、互联网门路、NACL、路由表、安全组、自定义VPC、私有和公共子网、弹性负载平衡、自动伸缩、启动配置、KMS-key、Lambda、RDS Aurora实例、S3桶、简单电子邮件服务、简单队列服务、简单通知服务、云观察日志。现在我的客户要求将所有服务从现有的AWS帐户迁移到新的AWS帐户。

  • 我想创建一个以lambda函数为目标的AWS eventbridge规则。名为“StartInstance”的lambda函数已通过控制台创建。 我创建了一个python脚本,它使用boto3库来创建这个eventbridge规则。我将向该规则传递一个cron表达式,该表达式将在特定日期和时间调用lambda函数。 下面是成功运行的python脚本代码: 如您所见,传递给规则的cron表达式是:,