我正在尝试设置Amazon Linux AMI(ami-f0091d91)并且有一个脚本运行复制命令以从S3存储桶复制。
aws --debug s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
此脚本在我的本地计算机上运行良好,但在Amazon Image上出现以下错误失败:
2016-03-22 01:07:47,110 - MainThread - botocore.auth - DEBUG - StringToSign:
HEAD
Tue, 22 Mar 2016 01:07:47 GMT
x-amz-security-token:AQoDYXdzEPr//////////wEa4ANtcDKVDItVq8Z5OKms8wpQ3MS4dxLtxVq6Om1aWDhLmZhL2zdqiasNBV4nQtVqwyPsRVyxl1Urq1BBCnZzDdl4blSklm6dvu+3efjwjhudk7AKaCEHWlTd/VR3cksSNMFTcI9aIUUwzGW8lD9y8MVpKzDkpxzNB7ZJbr9HQNu8uF/st0f45+ABLm8X4FsBPCl2I3wKqvwV/s2VioP/tJf7RGQK3FC079oxw3mOid5sEi28o0Qp4h/Vy9xEHQ28YQNHXOBafHi0vt7vZpOtOfCJBzXvKbk4zRXbLMamnWVe3V0dArncbNEgL1aAi1ooSQ8+Xps8ufFnqDp7HsquAj50p459XnPedv90uFFd6YnwiVkng9nNTAF+2Jo73+eKTt955Us25Chxvk72nAQsAZlt6NpfR+fF/Qs7jjMGSF6ucjkKbm0x5aCqCw6YknsoE1Rtn8Qz9tFxTmUzyCTNd7uRaxbswm7oHOdsM/Q69otjzqSIztlwgUh2M53LzgChQYx5RjYlrjcyAolRguJjpSq3LwZ5NEacm/W17bDOdaZL3y1977rSJrCxb7lmnHCOER5W0tsF9+XUGW1LMX69EWgFYdn5QNqFk6mcJsZWrR9dkehaQwjLPcv/29QcM+b5u/0goazCtwU=
/aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm
2016-03-22 01:07:47,111 - MainThread - botocore.endpoint - DEBUG - Sending http request: <PreparedRequest [HEAD]>
2016-03-22 01:07:47,111 - MainThread - botocore.vendored.requests.packages.urllib3.connectionpool - INFO - Starting new HTTPS connection (1): aws-codedeploy-us-west-2.s3.amazonaws.com
2016-03-22 01:07:47,151 - MainThread - botocore.vendored.requests.packages.urllib3.connectionpool - DEBUG - "HEAD /latest/codedeploy-agent.noarch.rpm HTTP/1.1" 403 0
2016-03-22 01:07:47,151 - MainThread - botocore.parsers - DEBUG - Response headers: {'x-amz-id-2': '0mRvGge9ugu+KKyDmROm4jcTa1hAnA5Ax8vUlkKZXoJ//HVJAKxbpFHvOGaqiECa4sgon2F1kXw=', 'server': 'AmazonS3', 'transfer-encoding': 'chunked', 'x-amz-request-id': '6204CD88E880E5DD', 'date': 'Tue, 22 Mar 2016 01:07:46 GMT', 'content-type': 'application/xml'}
2016-03-22 01:07:47,152 - MainThread - botocore.parsers - DEBUG - Response body:
2016-03-22 01:07:47,152 - MainThread - botocore.hooks - DEBUG - Event needs-retry.s3.HeadObject: calling handler <botocore.retryhandler.RetryHandler object at 0x7f421075bcd0>
2016-03-22 01:07:47,152 - MainThread - botocore.retryhandler - DEBUG - No retry needed.
2016-03-22 01:07:47,152 - MainThread - botocore.hooks - DEBUG - Event after-call.s3.HeadObject: calling handler <function enhance_error_msg at 0x7f4211085758>
2016-03-22 01:07:47,152 - MainThread - botocore.hooks - DEBUG - Event after-call.s3.HeadObject: calling handler <awscli.errorhandler.ErrorHandler object at 0x7f421100cc90>
2016-03-22 01:07:47,152 - MainThread - awscli.errorhandler - DEBUG - HTTP Response Code: 403
2016-03-22 01:07:47,152 - MainThread - awscli.customizations.s3.s3handler - DEBUG - Exception caught during task execution: A client error (403) occurred when calling the HeadObject operation: Forbidden
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/awscli/customizations/s3/s3handler.py", line 100, in call
total_files, total_parts = self._enqueue_tasks(files)
File "/usr/local/lib/python2.7/site-packages/awscli/customizations/s3/s3handler.py", line 178, in _enqueue_tasks
for filename in files:
File "/usr/local/lib/python2.7/site-packages/awscli/customizations/s3/fileinfobuilder.py", line 31, in call
for file_base in files:
File "/usr/local/lib/python2.7/site-packages/awscli/customizations/s3/filegenerator.py", line 142, in call
for src_path, extra_information in file_iterator:
File "/usr/local/lib/python2.7/site-packages/awscli/customizations/s3/filegenerator.py", line 314, in list_objects
yield self._list_single_object(s3_path)
File "/usr/local/lib/python2.7/site-packages/awscli/customizations/s3/filegenerator.py", line 343, in _list_single_object
response = self._client.head_object(**params)
File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 228, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/local/lib/python2.7/site-packages/botocore/client.py", line 488, in _make_api_call
model=operation_model, context=request_context
File "/usr/local/lib/python2.7/site-packages/botocore/hooks.py", line 226, in emit
return self._emit(event_name, kwargs)
File "/usr/local/lib/python2.7/site-packages/botocore/hooks.py", line 209, in _emit
response = handler(**kwargs)
File "/usr/local/lib/python2.7/site-packages/awscli/errorhandler.py", line 70, in __call__
http_status_code=http_response.status_code)
ClientError: A client error (403) occurred when calling the HeadObject operation: Forbidden
2016-03-22 01:07:47,153 - Thread-1 - awscli.customizations.s3.executor - DEBUG - Received print task: PrintTask(message='A client error (403) occurred when calling the HeadObject operation: Forbidden', error=True, total_parts=None, warning=None)
A client error (403) occurred when calling the HeadObject operation: Forbidden
但是,当我使用--no-sign-request
选项运行它时,它完美地工作:
aws --debug --no-sign-request s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
有人可以解释一下发生了什么吗?
我想到了。我在创建EC2实例的云形成模板中出错。因此,尝试访问上述代码部署存储桶的EC2实例位于不同的区域(不是us-west-2)。看起来桶上的访问策略(由亚马逊拥有)只允许从它们所属的区域进行访问。当我在模板中修复错误(这是错误的参数映射)时,错误消失了
当GET请求正在工作时,我收到了关于HEAD请求的403。原来是s3权限中的CORS配置。我不得不添加HEAD
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我也经历过这种行为。在我的情况下,我发现如果IAM策略无权读取对象(s3:GetObject
),则会引发相同的错误。
我同意你的意见,从aws console&cli引发的错误并没有得到很好的解释,可能会引起混淆。
我也经历过这种情况。
我有一个使用AWS4-HMAC-SHA256的策略桶。原来我的awscli没有更新到最新版本。我的是aws-cli / 1.10.8。升级它已经解决了这个问题。
pip install awscli --upgrade --user
https://docs.aws.amazon.com/cli/latest/userguide/installing.html
如果在凭证/角色不明确的环境中运行,请确保包含--profile=yourprofile
标志,以便cli知道要使用的凭据。例如:
aws s3 cp s3://yourbucket destination.txt --profile=yourprofile
将成功,而以下产生HeadObject错误
aws s3 cp s3://yourbucket destination.txt
配置文件设置引用config
和credentials
文件中的条目。
这是由于未授权访问存储桶。你应该像这样重新配置:
aws configure
输入您的访问密钥和秘密访问密钥。然后将默认区域名称设置为与存储区域相同。
它会工作。
您缺少HeadBucket权限。
我得到了错误A client error (403) occurred when calling the HeadObject operation: Forbidden
为我的aws cli复制命令aws s3 cp s3://bucket/file file
。我正在使用一个IAM角色,它使用Inline Policy
进行完全S3访问。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
如果我从Managed Policies
给它完整的S3访问,那么命令工作。我认为这必定是来自亚马逊的错误,因为两种情况下的策略完全相同。
在我的情况下,问题是用户访问策略中的Resource
语句。
首先我们有"Resource": "arn:aws:s3:::BUCKET_NAME"
,但为了能够访问桶中的对象,你最后需要一个/*
:"Resource": "arn:aws:s3:::BUCKET_NAME/*"
我有这个问题,在命令中添加--recursive
会有所帮助。
在这一点上它并没有多大意义,因为你(像我一样)只是试图复制一个文件,但它确实有效!
我自己试图解决这个问题,发现没有HeadBucket权限。看起来有,因为这是错误消息告诉你的,但实际上HEAD
操作需要ListBucket
权限。我还发现我的IAM策略和我的存储桶策略存在冲突。一定要检查两者。
其中一个原因可能是您尝试访问需要V4签名的区域的存储桶。尝试明确地提供该区域,如--region cn-north-1
在我的情况下,我在尝试获取S3存储桶文件夹上的对象时遇到此错误。但在该文件夹中我的对象不在这里(我放错了文件夹),所以S3发送此消息。希望它也可以帮到你。
错误配置的测试事件导致此错误。我更改了源存储桶ARN,但忘记编辑默认的S3存储桶名称。
即确保在测试事件的bucket部分中正确设置了ARN和存储桶名称:
"bucket": {
"arn": "arn:aws:s3:::your_bucket_name",
"name": "your_bucket_name",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
由于我的EC2实例的时钟不同步,我收到此错误消息。
我能够使用这个来修复Ubuntu:
sudo ntpdate ntp.ubuntu.com
sudo apt-get install ntp