来自 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
我在账户 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