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

AWS Lambda使用PyPDF2打开S3存储桶PDF提示访问被拒绝如何解决

问题排查与解决步骤

1. 修正S3文件读取逻辑

你当前代码使用open('S3 FILE URL', 'rb')读取S3文件的写法本身存在错误:Python内置的open()函数仅能读取本地文件系统的资源,无法直接解析S3的HTTP/HTTPS URL或S3协议路径。你需要先通过boto3将S3文件读取到Lambda的临时内存中,再传递给PyPDF2处理,参考代码如下:

import boto3
from PyPDF2 import PdfFileReader
from io import BytesIO

# 初始化S3客户端
s3 = boto3.client('s3')
# 替换为实际的S3桶名和文件Key(即S3中文件的存储路径,不是完整URL)
bucket_name = "你的存储桶名称"
file_key = "path/to/your/target.pdf"

# 从S3读取文件内容到内存
response = s3.get_object(Bucket=bucket_name, Key=file_key)
pdf_content = response['Body'].read()

# 传递给PyPDF2处理
pdf = PdfFileReader(BytesIO(pdf_content))

if pdf.isEncrypted:
    pdf.decrypt('')

width = int(pdf.getPage(0).mediaBox.getWidth())
height = int(pdf.getPage(0).mediaBox.getHeight())

你当前关闭S3全部公共访问的配置符合安全规范,不需要为了该需求开启公共访问权限,所有访问都可以通过IAM权限配置实现。

2. 访问拒绝报错权限排查步骤

如果修改读取逻辑后仍然返回访问拒绝报错,按以下顺序排查:

  • 检查Lambda执行角色的IAM权限:Lambda绑定的执行角色必须添加允许s3:GetObject操作的权限策略,且资源范围需要覆盖目标S3桶内的对象,参考策略示例:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::你的存储桶名称/*"
        }
    ]
}
  • 检查S3桶策略是否存在访问限制:如果桶配置了自定义桶策略,确认没有禁止Lambda执行角色的访问,也没有限制仅能从指定IP、VPC访问(未配置VPC的Lambda默认通过公网访问S3,若桶策略仅允许VPC端点访问则会触发报错)
  • 检查目标PDF文件的所有权与ACL:确认文件所有者为当前AWS账号,且文件ACL没有限制Lambda执行角色的读取权限
  • 检查S3桶加密配置:如果桶开启了KMS自定义密钥加密,需要给Lambda执行角色添加kms:Decrypt权限才能读取文件内容
  • 核对桶名、文件路径拼写:S3路径大小写敏感,桶名、文件Key拼写错误也会返回访问拒绝类报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:24:03