在Google Cloud SDK Docker中配置gsutil访问S3时认证失败如何解决
首先明确:gcloud config set 命令无法设置AWS凭证,gsutil访问S3依赖boto框架的认证体系,和gcloud自有配置完全独立。
你遇到的报错本质是没有提供有效的AWS认证信息,gsutil默认会尝试访问AWS实例元数据服务拿临时凭证,在本地Docker环境下没有该服务,所以会抛出连接拒绝、找不到认证处理器的错误。
前置要求
你必须先向共享存储桶的所有者索要对你开放的AWS访问密钥对,包含aws_access_key_id和aws_secret_access_key,没有有效密钥的情况下无法访问S3存储桶。
可用的配置方式
拿到密钥后有三种常用配置方案,按易用性排序如下:
- 运行时传入环境变量(推荐,无需修改配置)
直接在docker run命令中通过-e参数传入AWS标准认证环境变量,gsutil会自动读取:
docker run --rm -ti --volumes-from gcloud-config \ -e AWS_ACCESS_KEY_ID=替换为你的aws_access_key_id \ -e AWS_SECRET_ACCESS_KEY=替换为你的aws_secret_access_key \ google/cloud-sdk gsutil ls s3://bucketname
- 本地编写.boto文件挂载使用
在Windows本地新建一个名为.boto的文件,写入以下内容:
[Credentials] aws_access_key_id = 替换为你的aws_access_key_id aws_secret_access_key = 替换为你的aws_secret_access_key
运行命令时将该文件挂载到容器的/root/.boto路径即可:
docker run --rm -ti --volumes-from gcloud-config \ -v 你本地.boto文件的完整路径:/root/.boto \ google/cloud-sdk gsutil ls s3://bucketname
- 将配置写入gcloud-config卷持久化
如果不想每次运行命令都传参数或者挂载文件,可以直接把配置写入你已经创建的gcloud-config卷:
首先进入容器的bash交互界面:
docker run --rm -ti --volumes-from gcloud-config google/cloud-sdk bash
在容器内执行以下命令写入.boto配置(替换成你自己的密钥):
cat > /root/.boto << EOF [Credentials] aws_access_key_id = 替换为你的aws_access_key_id aws_secret_access_key = 替换为你的aws_secret_access_key EOF
输入exit退出容器后,后续运行原有命令即可正常访问S3:
docker run --rm -ti --volumes-from gcloud-config google/cloud-sdk gsutil ls s3://bucketname
内容的提问来源于stack exchange,提问作者seesoe
相关产品推荐
相关产品推荐

