使用boto3调用Amazon Polly遇安全令牌无效错误,需AWS CLI吗?
问题解决指南:Amazon Polly TTS 安全令牌无效错误
核心结论
UnrecognizedClientException 本质是AWS无法验证你的身份凭证,你完全不需要强制安装AWS CLI,下面是具体排查和解决步骤:
一、凭证有效性排查
- 确认
aws_access_key_id和aws_secret_access_key无输入错误:检查是否包含空格、多余字符,密钥是否为当前有效状态(未被删除、过期,若为临时凭证需额外传入aws_session_token参数) - 验证IAM用户权限:登录AWS控制台,找到对应IAM用户,确认其权限策略包含
AmazonPollyFullAccess或至少polly:SynthesizeSpeech操作权限
二、无需AWS CLI的凭证配置方式
除了代码硬编码(不推荐生产环境),可手动创建本地凭证文件:
- 在
%USERPROFILE%目录下新建.aws文件夹 - 在
.aws内创建credentials文件,格式如下:
[default] aws_access_key_id=你的密钥ID aws_secret_access_key=你的访问密钥
- 可选创建
config文件指定默认区域:
[default] region=eu-north-1
之后代码可简化为自动读取凭证:
import boto3 polly_client = boto3.client('polly') response = polly_client.synthesize_speech( Text='Hello, this is a sample text.', OutputFormat='mp3', VoiceId='Joanna' ) with open('output.mp3', 'wb') as file: file.write(response['AudioStream'].read())
三、添加SSML支持
要启用SSML,只需修改Text参数并指定TextType='ssml':
response = polly_client.synthesize_speech( Text='<speak>Hello, this is <emphasis level="strong">SSML-enabled</emphasis> speech.</speak>', TextType='ssml', OutputFormat='mp3', VoiceId='Joanna' )
四、区域服务验证
确认AWS账户在eu-north-1区域已启用Polly服务:登录AWS控制台,切换至该区域,搜索Polly并确认能正常进入服务页面
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

