【问题标题】:AWS invoke cross account lambda via Cloudwatch Event BusAWS 通过 Cloudwatch 事件总线调用跨账户 lambda
【发布时间】:2021-07-03 16:26:20
【问题描述】:

我在多个账户中部署了一个 AWS lambda 函数。我正在寻找一种方法来安排通过 Cloudwatch 事件总线从主帐户触发这些 lambda 函数。这可能吗?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-cloudwatch aws-event-bridge


    【解决方案1】:

    【讨论】:

    • 主帐户 中是否可以安排和放置类似这样的事件,其中传递用户定义的键/值以指示要触发哪个 lambda 函数{ "version": "0", "id": "89d1a02d-5ec7-412e-82f5-13505f849b41", "detail-type": "Scheduled Event", "source": "aws.events", "account": "123456789012", "time": "2016-12-30T18:44:49Z", "region": "us-east-1", "resources": [ "arn:aws:events:us-east-1:123456789012:rule/SampleRule" ], ** "detail": { "lamdaToInvoke": "Pass the labmda function name/arn to be invoked" }** }跨度>
    【解决方案2】:

    根据@amitd 的建议,您需要实现类似的东西(使用 EventBridge ,EventBus)。

    要配置跨账户事件桥通信,需要完成以下操作。我提供了示例事件和过滤器,您可以根据需要替换事件和过滤器。

    对账户 B 执行的步骤:收款人账户

    1. 创建一个名为 event-bus-b 的事件总线。如下所示放置基于资源的策略。
    {
      "Version": "2012-10-17",
      "Statement": [{
        "Sid": "WebStoreCrossAccountPublish",
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws:iam::<account-A>:root"
        },
        "Action": "events:PutEvents",
        "Resource": "arn:aws:events:<your-region>:<Account-B>:event-bus/event-bus-b"
      }]
    }
    
    1. 在账户 B 中创建一个规则,我们称之为 eb-rule-b。在此规则中选择 event-bus-b 作为源事件总线。

    2. 提供以下事件过滤器模式:

    事件模式:

    {
      "detail-type": [
        "uoe"
      ],
      "source": [
        "somesource"
      ]
    }
    

    另外,使用测试事件测试模式。

    测试事件:

      {
      "version": "0",
      "id": "55fghj-89a9-a0b3-1ccb-79c25c7d6cd2",
      "detail-type": "uoe",
      "source": "somesource",
      "account": "<ACCOUNT_ID>",
      "time": "2020-04-24T13:53:21Z",
      "region": "<YOUR_REGION>",
      "resources": [],
      "detail": {
       "userOrg" : "OrgName" 
      }
    }
    
    1. 在下拉列表中选择事件总线 event-bus-b。

    2. 选择目标“Lambda”

    3. 将您创建的事件总线的 ARN 放入账户 B。

    arn:aws:lambda:<your-region>:<AccountB>:function:<AccountBLambda>
    
    1. 同时选中“为此特定资源创建新角色”复选框。这将在账户 A 中创建一个启用 lambda 执行的角色。

    2. 点击创建,创建规则。

    3. 现在点击事件总线 event-bus-a 并点击发送事件按钮。

    4. 发送如下所示的虚拟事件,并验证事件总线与账户 B 中的 lambda 之间的通信是否正常。

    5. 如果您在此管道中遇到问题,请参阅:https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-troubleshooting.html#eb-lam-function-not-invoked

    6. 一旦我们在账户 B 中运行良好(即我们能够通过在事件总线上发送事件来调用 lambda,请按照相同的步骤配置其他账户。

    要在账户 A 上执行的步骤:发件人账户

    1. 在账户 A 中创建一个事件总线 event-bus-a。

    2. 在账户 A 中创建一个规则 eb-rule-a,并包含以下详细信息:

    事件模式:

    {
      "detail-type": [
        "uoe"
      ],
      "source": [
        "somesource"
      ]
    }
    

    另外,使用测试事件测试模式。

    测试事件:

      {
      "version": "0",
      "id": "55fghj-89a9-a0b3-1ccb-79c25c7d6cd2",
      "detail-type": "uoe",
      "source": "somesource",
      "account": "<ACCOUNT_ID>",
      "time": "2020-04-24T13:53:21Z",
      "region": "<YOUR_REGION>",
      "resources": [],
      "detail": {
       "userOrg" : "OrgName" 
      }
    }
    
    1. 在下拉列表中选择事件总线 event-bus-a。

    2. 选择目标“不同账户或区域中的事件总线”

    3. 将您创建的事件总线的 ARN 放入账户 B。

    arn:aws:events:<your-region>:<Account-B>:event-bus/event-bus-b
    
    1. 还要选中复选框“为此特定资源创建新角色”。这将在账户 A 中创建一个角色,使账户 A 中的用户能够在账户 b 事件总线上发布。以下政策是自动创建的,您无需执行任何操作。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "events:PutEvents"
                ],
                "Resource": [
                    arn:aws:events:<your-region>:<Account-B>:event-bus/event-bus-b
                ]
            }
        ]
    }
    
    1. 点击创建,创建规则。

    2. 现在点击事件总线 event-bus-a 并点击发送事件按钮。

    3. 提供详细信息并点击发送。

    示例事件:

      {
      "version": "0",
      "id": "55fghj-89a9-a0b3-1ccb-79c25c7d6cd2",
      "detail-type": "uoe",
      "source": "somesource",
      "account": "<ACCOUNT_ID>",
      "time": "2020-04-24T13:53:21Z",
      "region": "<YOUR_REGION>",
      "resources": [],
      "detail": {
       "userOrg" : "OrgName" 
      }
    }
    
    1. 事件将传播到账户 B 中定义的事件总线。

    2. 对所有其他帐户重复第 4-10 步(即在同一规则中创建多个目标)。

    3. 一旦在账户 A 中配置了单个事件,就会传播到多个账户,您将实现必要的扇形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 2023-02-02
      • 2020-07-27
      • 2017-07-05
      • 1970-01-01
      • 2019-06-30
      相关资源
      最近更新 更多