【发布时间】:2026-02-22 18:40:01
【问题描述】:
我想从 SNS(账户 A)向 Lambda(账户 B)发送通知。按照本教程进行操作,但仍然出现以下错误: https://docs.aws.amazon.com/lambda/latest/dg/with-sns-example.html
错误代码:AccessDeniedException - 错误消息:用户:arn:aws:sts::AccountA:assumed-role/AdministratorAccessRole/A12345 无权执行:lambda:AddPermission on resource:arn:aws:lambda:us-east -1:AccountB:function:TestLambda
在我所做的下面: 1. Account A中,在SNS的Access Policy中添加如下策略:
{
"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 的 Resource-Based Policy 中添加以下策略:
{
"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 函数订阅 Account-A 中的 SNS 主题,以便发送到 SNS 主题的消息将触发 Lambda 函数的调用?
-
您提供的链接还说,
ListSubscriptionsByTopic应该用于设置跨账户 lambda 订阅。 -
@Marcin 是的,我现在也添加了。但仍然遇到同样的错误。
-
@JohnRotenstein:是的。
-
KMS 呢?你用它加密一些东西吗?跨账户访问 kms 加密资源需要特殊权限。
标签: amazon-web-services aws-lambda amazon-sns