在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
相关产品推荐
相关产品推荐

