使用 cdk 从账户 B 中的 lambda 调用账户 A 中的步骤函数

Invoke step function in account A from a lambda in account B using cdk

我在账户 A 中部署了一个 lambda 堆栈,在账户 B 中部署了一个 stepfunction 堆栈部署程序。现在如何使用 python cdk 从 lambda 调用此 stepfunction?具体我需要给他们什么权限?

lambda(账户 A)分配了一个 IAM 角色(RoleA)。 Step 函数(账户 B)分配了一个 IAM 角色(RoleB)。

权限

  1. lambda 的 IAM 角色应该有权承担(账户 B)的角色

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "sts:AssumeRole",
          "Resource": "*"
        }
      ]
    }
    
  2. Step functions IAM 角色(角色 B)应具有允许 Lambda 的 IAM 角色代入它的可信策略。下面的信任策略中123456789012是账户A的账号

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::123456789012:root"
            ]
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

lambda 内部

  1. lambda 应该有代入帐户 B 的角色(角色 B)并获取临时凭证的代码

  2. 使用这些凭据,lambda 应该调用步骤函数。

How to assume an IAM role in a different account from lambda

如果你想在 cdk 部署发生时触发一些东西:

似乎很奇怪 use-case 但我认为这里的解决方案是定义自定义资源。 cdk 和 cloudformation 都支持:

https://docs.aws.amazon.com/cdk/api/latest/docs/custom-resources-readme.html

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html

因为您使用的是自定义资源,所以您需要自己进一步处理创建、更新、删除事件。类似地发送完成响应,我建议您使用 cfnresponsemodule 发送回完成响应,否则 cdk 将永远无法判断您的自定义资源函数何时完成:

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-lambda-function-code-cfnresponsemodule.html