来自 Step Function 的跨账户 Lambda 调用

Cross Account Lambda calls from Step Function

我在账户 A 中有阶跃函数,在账户 B 中有 lambda。但是在 运行 阶跃函数上,它给出:

An error occurred while executing the state 'lambdaB' (entered at the event id #2). The resource belongs to a different account from the running execution.

有什么方法可以实现这种配置。

AWS Step Functions 无法(直接)调用不同账户中的 AWS Lambda 函数。

解决方法是调用一个 Lambda 函数,该函数在账户 B 中的 IAM 角色上调用 AssumeRole(),然后使用返回的凭证调用账户 B 中的 Lambda 函数。

或者,在账户 B 中使用 API 网关以允许从外部源触发 Lambda 函数。

我们可以在 Step Function 中做这样的事情:

Parameters": {
                "FunctionName": "FUNCTION_ARN",
                "Payload.$": "$"
            },
            "Resource": "arn:aws:states:::lambda:invoke"

在 Lambda 中,我们需要添加权限:

"Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "sid-1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT_A:root"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "FUNCTION_ARN"
    }
  ]
}

我没有足够的声望点数,无法投票。我会说 step 函数可以用不同的方式调用 lambda,就像“AWS_Developer”回答的那样。我们不必使用另一个lambda来调用lambda,只需要在lambda函数权限设置中给step函数执行角色权限即可。

以下设置复制自AWS_Developer:

"Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "sid-1",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ACCOUNT_STEP_FUNCTION:root"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "FUNCTION_ARN"
    }
  ]
}

经过一系列变通办法,我找到了解决方案。

在目标 AWS 账户

  • 打开需要通过step-function调用的Lambda函数,然后打开Configuration > Permissions > Resource-based policy.

  • 然后点击“添加权限”> 选择 AWS 账户

  • 然后在Principal中给源账户Arn如下 arn:aws:iam::111111111111:root

  • 在操作中选择lambda:InvokeFunction

源账户:

打开Step-Function然后在Step函数的角色中添加以下策略。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:ap-south-1:111111111111:function:SampleLambdaForTesting"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:ap-south-1:111111111111:function:SampleLambdaForTesting"
            ]
        }
    ]
}

如果您遇到任何问题,请告诉我。

是的,这是可能的。您需要在尝试调用的目标 lambda 上添加 resource-based-policy。 Principal 应该是您的 source-account 或您的 Step Function 在 source-account 中的角色。 不仅是调用,Step Function 的这个 cross-account 操作还支持一大堆其他 API。 在此处查看官方 AWS 文档:https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html