AWS CLI S3 une erreur client (403) est survenue lors de l'appel de L'opération HeadObject: Forbidden
j'essaie de configurer un AMI Linux Amazon(ami-f0091d91) et d'avoir un script qui exécute une commande de copie pour copier à partir d'un seau S3.
aws --debug s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
Ce script fonctionne parfaitement sur ma machine locale, mais échoue avec l'erreur suivante sur l'Amazone 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
Cependant, quand je le lance avec le --no-sign-request
option, il fonctionne parfaitement:
aws --debug --no-sign-request s3 cp s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.noarch.rpm .
quelqu'un Peut-il expliquer ce qui se passe?
10 réponses
j'ai pensé à elle. J'avais une erreur dans mon modèle de formation de nuage qui créait les instances EC2. Par conséquent, les instances EC2 qui tentaient d'accéder aux seaux de déploiement de code ci-dessus se trouvaient dans des régions différentes (et non pas à us-west-2). Il semble que les politiques d'accès sur les seaux (détenue par Amazon) ne permettre l'accès de la région ils appartiennent. Quand j'ai corrigé l'erreur dans mon template (c'était une erreur de paramétrage), l'erreur a disparu
j'obtenais l'erreur A client error (403) occurred when calling the HeadObject operation: Forbidden
pour ma commande aws cli copyaws s3 cp s3://bucket/file file
. J'ai été en utilisant un rôle IAM qui avait S3 complète de l'accès à l'aide d'un Inline Policy
.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
si je lui donne le plein accès S3 de la Managed Policies
à la place, la commande fonctionne. Je pense que cela doit être un bug D'Amazon, parce que les politiques dans les deux cas étaient exactement les mêmes.
j'ai eu ce problème, ajouter --recursive
pour la commande d'aide.
à ce stade, cela n'a pas tout à fait de sens puisque vous (comme moi) essayez seulement de copier un seul fichier vers le bas, mais cela fait l'affaire!
une des raisons de cela pourrait être si vous essayez d'accéder aux seaux d'une région qui nécessite la signature V4. Essayez de fournir explicitement la région, comme --region cn-north-1
en essayant de résoudre ce problème moi-même, j'ai découvert qu'il n'y a pas de permission de HeadBucket. Il semble que oui, parce que c'est ce que le message d'erreur vous dit, mais en fait le HEAD
opération nécessite l' ListBucket
permission.
J'ai aussi découvert que ma Politique de mie et ma Politique de seau étaient contradictoires. Assurez-vous de vérifier.
dans mon cas, j'ai eu cette erreur en essayant d'obtenir un objet sur un dossier S3 bucket. Mais dans ce dossier, mon objet n'était pas là (j'ai mis le mauvais dossier), donc S3 envoyer ce message. Espérons qu'il pourrait vous aider aussi.
dans mon cas, le problème était le Resource
énoncé dans la Politique d'accès de l'utilisateur.
nous avons d'Abord eu "Resource": "arn:aws:s3:::BUCKET_NAME"
,
mais afin d'avoir accès aux objets dans un seau vous avez besoin d'un /*
à la fin:
"Resource": "arn:aws:s3:::BUCKET_NAME/*"
j'ai eu cette erreur avec un événement de test mal configuré. J'ai changé l'ARN des seaux source mais j'ai oublié d'éditer le nom par défaut de S3.
C'est-à-dire. assurez-vous que dans la section bucket de l'événement test, le nom ARN et le nom bucket sont correctement définis:
"bucket": {
"arn": "arn:aws:s3:::your_bucket_name",
"name": "your_bucket_name",
"ownerIdentity": {
"principalId": "EXAMPLE"
}
je recevais ce message d'erreur parce que l'horloge de mon instance EC2 n'était pas synchronisée.
j'ai été en mesure de fixer sur Ubuntu à l'aide de ceci:
sudo ntpdate ntp.ubuntu.com
sudo apt-get install ntp