Jupyter Notebook访问S3报InvalidAccessKeyId错误如何解决
问题结论
不需要为S3添加额外策略,你遇到的InvalidAccessKeyId报错和S3侧权限配置无关,本质是传入容器的AWS凭证未被SDK识别为有效凭证。
排查修复步骤
- 先验证本地凭证有效性
你使用的是带AWS_SESSION_TOKEN的临时凭证,这类凭证默认有效期最长12小时,过期后会直接触发「Access Key不存在」的报错。先在宿主机的AWS CLI中执行aws s3 ls,确认当前本地存储的凭证本身可以正常调用S3接口,如果本地调用也报错,重新执行STS命令获取新的有效临时凭证即可。 - 核对容器环境变量传参是否正确
Windows环境下通过CMD/PowerShell传长字符串环境变量时,很容易在复制密钥、Token的过程中带入不可见的尾部空格、换行符,尤其是长度较长的Session Token缺漏一个字符就会触发当前报错。可以执行以下命令进入运行中的容器,打印实际加载的AWS相关环境变量,和有效凭证逐字核对:docker exec -it <你的容器ID> env | findstr AWS_ - 排查镜像内置凭证链的覆盖问题
你使用的ECR开发端点镜像如果是Glue、SageMaker类的定制镜像,通常内置了AWS SDK的默认凭证加载逻辑,可能会优先读取镜像内预置的无效凭证配置,忽略你传入的环境变量。可以在Jupyter Notebook中运行以下代码,打印SDK实际加载使用的Access Key ID,确认是否为你传入的凭证:
如果打印的Key和你传入的不一致,初始化S3客户端时显式传入三个凭证参数即可,无需依赖默认凭证链。import boto3 current_cred = boto3.Session().get_credentials() print("SDK当前加载的Access Key ID:", current_cred.access_key)
注意:如果是跨账号访问S3的场景,只需要保证你使用的凭证所属的IAM身份已经被授予S3访问权限即可,不需要额外修改S3桶策略。
内容的提问来源于stack exchange,提问作者Reshma Joseph
相关产品推荐
相关产品推荐

