You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Python Boto3的sns.publish时出现MissingAuthenticationToken错误怎么办?

解决AWS SNS MissingAuthenticationToken错误的方案

首先看你的错误信息:

botocore.exceptions.ClientError: An error occurred (MissingAuthenticationToken) when calling the Publish operation: Request is missing Authentication Token

核心问题和修复步骤如下:

1. 移除无签名配置(最关键)

你代码里设置了signature_version=botocore.UNSIGNED,这会让boto3发送不包含签名的请求,而AWS SNS属于需要身份认证的服务,无签名请求会直接被判定为缺少认证令牌。

修改后的客户端初始化代码:

import boto3
import os
import uuid  # 补上缺失的导入
from botocore.config import Config

def send_sns_message(topic_arn: str, message: str, message_attributes: dict) -> None:
    sns = boto3.client(
        "sns",
        region_name=os.environ["AWS_REGION"],
        aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
        aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"]
        # 移除config=config这一行,默认签名规则即可正常认证
    )
    att_dict = {}
    for key, value in message_attributes.items():
        if isinstance(value, str):
            att_dict[key] = {"DataType": "String", "StringValue": value}
    response = sns.publish(
        TopicArn=topic_arn,
        Message=message,
        MessageGroupId=str(uuid.uuid4()),
        MessageAttributes=att_dict,
    )

如果确实需要自定义配置,也可以显式指定标准签名版本(比如s3v4),但默认情况下boto3会自动适配,无需额外设置:

config = Config(signature_version='s3v4')
# 正常传入config参数即可

2. 补全缺失的模块导入

你的代码里使用了os.environ和uuid.uuid4(),但没有导入os和uuid模块,这会导致运行时抛出NameError,间接中断认证流程。必须在代码开头添加:

import os
import uuid

3. 验证Docker容器内的环境变量

确保AWS相关环境变量已经正确注入到Docker容器中:

  • 启动容器时通过-e参数传递变量:
    docker run -e AWS_REGION=your-region-id -e AWS_ACCESS_KEY_ID=your-access-key -e AWS_SECRET_ACCESS_KEY=your-secret-key your-image-name
    
  • 进入容器验证变量是否存在:
    docker exec -it your-container-id bash
    echo $AWS_ACCESS_KEY_ID
    echo $AWS_REGION
    

4. 检查IAM用户权限

确认你的AWS密钥对应的IAM用户拥有sns:Publish权限,即使密钥有效,权限不足也可能引发类似认证相关的错误。可以在IAM控制台给用户附加自定义权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sns:Publish",
            "Resource": "你的SNS Topic ARN"
        }
    ]
}

内容的提问来源于stack exchange,提问作者writes_on

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 02:45:00