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

在AWS Batch中使用Task IAM角色凭据调用s3fs遇权限问题求助

AWS Batch中DVC依赖s3fs访问S3存储桶权限拒绝问题

我在AWS Batch上以Docker容器形式运行机器学习任务,使用Task IAM角色生成的凭据。通过DVC管理S3仓库中的大尺寸数据文件时,任务拉取数据提示访问被拒绝。已验证该角色具备存储桶权限:使用aws s3 cp命令可正常访问相同文件,但需要通过DVC获取对应版本的文件并放置到指定位置。

经排查,问题出在DVC依赖的s3fs库:即使显式传入凭据单独调用s3fs,仍会出现访问拒绝,失败点在调用head_object未找到对象后尝试列出文件内容的步骤。怀疑是s3fs或boto、http相关库的组合存在Bug,希望得到解决方法。

最小复现示例

任务Shell脚本

#!/bin/bash

AWS_CREDENTIALS=$(curl http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI)

export AWS_DEFAULT_REGION=us-east-1

export AWS_ACCESS_KEY_ID=$(echo "$AWS_CREDENTIALS" | jq .AccessKeyId -r)

export AWS_SECRET_ACCESS_KEY=$(echo "$AWS_CREDENTIALS" | jq .SecretAccessKey -r)

export AWS_SESSION_TOKEN=$(echo "$AWS_CREDENTIALS" | jq .Token -r)

echo "AWS_ACCESS_KEY_ID=<"$AWS_ACCESS_KEY_ID">"

echo "AWS_SECRET_ACCESS_KEY=<"$(cat <(echo "$AWS_SECRET_ACCESS_KEY" | head -c 6) <(echo -n "...") <(echo "$AWS_SECRET_ACCESS_KEY" | tail -c 6))">"

echo "AWS_SESSION_TOKEN=<"$(cat <(echo "$AWS_SESSION_TOKEN" | head -c 6) <(echo -n "...") <(echo "$AWS_SESSION_TOKEN" | tail -c 6))">"

dvc doctor

# 执行成功!
aws s3 ls s3://company-dvc/repo/

# 执行成功!
aws s3 cp s3://company-dvc/repo/00/0e4343c163bd70df0a6f9d81e1b4d2 mycopy.txt

# 执行失败!
python3 download_via_s3fs.py

download_via_s3fs.py脚本

import os

import s3fs

# 确认凭据读取正确
print(os.environ["AWS_ACCESS_KEY_ID"])
print(os.environ["AWS_SECRET_ACCESS_KEY"])
print(os.environ["AWS_SESSION_TOKEN"])

print("running with credentials")
fs = s3fs.S3FileSystem(
    key=os.environ["AWS_ACCESS_KEY_ID"],
    secret=os.environ["AWS_SECRET_ACCESS_KEY"],
    token=os.environ["AWS_SESSION_TOKEN"],
    client_kwargs={"region_name": "us-east-1"}
)

# 因ListObjectV2权限拒绝失败
print(fs.exists("company-dvc/repo/00/0e4343c163bd70df0a6f9d81e1b4d2"))

IAM角色Terraform配置

data "aws_iam_policy_document" "standard-batch-job-role" {
  # 相关存储桶的S3读取权限
  statement {
    actions = [
      "s3:Get*",
      "s3:List*",
    ]
    resources = [
      data.aws_s3_bucket.company-dvc.arn,
      "${data.aws_s3_bucket.company-dvc.arn}/*",
    ]
    effect = "Allow"
  }
}

环境信息

  • OS: Ubuntu 20.04
  • Python: 3.10
  • s3fs: 2023.1.0
  • boto3: 1.24.59

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:41:46