我试图在不使用凭据的情况下连接到AWS S3。我为我的实例附加了角色S3完全访问,以检查文件是否存在;如果不存在,则将其上载到S3桶中。如果不是,我想检查md5sum,如果它与本地文件不同,上传一个新版本。
我试图使用S3通过boto获取bucket.get_key('mykey')文件的密钥,并得到以下错误:
File "/usr/local/lib/python3.5/dist-packages/boto/s3/bucket.py", line 193, in get_key key, resp = self._get_key_internal(key_name, headers, query_args_l)
File "/usr/local/lib/python3.5/dist-packages/boto/s3/bucket.py", line 232, in _get_key_internal response.status, response.reason, '') boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden"在拿到桶时,我搜索并添加了"validate=False",但这并没有解决我的问题。我使用Python3.5、boto和boto3。
这是我的代码:
import boto3
import boto
from boto import ec2
import os
import boto.s3.connection
from boto.s3.key import Key
bucket_name = "abc"
conn = boto.s3.connect_to_region('us-west-1', is_secure = True, calling_format = boto.s3.connection.OrdinaryCallingFormat())
bucket = conn.get_bucket(bucket_name, validate=False)
key = bucket.get_key('xxxx')
print (key)我不知道我为什么会犯这个错误。请帮我把这个问题弄清楚。谢谢!
已更新
我只是找到了这个问题的根源。由“请求时间与当前时间的差异太大”引起的。然后,它没有从S3桶中获取文件密钥。我更新了ntp服务,以同步本地时间和UTC时间。它成功了。同步时间:
sudo service ntp stop
sudo ntpdate -s 0.ubuntu.pool.ntp.org
sudo service ntp start谢谢!
发布于 2017-12-14 15:43:26
IAM角色是,按搜索的顺序排列。我敢打赌,您在搜索订单之前存储了凭据,它没有完全的S3访问权限。检查配置设置和优先级并确保没有凭据存在,以便使用IAM角色来获取凭据。虽然它适用于CLI,但它也适用于脚本。
AWS CLI按照以下顺序查找凭据和配置设置:
https://stackoverflow.com/questions/47812247
复制相似问题