Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
当我尝试将 Lambda 函数订阅到 Amazon SNS 主题时,为什么收到授权错误消息?
我尝试将 AWS Lambda 函数订阅到 Amazon Simple Notification Service (Amazon SNS) 主题时收到授权错误消息。如何解决此错误?
简短描述
当您将 Lambda 函数订阅到 SNS 主题时,由于以下原因,您可能会收到授权错误:
- 您尝试从与您的 Lambda 函数所在账户不同的 AWS 账户创建订阅。
-或者- - 您用于创建订阅的 AWS Identity and Access Management (IAM) 身份没有运行以下 API 操作的权限:
(Lambda) AddPermission
(Amazon SNS) Subscribe
要解决此问题,您必须执行以下操作之一,具体取决于导致错误的原因:
- 确保从您的函数所在的 AWS 账户将 Lambda 函数订阅到 SNS 主题。
-或者- - 确保您正在使用的 IAM 身份有权运行 Lambda AddPermission 和 SNS Subscribe API 操作。
解决方法
根据 Lambda 返回的错误消息验证导致错误的原因
如果您使用与函数所在账户不同的 AWS 账户创建订阅,则 Lambda 将返回以下错误之一:
AWS CLI 错误示例:您尝试从与您的 Lambda 函数所在账户不同的账户创建订阅
An error occurred (AuthorizationError) when calling the Subscribe operation: The account YOUR_AWS_ACCOUNT_ID_1 is not the owner of the endpoint arn:aws:lambda:us-east-1:YOUR_AWS_ACCOUNT_ID_2:function: your_Lambda_function_ARN
AWS 管理控制台错误示例:您尝试从与您的 Lambda 函数所在账户不同的账户创建订阅
Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXXX:function:XXXXXXX
如果您使用的是正确的账户,但您的 IAM 身份缺少所需的权限,则 Lambda 或 SNS 会返回以下错误之一:
AWS CLI 错误示例:您用于创建订阅的 IAM 身份没有运行 Lambda AddPermission 操作的权限
An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::XXXXXXX:user/XXXXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXX:function:XXXXXXX because no identity-based policy allows the lambda:AddPermission action
AWS 管理控制台错误示例:您用于创建订阅的 IAM 身份没有运行 Lambda AddPermission 操作的权限
Error code: AccessDeniedException - Error message: User: arn:aws:sts:XXXXXXXX:assumed-role/XXXXXXXX/XXXXX-XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXXXXX:function:XXXXXXX because no identity-based policy allows the lambda:AddPermission action
当您尝试使用无权运行 SNS Subscribe 操作的 IAM 身份时的 AWS CLI 错误示例
An error occurred (AuthorizationError) when calling the Subscribe operation: User: arn:aws:iam::XXXXXXX:user/XXXXXXXX is not authorized to perform: SNS:Subscribe on resource: arn:aws:sns:us-west-2:XXXXXXXX:XXXXXXX because no resource-based policy allows the SNS:Subscribe action
确保从您的函数所在的 AWS 账户将 Lambda 函数订阅到 SNS 主题
您可以使用 Lambda 控制台或 AWS CLI 将 Lambda 函数订阅至 SNS 主题。
使用 Lambda 控制台将函数订阅到 SNS 主题
**注意:**当您使用 Lambda 控制台添加 SNS 触发器时,控制台会自动允许来自主体 service:sns.amazonaws.com 的 lambda:InvokeFunction 权限。
1. 在 Lambda 控制台的函数页面上,选择您的函数。
2. 在 Overview(概览)下,选择 Add trigger(添加触发器)。
3. 对于 Trigger configuration (触发配置),选择 Select a trigger (选择触发器),然后选择 SNS。
4. 对于 SNS topic (SNS 主题),请从其他 AWS 账户粘贴 SNS 主题 Amazon Resource Name (ARN)。
5. 选中 Enable trigger (启用触发器) 复选框。
6. 选择 Add(添加)。
有关更多信息,请参阅配置 Lambda 函数选项。
**注意:**如果您收到以下错误,则必须向正在使用的 IAM 身份授予 Subscribe API 操作权限。有关故障排除说明,请参阅以下文章:尝试向 Amazon SNS 主题添加订阅者时,如何解决授权错误?
An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: SNS:Subscribe on resource: your_SNS_topic_ARN
使用 AWS CLI 控制台将函数订阅到 SNS 主题
注意:如果您在运行 AWS CLI 命令时遇到错误,请确保使用的是最新版本的 AWS CLI。
1. 使用属于您的 Lambda 函数所在的 AWS 账户的 IAM 用户配置 AWS CLI:
aws configure --profile-name your_profile_name
重要提示:确保传递 IAM 用户的 AWS 访问密钥 ID 和私有密钥。
2. 通过添加来自主体 service:sns.amazonaws.com 的 lambda:InvokeFunction 权限允许从 SNS 主题调用 Lambda:
aws lambda add-permission --function-name your_lambda_function_name --statement-id sns_invoke_permission --action lambda:InvokeFunction --principal sns.amazonaws.com --source-arn your_sns_topic_arn
3. 将您的 Lambda 函数订阅到 SNS 主题:
aws sns subscribe --topic-arn your_sns_topic_ARN --protocol lambda --notification-endpoint your_lambda_function_arn --profile your_profile_name_passed_on_#1
**注意:**如果您收到以下错误,您必须向正在使用的 IAM 身份授予 Subscribe API 操作权限。有关故障排除说明,请参阅以下文章:尝试向 Amazon SNS 主题添加订阅者时,如何解决授权错误?
An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: SNS:Subscribe on resource: your_SNS_topic_ARN
确保您正在使用的 IAM 身份有权运行 Lambda AddPermission 和 SNS Subscribe API 操作
审核您的 IAM 身份的基于身份的策略。确保策略明确允许 IAM 身份运行以下两个操作:
lambda:AddPermission
SNS:Subscribe
如果基于身份的策略未授予所需的权限,则将所需的权限添加到策略。然后,从函数所在的 AWS 账户将您的 Lambda 函数订阅到 SNS 主题。
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前