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

AWS Boto3在Django服务中运行Textract出现访问权限错误

解决方案
  • 首先检查你角色扮演使用的IAM角色权限,必须同时包含两类权限:

    1. Textract服务的相关操作权限(如textract:StartDocumentAnalysis)
    2. 目标S3桶的s3:GetObject权限,如果桶开启了KMS加密,还需要额外添加KMS服务的kms:Decrypt权限
      本地单独运行代码时大概率使用的是~/.aws/credentials下的高权限个人凭证,而Django中使用的角色权限不足,是最常见的触发该报错的原因。
  • 优化凭证传递方式,不要直接把STS返回的凭证字段传入Textract客户端,改用boto3 Session统一管理,避免字段传递错误或者凭证失效问题,参考代码如下:

import boto3
from boto3 import Session

sts_client = boto3.client('sts', region_name="us-east-2")
assumed_role = sts_client.assume_role(
    RoleArn='arn:aws:iam::xxx:role/xxx/xxx',
    RoleSessionName='djangoBoto3',
    DurationSeconds=3600
)
# 基于临时凭证创建独立Session
textract_session = Session(
    aws_access_key_id=assumed_role['Credentials']['AccessKeyId'],
    aws_secret_access_key=assumed_role['Credentials']['SecretAccessKey'],
    aws_session_token=assumed_role['Credentials']['SessionToken'],
    region_name="us-east-2"
)
textract_client = textract_session.client('textract')
  • 验证临时凭证的S3访问权限,你可以把STS返回的临时凭证配置到AWS CLI的临时配置文件中,执行以下命令测试是否可以正常读取目标S3对象:
aws s3api head-object --bucket <你的桶名> --key <你的对象路径> --region us-east-2

如果该命令返回权限错误,说明问题出在角色的S3权限配置,和Textract服务本身无关,调整角色权限即可。
你能正常上传文件到S3,大概率是Django的S3上传功能使用的是另一套独立的IAM凭证,和Textract用的角色扮演凭证不是同一个,不要混淆两套凭证的权限。

  • 最后确认传入Textract的S3桶名、对象key大小写完全匹配,S3的对象路径是大小写敏感的,且不要携带多余的前缀斜杠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:06:04