Python 3.x Boto/Boto3:bucket.get_key():403禁止
我尝试连接到S3 AWS,但不使用凭据。我为我的实例附加了角色S3 fullaccess。目的是检查文件是否存在,若不存在则上传到S3 bucket,否则检查md5sum,若与本地文件不同则上传 所以我尝试使用Python 3.x Boto/Boto3:bucket.get_key():403禁止,python-3.x,amazon-web-services,amazon-s3,boto3,boto,Python 3.x,Amazon Web Services,Amazon S3,Boto3,Boto,我尝试连接到S3 AWS,但不使用凭据。我为我的实例附加了角色S3 fullaccess。目的是检查文件是否存在,若不存在则上传到S3 bucket,否则检查md5sum,若与本地文件不同则上传 所以我尝试使用bucket.get_key('mykey')通过boto获取S3AWS中文件的密钥。我得到了这个错误: File "/usr/local/lib/python3.5/dist-packages/boto/s3/bucket.py", line 193, in get_
bucket.get_key('mykey')
通过boto获取S3AWS中文件的密钥。我得到了这个错误:
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"
我在获取bucket时搜索并添加了“validate=False”
,但没有解析。我正在使用Python 3.5、boto
和boto3
这是我的密码:
导入boto3
进口波托
从boto导入ec2
导入操作系统
导入boto.s3.connection
从boto.s3.key导入密钥
bucket_name=“abc”
conn=boto.s3.connect_to_region('us-west-1',is_secure=True,调用_format=boto.s3.connection.OrdinaryCallingFormat())
bucket=conn.get\u bucket(bucket\u name,validate=False)
key=bucket.get_key('xxxx')
打印(键)
我不知道我为什么会犯这样的错误。请帮我把这个问题弄清楚。谢谢
更新
我刚刚找到了这个问题的根本原因。原因是“请求时间与当前时间相差过大”。
然后它没有从S3存储桶中获取文件的密钥。我更新了ntp服务以同步本地时间和UTC时间。它运行成功。
同步时间由:
sudo service ntp stop
sudo ntpdate -s 0.ubuntu.pool.ntp.org
sudo service ntp start
谢谢 IAM角色是搜索顺序中的最后一个。我打赌你的凭证存储在搜索顺序之前,而搜索顺序没有完全的S3访问权限。检查并确保没有凭据,以便使用IAM角色获取凭据。虽然它适用于CLI,但也适用于脚本 AWS CLI按以下顺序查找凭据和配置设置:
谢谢你的支持。我在凭证文件中存储了访问密钥和机密密钥。我的实例也是附加角色。可能是这个原因导致了冲突密钥,我出错了。例如,如果我测试用例中唯一的角色attach,而不是运行aws config,那么代码可以正常运行。