Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Boto/Boto3:bucket.get_key():403禁止_Python 3.x_Amazon Web Services_Amazon S3_Boto3_Boto - Fatal编程技术网

Python 3.x Boto/Boto3:bucket.get_key():403禁止

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_

我尝试连接到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_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按以下顺序查找凭据和配置设置:

  • 命令行选项–可以将区域、输出格式和配置文件指定为命令选项,以覆盖默认设置

  • 环境变量–AWS\u访问密钥\u ID、AWS\u密码\u访问密钥和AWS\u会话\u令牌

  • AWS凭据文件–在Linux、macOS或Unix上位于~/.AWS/credentials,在Windows上位于C:\Users\USERNAME.AWS\credentials。除默认配置文件外,此文件还可以包含多个命名配置文件

  • CLI配置文件–通常位于Linux、macOS或Unix上的~/.aws/config,或Windows上的C:\Users\USERNAME.aws\config。此文件可以包含每个配置文件的默认配置文件、命名配置文件和特定于CLI的配置参数

  • 容器凭据–在为任务分配角色时,由Amazon弹性容器服务在容器实例上提供

  • 实例配置文件凭据–这些凭据可用于具有指定实例角色的EC2实例,并通过Amazon EC2元数据服务提供


  • 谢谢你的支持。我在凭证文件中存储了访问密钥和机密密钥。我的实例也是附加角色。可能是这个原因导致了冲突密钥,我出错了。例如,如果我测试用例中唯一的角色attach,而不是运行aws config,那么代码可以正常运行。