Amazon Linux AMI(ami-f0091d91)をセットアップしようとしていて、コピーコマンドを実行してS3バケットからコピーするスクリプトがあります。
aws --debug s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
このスクリプトはローカルマシンでは完全に動作しますが、Amazonイメージでは次のエラーで失敗します。
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ではありません)。バケット(Amazonが所有)のアクセスポリシーでは、所属するリージョンからのアクセスのみが許可されているようです。
私の場合、問題はユーザーアクセスポリシーのResource
ステートメントでした。
最初に"Resource": "arn:aws:s3:::BUCKET_NAME"
がありましたが、バケット内のオブジェクトにアクセスするには、最後に/*
が必要です:"Resource": "arn:aws:s3:::BUCKET_NAME/*"
AWS CLIコピーコマンドaws s3 cp s3://bucket/file file
でエラーA client error (403) occurred when calling the HeadObject operation: Forbidden
が発生していました。 Inline Policy
を使用した完全なS3アクセスを持つIAMロールを使用していました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
代わりにManaged Policies
から完全なS3アクセスを与えると、コマンドは機能します。どちらの場合のポリシーもまったく同じだったので、これはAmazonのバグだと思います。
この問題を自分で解決しようとして、HeadBucketの許可がないことがわかりました。エラーメッセージに示されているとおりであるように見えますが、実際にはHEAD
操作にはListBucket
権限が必要です。また、IAMポリシーとバケットポリシーが競合していることも発見しました。必ず両方を確認してください。
この問題が発生したので、コマンドに--recursive
を追加すると役立ちます。
この時点で、あなたは(私のように)1つのファイルだけをコピーしようとしているので、意味を成しませんが、うまくいきます!
この理由の1つは、V4-Signingを必要とするリージョンのバケットにアクセスしようとした場合です。 --region cn-north-1
のように、リージョンを明示的に指定してみてください
私の場合、S3バケットフォルダーのオブジェクトを取得しようとすると、このエラーが発生しました。しかし、そのフォルダに私のオブジェクトはここにありませんでした(間違ったフォルダを入れました)ので、S3はこのメッセージを送信します。それがあなたにも役立つことを願っています。
EC2インスタンスのクロックが同期していないため、このエラーメッセージが表示されていました。
私はこれを使用してUbuntuで修正することができました:
Sudo ntpdate ntp.ubuntu.com
Sudo apt-get install ntp
誤って設定されたテストイベントでこのエラーが発生しました。ソースバケットARNを変更しましたが、デフォルトのS3バケット名を編集するのを忘れました。
つまりテストイベントのバケットセクションで、ARNとバケット名の両方が正しく設定されていることを確認してください。
"bucket": {
"arn": "arn:aws:s3:::your_bucket_name",
"name": "your_bucket_name",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
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>
私もこのシナリオを経験しました。
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
ファイルのエントリを参照します。
私もその行動を経験しました。私の場合、IAMポリシーにオブジェクト(s3:GetObject
)を読み取るためのアクセス権がない場合、同じエラーが発生することがわかりました。
Aws console&cliから発生したエラーの説明があまりよくないため、混乱を招く可能性があることに同意します。