amazon web services - code - AWS CLI S3 Se produjo un error de cliente(403) al llamar a la operación HeadObject: Prohibido
s3 bucket policy public read (13)
En mi caso, recibí este error al intentar obtener un objeto en una carpeta de S3. Pero en esa carpeta mi objeto no estaba aquí (puse la carpeta incorrecta), por lo que S3 envía este mensaje. Espero que te pueda ayudar también.
Estoy tratando de configurar una AMI de Amazon Linux (ami-f0091d91) y tengo una secuencia de comandos que ejecuta un comando de copia para copiar desde un cubo S3.
aws --debug s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
Este script funciona perfectamente en mi máquina local pero falla con el siguiente error en la imagen de 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
Sin embargo, cuando lo ejecuto con la --no-sign-request
, funciona perfectamente:
aws --debug --no-sign-request s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
¿Alguien puede explicar qué está pasando?
Estaba recibiendo un 403 en solicitudes HEAD mientras que las solicitudes GET estaban funcionando. Resultó ser la configuración de CORS en los permisos s3. Tuve que agregar 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>
He tenido este problema, agregando --recursive
al comando ayudará.
En este punto, no tiene mucho sentido, ya que usted (como yo) solo está intentando copiar un solo archivo, ¡pero funciona!
Me lo imaginé. Tuve un error en mi plantilla de formación de nubes que estaba creando las instancias de EC2. Como resultado, las instancias de EC2 que intentaban acceder a los grupos de despliegue de código anteriores estaban en diferentes regiones (no en us-west-2). Parece que las políticas de acceso en los depósitos (propiedad de Amazon) solo permiten el acceso desde la región a la que pertenecen. Cuando solucioné el error en mi plantilla (era un mapa de parámetros incorrecto), el error desapareció.
Recibí este error con un evento de prueba mal configurado. Cambié el ARN de los depósitos de origen, pero olvidé editar el nombre predeterminado del depósito de S3.
Es decir, asegúrese de que en la sección de depósito del evento de prueba tanto el nombre de ARN como el de depósito estén configurados correctamente:
"bucket": {
"arn": "arn:aws:s3:::your_bucket_name",
"name": "your_bucket_name",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
Recibí este mensaje de error debido a que el reloj de mi instancia de EC2 no está sincronizado.
Pude arreglarlo en Ubuntu usando esto:
sudo ntpdate ntp.ubuntu.com
sudo apt-get install ntp
También experimenté ese comportamiento. En mi caso, he encontrado que si la política de IAM no tiene acceso para leer el objeto ( s3:GetObject
), s3:GetObject
el mismo error.
Estoy de acuerdo con usted en que el error provocado por aws console & cli no está realmente bien explicado y puede causar confusión.
También he experimentado este escenario.
Tengo un cubo con la política que utiliza AWS4-HMAC-SHA256. Resulta que mi awscli no está actualizado a la última versión. El mío fue aws-cli / 1.10.8. Actualizarlo ha resuelto el problema.
pip install awscli --upgrade --user
https://docs.aws.amazon.com/cli/latest/userguide/installing.html
Te estás perdiendo un permiso de HeadBucket .
Tratando de resolver este problema yo mismo, descubrí que no hay permiso de HeadBucket. Parece que hay, porque eso es lo que te dice el mensaje de error, pero en realidad la operación HEAD
requiere el permiso ListBucket
. También descubrí que mi política de IAM y mi política de depósito eran conflictivas. Asegúrate de revisar ambos.
Una de las razones para esto podría ser si intenta acceder a grupos de una región que requiere la firma V4. Trate de proporcionar explícitamente la región, como --region cn-north-1
en mi caso, el problema fue la declaración de Resource
en la política de acceso del usuario.
Primero tuvimos "Resource": "arn:aws:s3:::BUCKET_NAME"
, pero para tener acceso a los objetos dentro de un cubo, necesita un /*
al final: "Resource": "arn:aws:s3:::BUCKET_NAME/*"
A client error (403) occurred when calling the HeadObject operation: Forbidden
el error. A client error (403) occurred when calling the HeadObject operation: Forbidden
error de A client error (403) occurred when calling the HeadObject operation: Forbidden
para mi comando aws s3 cp s3://bucket/file file
cli copy aws s3 cp s3://bucket/file file
. Estaba usando un rol de IAM que tenía acceso completo a S3 usando una Inline Policy
.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
Si le doy el acceso completo a S3 desde las Managed Policies
, entonces el comando funciona. Creo que esto debe ser un error de Amazon, porque las políticas en ambos casos fueron exactamente las mismas.