AWS CLI S3 произошла ошибка клиента (403) при вызове операции HeadObject: запрещено

Я пытаюсь настроить 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 .

может кто-нибудь объяснить, что происходит?

10 ответов


Я понял. У меня была ошибка в моем шаблоне формирования облака, который создавал экземпляры EC2. В результате экземпляры EC2, которые пытались получить доступ к вышеуказанным ведрам развертывания кода, находились в разных регионах (не us-west-2). Похоже, что политики доступа к ведрам (принадлежащие Amazon) разрешают доступ только из региона, в котором они принадлежат. Когда я исправил ошибку в своем шаблоне (это была неправильная карта параметров), ошибка исчезла


я получал ошибку A client error (403) occurred when calling the HeadObject operation: Forbidden для моей команды копирования aws cli aws s3 cp s3://bucket/file file. Я использовал роль IAM, которая имела полный доступ S3, используя Inline Policy.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

если я дам ему полный доступ S3 из Managed Policies вместо этого команда работает. Я думаю, что это должно быть ошибка от Amazon, потому что политика в обоих случаях были одинаковы.


У меня была эта проблема, добавив --recursive команда поможет.

на данный момент это не совсем имеет смысл, поскольку вы (как и я) пытаетесь скопировать только один файл вниз, но это делает трюк!


одна из причин этого может быть, если вы попытаетесь получить доступ к ведрам области, которая требует подписи V4. Попробуйте явно указать регион, как --region cn-north-1


пытаясь решить эту проблему самостоятельно, я обнаружил, что нет разрешения HeadBucket. Похоже, что есть, потому что это то, что сообщает вам сообщение об ошибке, но на самом деле HEAD операция требует ListBucket разрешения. Я также обнаружил, что моя политика IAM и моя политика ведра противоречат друг другу. Убедитесь, что вы проверили оба.


в моем случае я получил эту ошибку, пытаясь получить объект в папке ведра S3. Но в этой папке мой объект не был здесь (я положил неправильную папку), поэтому S3 отправит это сообщение. Надеюсь, тебе это тоже поможет.


в моем случае проблема была Resource инструкция в политике доступа пользователя.

сначала "Resource": "arn:aws:s3:::BUCKET_NAME", но для того, чтобы иметь доступ к объектам, в ведро нужно /* в конце: "Resource": "arn:aws:s3:::BUCKET_NAME/*"


Я получил эту ошибку с неправильно настроенным тестовым событием. Я изменил исходные ведра ARN, но забыл изменить имя ведра S3 по умолчанию.

т. е. убедитесь, что в разделе "ведро" тестового события оба имени 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

вам не хватает HeadBucket разрешения.