web-dev-qa-db-ja.com

AWS CLI S3 HeadObjectオペレーションの呼び出し中にクライアントエラー(403)が発生しました:Forbidden

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 .

誰かが何が起こっているのか説明してもらえますか?

38
MojoJojo

私はそれを考え出した。 EC2インスタンスを作成していたクラウド形成テンプレートにエラーがありました。その結果、上記のコードデプロイバケットにアクセスしようとしていたEC2インスタンスは、異なる地域にありました(us-west-2ではありません)。バケット(Amazonが所有)のアクセスポリシーでは、所属するリージョンからのアクセスのみが許可されているようです。

17
MojoJojo

私の場合、問題はユーザーアクセスポリシーのResourceステートメントでした。

最初に"Resource": "arn:aws:s3:::BUCKET_NAME"がありましたが、バケット内のオブジェクトにアクセスするには、最後に/*が必要です:"Resource": "arn:aws:s3:::BUCKET_NAME/*"

10
trudolf

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のバグだと思います。

10
shadi

この問題を自分で解決しようとして、HeadBucketの許可がないことがわかりました。エラーメッセージに示されているとおりであるように見えますが、実際にはHEAD操作にはListBucket権限が必要です。また、IAMポリシーとバケットポリシーが競合していることも発見しました。必ず両方を確認してください。

6
andrew lorien

この問題が発生したので、コマンドに--recursiveを追加すると役立ちます。

この時点で、あなたは(私のように)1つのファイルだけをコピーしようとしているので、意味を成しませんが、うまくいきます!

この理由の1つは、V4-Signingを必要とするリージョンのバケットにアクセスしようとした場合です。 --region cn-north-1のように、リージョンを明示的に指定してみてください

4
Saurabh

私の場合、S3バケットフォルダーのオブジェクトを取得しようとすると、このエラーが発生しました。しかし、そのフォルダに私のオブジェクトはここにありませんでした(間違ったフォルダを入れました)ので、S3はこのメッセージを送信します。それがあなたにも役立つことを願っています。

3
Vince

EC2インスタンスのクロックが同期していないため、このエラーメッセージが表示されていました。

私はこれを使用してUbuntuで修正することができました:

Sudo ntpdate ntp.ubuntu.com
Sudo apt-get install ntp
1
Tatsu

誤って設定されたテストイベントでこのエラーが発生しました。ソースバケットARNを変更しましたが、デフォルトのS3バケット名を編集するのを忘れました。

つまりテストイベントのバケットセクションで、ARNとバケット名の両方が正しく設定されていることを確認してください。

"bucket": {
  "arn": "arn:aws:s3:::your_bucket_name",
  "name": "your_bucket_name",
  "ownerIdentity": {
    "principalId": "EXAMPLE"
  }
1
quax

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>
0
Ioannis Tsiokos

私もこのシナリオを経験しました。

AWS4-HMAC-SHA256を使用するポリシーを持つバケットがあります。私のawscliは最新バージョンに更新されていません。私はaws-cli/1.10.8でした。アップグレードすることで問題は解決しました。

pip install awscli --upgrade --user

https://docs.aws.Amazon.com/cli/latest/userguide/installing.html

0
Renzo Sunico

資格/役割が明確でない環境で実行している場合は、--profile=yourprofileフラグを含めて、cliが使用する資格を認識できるようにしてください。例えば:

aws s3 cp s3://yourbucket destination.txt --profile=yourprofile

以下はHeadObjectエラーを生成しましたが成功します

aws s3 cp s3://yourbucket destination.txt

プロファイル設定は、configおよびcredentialsファイルのエントリを参照します。

0
rictionaryFever

私もその行動を経験しました。私の場合、IAMポリシーにオブジェクト(s3:GetObject)を読み取るためのアクセス権がない場合、同じエラーが発生することがわかりました。

Aws console&cliから発生したエラーの説明があまりよくないため、混乱を招く可能性があることに同意します。

0
Adrian Antunez