2016-03-22 8 views
10

Sto provando a configurare un AMI Amazon Linux (ami-f0091d91) e uno script che esegue un comando di copia da copiare da un bucket S3 .AWS CLI S3 Si è verificato un errore del client (403) durante la chiamata all'operazione HeadObject: Forbidden

aws --debug s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm . 

Questo script funziona perfettamente sulla mia macchina locale, ma non riesce con il seguente errore sul Rio delle Amazzoni 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 

Tuttavia, quando ho eseguito con l'opzione --no-sign-request, funziona perfettamente:

aws --debug --no-sign-request s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm . 

Qualcuno può spiegare cosa sta succedendo?

+1

E * * Sembra che tu sei (forse implicitamente) utilizzando il ruolo IAM dell'istanza per fare la richiesta (questo spiegherebbe 'x-AMZ-sicurezza-token' - le credenziali temporanee dal ruolo) e il vostro ruolo nega l'accesso a S3 ... o il secchio (non il tuo, lo prendo?) non consente l'accesso con le credenziali - anche se è pubblico, è strano. Come sempre, assicurati che il tuo orologio di sistema sia corretto, poiché con 'HEAD' il corpo dell'errore viene sempre soppresso. –

+0

Ciao, grazie per la rapida risposta. Il secchio che sto tentando di accedere è, in effetti, pubblico. Non sono sicuro del motivo per cui si lamenta di una richiesta firmata. Fallisce con errore simile anche sul mio bucket senza l'opzione --no-sign-request. – MojoJojo

+0

Si dispone di un ruolo IAM su questa istanza, giusto? Sembra che questo ruolo possa limitare le cose, forse in modi inaspettati. –

risposta

3

L'ho capito. Ho avuto un errore nel mio modello di formazione cloud che stava creando le istanze EC2. Di conseguenza, le istanze EC2 che stavano tentando di accedere al codice precedente distribuiscono i bucket, erano in regioni diverse (non us-west-2). Sembra che le politiche di accesso sui bucket (di proprietà di Amazon) consentano l'accesso solo dalla regione di appartenenza. Quando ho corretto l'errore nel mio modello (era una mappa dei parametri errata), l'errore era scomparso

+0

Hai scritto: "i criteri di accesso sui bucket (di proprietà di Amazon) consentono solo l'accesso dalla regione di appartenenza." I secchi non "appartengono ad una regione". Sono globali. Vorrei aver capito cosa ha riparato il tuo errore. – LeslieK

+1

I bucket in realtà sono definiti in una regione. – dmohr

4

Ho ricevuto l'errore A client error (403) occurred when calling the HeadObject operation: Forbidden per il comando aws cli copy aws s3 cp s3://bucket/file file. Stavo usando un ruolo IAM che aveva accesso completo S3 usando un Inline Policy.

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

Se mi danno il pieno accesso S3 dalla Managed Policies invece, poi le opere di comando. Penso che questo debba essere un bug di Amazon, perché le politiche in entrambi i casi erano esattamente le stesse.

+0

Btw, stavo cercando di usare [Goofys] (https://github.com/kahing/goofys/) per montare un secchio S3 nel mio file system del server Ubuntu attraverso un utente IAM collegato a una politica simile al precedente ma con ' risorsa: "esempio" 'set (invece di' '*), e che ha causato l'impossibilità di creare file lì ([simile edizione] (https://github.com/kahing/goofys/issues/165)).L'ho appena modificato in 'managed policy' di' AmazonS3FullAccess' – shadi

-1

questo errore quando il bucket esisteva già. Quindi potresti provare a rinominare il bucket che stai tentando di creare.

2

Uno dei motivi potrebbe essere se si tenta di accedere ai bucket di un'area che richiede la firma V4. Prova a fornire esplicitamente la regione, come --region cn-north-1

1

Ho avuto questo problema, aggiungendo --recursive al comando sarà di aiuto.

A questo punto non ha proprio senso il fatto che tu (come me) stai solo provando a copiare un singolo file, ma fa il trucco!

+0

Sembrava successo ma il "file" scaricato localmente era in effetti una directory vuota – ozma

Problemi correlati