AWS CLI S3 При вызове операции HeadObject произошла ошибка клиента (403): Запрещено
Я пытаюсь настроить AMI Amazon Linux (ami-f0091d91) и иметь script, который запускает команду копирования для копирования из ведра S3.
aws --debug s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
Этот script отлично работает на моем локальном компьютере, но с ошибкой 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 .
Может кто-нибудь объяснить, что происходит?
Ответы
Ответ 1
Я понял это. У меня была ошибка в моем шаблоне формирования облаков, который создавал экземпляры EC2. В результате экземпляры EC2, которые пытались получить доступ к указанным выше кодам, разворачивают ведра, находятся в разных регионах (не us-west-2). Похоже, что политики доступа на ведрах (принадлежащие Amazon) разрешают доступ только из региона, в котором они находятся.
Когда я исправил ошибку в моем шаблоне (это была неправильная карта параметров), ошибка исчезла
Ответ 2
в моем случае проблема заключалась в выражении Resource
в политике доступа пользователя.
Сначала у нас был "Resource": "arn:aws:s3:::BUCKET_NAME"
,
но для того, чтобы иметь доступ к объектам внутри корзины, вам нужен /*
в конце:
"Resource": "arn:aws:s3:::BUCKET_NAME/*"
Из документации AWS:
Права доступа к корзине указывают, каким пользователям разрешен доступ к объектам в корзине и какие типы доступа они имеют. Права доступа к объекту указывают, каким пользователям разрешен доступ к объекту и какие типы доступа они имеют. Например, у одного пользователя могут быть только права на чтение, а у другого - права на чтение и запись.
Ответ 3
Я получил ошибку 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, потому что политики в обоих случаях были точно такими же.
Ответ 4
Пытаясь решить эту проблему самостоятельно, я обнаружил, что нет разрешения HeadBucket. Похоже, что есть, потому что это то, что говорит вам сообщение об ошибке, но на самом деле операция HEAD
требует разрешения ListBucket
. Я также обнаружил, что моя политика IAM и моя политика корзины были противоречивы. Убедитесь, что вы проверите оба.
Ответ 5
Одна из причин этого может быть, если вы попытаетесь получить доступ к ведрам региона, для которого требуется V4-Signing. Попробуйте явно предоставить область, как --region cn-north-1
Ответ 6
У меня возникла проблема, добавив --recursive
в команду.
На данный момент это не совсем понятно, поскольку вы (как я) пытаетесь только скопировать один файл, но он делает трюк!
Ответ 7
В моем случае я получил эту ошибку, пытаясь получить объект в папке S3 Bucket. Но в этой папке моего объекта не было (я поставил не ту папку), поэтому S3 отправил это сообщение. Надеюсь, это может помочь вам тоже.
Ответ 8
Я получил эту ошибку с неправильно настроенным тестовым событием. Я изменил ARN сегментов источника, но забыл изменить имя сегмента S3 по умолчанию.
Т.е. убедитесь, что в разделе сегмента тестового события и ARN, и имя сегмента заданы правильно:
"bucket": {
"arn": "arn:aws:s3:::your_bucket_name",
"name": "your_bucket_name",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
Ответ 9
Я получаю это сообщение об ошибке из-за того, что часы моего экземпляра EC2 не синхронизированы.
Я смог исправить на Ubuntu, используя это:
sudo ntpdate ntp.ubuntu.com
sudo apt-get install ntp
Ответ 10
Я получал 403 на запросы HEAD, пока работали запросы GET. Оказалось, что это конфиг CORS в разрешениях s3. Я должен был добавить ГОЛОВУ
<?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>
Ответ 11
Я также испытал такое поведение. В моем случае я обнаружил, что если у политики IAM нет доступа для чтения объекта (s3:GetObject
), s3:GetObject
та же ошибка.
Я согласен с вами, что ошибка, возникшая в aws console & cli, не очень хорошо объяснена и может привести к путанице.
Ответ 12
Я также испытал этот сценарий.
У меня есть ведро с политикой, которая использует AWS4-HMAC-SHA256. Оказывается, мой awscli не обновляется до последней версии. У меня был aws-cli/1.10.8. Обновление решило проблему.
pip install awscli --upgrade --user
https://docs.aws.amazon.com/cli/latest/userguide/installing.html
Ответ 13
Я понял..
Проблема: "Ошибка загрузки скрипта: фатальная ошибка: при вызове операции HeadObject: Forbidden произошла ошибка (403)", я попытался запустить задание Glue ETL, которое обращается к S3.
Примечание. Файл S3 копируется из той же учетной записи, доступ к нему из того же региона и учетной записи, что и задание на клей.
Решение: Когда я использую Политику AWSGlueServiceRole по умолчанию, моя работа была успешной, но когда я создал свою собственную Политику и такую же, как политика по умолчанию, но изменил ARN, специфичные для моего сегмента и учетной записи, она выдавала ошибку выше. После 48 часов Trail и ошибок я понял, что мы должны использовать определенный регион, как показано ниже. Я вставляю блок json, который разрешил вышеуказанную ошибку.
{"Sid": "VisualEditor1", "Effect": "Allow", "Action": ["s3: CreateBucket", "s3: ListBucket", "s3: GetBucketAcl", "s3: GetBucketLocation", "glue:" ], "Resource": ["arn: aws: glue: ap-south-1:123456788768: каталог /", "arn: aws: s3: bucketXYZ"]}
Вы можете взять JSON политики по умолчанию и изменить ресурсы (регион, область, каталог и т.д.) S3, EC2 и Glue
Ответ 14
Если вы работаете в среде, где учетные данные/роль не ясны, убедитесь, что вы включили --profile=yourprofile
чтобы клиент знал, какие учетные данные использовать. Например:
aws s3 cp s3://yourbucket destination.txt --profile=yourprofile
будет успешным, в то время как следующее привело к ошибке HeadObject
aws s3 cp s3://yourbucket destination.txt
В настройках профиля указаны записи в файлах config
и credentials
данных.
Ответ 15
Я получил эту ошибку, когда ведро уже существовало. Поэтому вы можете попробовать переименовать созданное вами ведро.
Ответ 16
Это связано с не авторизованным доступом к корзине. Вы должны перенастроить так:
aws configure
введите свой ключ доступа и секретный ключ доступа. Затем задайте имя региона по умолчанию, такое же, как и область сегмента.
Это будет работать.
Ответ 17
Вам не хватает разрешения HeadBucket.