【发布时间】:2020-09-27 01:41:20
【问题描述】:
我做了什么:
- 我在这些帐户之间创建了 VPC 对等连接
- 互联网网关也连接到每个 VPC
- 还配置了路由表(以允许来自双方的流量)
案例一:
当这 2 个 VPC 在同一个账户中时,我成功地测试了从另一个 Lambda 函数(在 VPC A 中)调用 Lambda 函数(在 VPC B 中)。
但是,当我在另一个账户(账户 B)中创建类似的 VPC(作为 VPC B)时,我收到以下错误:
"errorMessage": "调用 Invoke 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::Account-A:assumed-role/role-for-vpc-peering-test/lambda1_in_vpc 不是授权执行:lambda:InvokeFunction on resource:arn:aws:lambda:us-east-1:Account-B:function:lambda-vpc
我的足迹:
我在账户 B 中为账户 A 创建了一个跨账户 IAM 角色,具有以下权限:
然后我为账户 A 中使用 Lambda 的角色添加了内联策略:
仅向上述角色添加策略:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::Account B:role/role-for-Account-A"
}
}
所以我的问题是我是否应该做任何其他事情来从账户 A 中的 Lambda 调用账户 B 中的 Lambda?
我认为我在跨账户角色中缺少一些东西 (access denied error)。
lambda-A 码:
导入 json 导入boto3
client = boto3.client('lambda')
def lambda_handler(事件,上下文): inputForInvoker = {'CustomerId': '123', 'Amount': 50 }
response = client.invoke(
FunctionName='arn:aws:lambda:us-east-1:AccountB-id:function:lambda-vpc-peering',
InvocationType='RequestResponse', # Event
Payload=json.dumps(inputForInvoker)
)
responseJson = json.load(response['Payload'])
print('\n')
print(responseJson)
print('\n')
有什么建议吗?
假设账户 b 中的角色是:具有以下策略:1. AWSLambdaBasicExecutionRole 2.信任政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-id-A:role/role-for-vpc-peering-test"
},
"Action": "sts:AssumeRole"
}
]
}.
执行角色 - 附加此内联策略:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::Account-b-id:role/role-for-7691-4701-2358"
}
}
并用下面提到的代码更新了我的 lambda 函数。
但仍然出现同样的错误
现在 lambdas 不在 vpc 中。
【问题讨论】:
-
A 中的 lambda 代码是什么?您必须承担 B 中的角色,例如使用
sts.assume_role(...)boto3 通话。 -
是的,我在账户 b 中创建了跨账户角色,仅用于账户 A
-
我会回答的,因为我不想在评论中粘贴代码。
标签: amazon-web-services aws-lambda