没有证书的python上传到S3

问题描述 投票:1回答:1

我有S3存储桶,该存储桶具有以下策略以允许从特定IP进行完全访问

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicWriteFromIP",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::logs-dev",
                "arn:aws:s3:::logs-dev/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "#.#.#.#/32"
                }
            }
        }
    ]
}

我想使用python在没有任何凭据的情况下将文件上传到S3存储桶。当我尝试使用带有空env AWS_ACCESS_KEY_ID=''AWS_SECRET_ACCESS_KEY=''的boto / boto3时出现以下错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/boto3/s3/inject.py", line 209, in bucket_upload_file
    ExtraArgs=ExtraArgs, Callback=Callback, Config=Config)
  File "/usr/local/lib/python2.7/site-packages/boto3/s3/inject.py", line 131, in upload_file
    extra_args=ExtraArgs, callback=Callback)
  File "/usr/local/lib/python2.7/site-packages/boto3/s3/transfer.py", line 279, in upload_file
    future.result()
  File "/usr/local/lib/python2.7/site-packages/s3transfer/futures.py", line 106, in result
    return self._coordinator.result()
  File "/usr/local/lib/python2.7/site-packages/s3transfer/futures.py", line 265, in result
    raise self._exception
botocore.exceptions.NoCredentialsError: Unable to locate credentials

如何在没有凭据的情况下将文件上传到S3存储桶?是否可以仅使用urllib2将文件上传到S3(公开)?

python-2.7 amazon-s3 boto3 boto
1个回答
0
投票

我必须启用 Static Web hosting并将Block all public access设置为关闭

然后下面的代码起作用

import requests
url = "https://logs-dev.s3-us-east-1.amazonaws.com/"
data = { 'key': '/test.txt' }
files = { 'file': open('/tmp/test.txt', 'rb') }
r = requests.post(url, data=data, files=files)
print "status %s" % r.status_code
© www.soinside.com 2019 - 2024. All rights reserved.