与AWS SNS进行AWS Lambda跨帐户集成时出错



我想从SNS(帐户A(向Lambda(帐户B(发送通知。遵循了本教程,但仍出现以下错误:https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html

错误代码:AccessDeniedException-错误消息:用户:arn:aws:sts::AccountA:假定的角色/AdministratorAccessRole/A2345未被授权对资源执行:lambda:AddPermission:arn:aws:lambda:us-east-1:AccountB:函数:TestLambda

以下是我所做的:1.在账户A中,在SNS的访问策略中添加了以下策略:

{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "_abc_",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB:root"
},
"Action": [
"SNS:Subscribe",
"SNS:Receive"
],
"Resource": "arn:aws:sns:us-east-1:AccountA:TriggerLambdaB-SNS"
}
]
}

2.在账户B中,在Lambda的基于资源的策略中添加了以下策略:

{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "_abc_",
"Effect": "Allow",
"Principal": {
"Service": "sns.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:AccountB:function:TestLambda",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:sns:us-east-1:AccountA:TriggerLambdaB-SNS"
}
}
}
]
}

我可以在账户B中的Lambda的触发器Lambda部分看到SNS名称。但当我试图在SNS下订阅Lambda时,会出现此错误。请引导我在这里错过了什么。

是因为我在这些帐户中有不同类型的角色吗?比如帐户A中的AdminAccessRole和帐户B中的FederatedRoleAccess?

您需要在Account-B(使用Lambda函数(中运行aws sns subscribe,而不是在Account-A(使用SNS函数(中。

否则,您的设置似乎是正确的。

当我尝试从Account-A运行subscribe命令时,它说:

调用Subscribe操作时发生错误(AuthorizationError(:帐户account-A不是lambda函数arn:aws:lambda:ap-southeast-2:account-B:function:foo 的所有者

虽然此错误与您的错误不同,但您的命令似乎是从Account-A(使用SNS(而非Account-B(使用Lambda(运行的。

旁注:教程:将AWS Lambda与亚马逊简单通知服务文档一起使用中似乎出现了一个小错误,其中Lambda的基于资源的策略(问题中的第二个(显示了一个SourceArn,它指的是Account-B-Lambda,而它应该是Account-a-SNS。然而,您在上面的政策中似乎已经得到了正确的解释。

最新更新