我试图连接到一个S3桶(第三方是所有者,所以我不能通过AWS控制台访问)。使用CyberDuck,我可以连接和上传文件没有问题。但是,我尝试了几个库来连接这个桶,所有这些库都返回了一个403被禁止的库。我在这里发帖,希望有人能发现我做错了什么。
def send_to_s3(file_name):
csv = open("/tmp/" + file_name, 'rb')
conn = tinys3.Connection("SECRET",
"SECRET",
tls=True,
endpoint="s3.amazonaws.com")
conn.upload("MDA-Data-Ingest/input/" + file_name, csv, bucket="gsext-69qlakrroehhgr0f47bhffnwct")
def send_via_ftp(file_name):
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
srv = pysftp.Connection(host="gsext-69qlakrroehhgr0f47bhffnwct.s3.amazonaws.com",
username="SECRET",
password="SECRET",
port=443,
cnopts=cnopts)
with srv.cd('\MDA-Data-Ingest\input'):
srv.put('\\tmp\\'+file_name)
# Closes the connection
srv.close()
def send_via_boto(file_name):
access_key = 'SECRET'
secret_key = 'SECRET'
conn = boto.connect_s3(
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
host='s3.amazonaws.com',
# is_secure=False, # uncomment if you are not using ssl
calling_format=boto.s3.connection.OrdinaryCallingFormat(),
)所有这些函数都返回一个403,如下所示:
HTTPError: 403个客户端错误:禁止url:https://gsext-69qlakrroehhgr0f47bhffnwct.s3.amazonaws.com/MDA-Data-Ingest/input/accounts.csv
然而,当我使用CyberDuck时,我可以很好地连接:

发布于 2017-09-05 23:02:50
最简单的方法是使用AWS命令线接口(CLI),它使用boto3访问AWS服务。
例如:
aws s3 ls s3://bucket-name --region us-west-2
aws s3 cp s3://gsext-69qlakrroehhgr0f47bhffnwct/MDA-Data-Ingest/input/accounts.csv accounts.csv您将首先运行aws configure来提供凭据和默认区域,但上面的语法允许您指定桶所在的特定区域。(您的Python代码可能由于调用错误的区域而失败。)
https://stackoverflow.com/questions/46063487
复制相似问题