web-dev-qa-db-fra.com

Erreur AWS API Gateway: API Gateway n'a pas l'autorisation d'assumer le rôle fourni en tant que proxy S3

Il y a des questions similaires mais elles ont des réponses que j'ai essayées. Je ne sais pas ce que je pourrais faire de mal mais toute aide serait appréciée.

Détails du test: enter image description here

L'erreur d'un test d'exécution de méthode; Demande PUT:

Execution log for request test-request
Mon Oct 16 10:13:47 UTC 2017 : Starting execution for request: test-invoke-request
Mon Oct 16 10:13:47 UTC 2017 : HTTP Method: PUT, Resource Path: /pop-data-xmlz/test.xml
Mon Oct 16 10:13:47 UTC 2017 : Method request path: {item=test.xml, folder=pop-data-xmlz}
Mon Oct 16 10:13:47 UTC 2017 : Method request query string: {}
Mon Oct 16 10:13:47 UTC 2017 : Method request headers: {Content-Type=application/xml}
Mon Oct 16 10:13:47 UTC 2017 : Method request body before transformations: <test>
test string
</test>
Mon Oct 16 10:13:47 UTC 2017 : Request validation succeeded for content type application/json
Mon Oct 16 10:13:47 UTC 2017 : Execution failed due to configuration error: API Gateway does not have permission to assume the provided role
Mon Oct 16 10:13:47 UTC 2017 : Method completed with status: 500

Je suis le didacticiel de la passerelle API vers S3 ( http://docs.aws.Amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html ) et tenter d'exécuter une demande PUT.

La passerelle API se trouve dans us-east-1 et le compartiment S3 dans us-east-2.

Le rôle créé: APIGatewayProxyCustom

Une stratégie (pop-date-ingest) est jointe qui permet la demande PUT aux compartiments S3. enter image description here

Le rôle a une relation de confiance définie: enter image description here

19
Kurt Campher

Pour résoudre ce problème, accédez au rôle dans votre IAM et sélectionnez l'onglet "Trust Relationships". De là, modifiez la politique et pour le service principal, ajoutez "apigateway.amazonaws.com" comme indiqué ci-dessous. Cela accordera à la passerelle API la possibilité d'assumer des rôles pour exécuter votre fonction en plus de l'autorisation lambda existante.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": ["apigateway.amazonaws.com","lambda.amazonaws.com"]
},
"Action": "sts:AssumeRole"
}
]
}
42