Boto3 - 如何通过代理连接到S3?

时间:2018-01-11 14:42:26

标签: python amazon-s3 docker-compose boto3

我正在使用一个模拟在http://127.0.0.1:4569上运行的S3服务器的容器(无需授权或凭据)

我正在尝试使用python和boto3简单地连接并打印所有存储桶名称的列表

这是我的docker-compose:

s3:
image: andrewgaul/s3proxy
environment:
  S3PROXY_AUTHORIZATION: none
hostname: s3
ports:
  - 4569:80
volumes:
  - ./data/s3:/data

这是我的代码:

s3 = boto3.resource('s3', endpoint_url='http://127.0.0.1:4569')

for bucket in s3.buckets.all():
    print(bucket.name)enter code here

这是我收到的错误消息:

botocore.exceptions.NoCredentialsError: Unable to locate credentials

我试过这个解决方案=> How do you use an HTTP/HTTPS proxy with boto3?

但仍然无法正常工作,我不明白我做错了什么

1 个答案:

答案 0 :(得分:1)

首先,boto3总是尝试使用AWS API密钥与S3服务器握手。即使您的模拟服务器不需要密码,您仍然需要在.aws /凭证或程序内指定它们。例如

[default] 
aws_access_key_id = x
aws_secret_access_key = x

硬编码虚拟访问密钥示例

import boto3
session = boto3.session(
  aws_access_key_id = 'x', 
  aws_secret_access_key = 'x')

s3 = session.resource('s3', endpoint_url='http://127.0.0.1:4569')

其次,我不知道你的" s3模拟容器"实现了多么可靠和哪种协议。为了让生活更轻松,我总是建议任何想要模拟S3负载测试或任何使用的人fake-s3