python-2.7 - python上传到S3没有凭据
问题描述
我有 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 存储桶而无需任何凭据。当我尝试将 boto/boto3 与空环境一起使用时,AWS_ACCESS_KEY_ID=''
出现AWS_SECRET_ACCESS_KEY=''
以下错误
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(公共)?
解决方案
我必须启用 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
推荐阅读
- python - 让 Alexa 说出 Python 中请求的结果
- python - 如何在最后以数字打印范围内的星星?
- kotlin - 如果已经通过构造函数初始化,委托类可以忽略 get/set 中传递的“this”对象吗
- maven - 需要在 Visual Studio 中构建 c++ 项目的 pom.xml 格式
- java - 我想在我的android底部导航栏中垂直居中文本
- javascript - 类/功能组件,内部方法
- c - 如何在C语言中找到约瑟夫斯问题中的消除顺序?
- c++ - 为什么gmock中指向SetArgPointee的void *指针会导致错误
- oracle - 合并 2 个查询并在列中返回一个结果
- python - 如何有效地更新熊猫数据框中的列名?