web-dev-qa-db-fra.com

Activer le modèle CORS pour API Gateway dans Cloudformation

Je crée un modèle AWS Cloudformation pour mon environnement et je ne trouve pas de moyen d'activer la méthode CORS for API Gateway.

Je peux le configurer à l'aide de la console AWS ( voici le document officiel ), mais comment puis-je le faire dans le modèle Cloudformation?

14
dds

Après quelques essais et erreurs, j'ai constaté que l'extrait de modèle CloudFormation suivant produirait une méthode OPTIONS équivalente par rapport à l'assistant de la console CORS:

OptionsMethod:
  Type: AWS::ApiGateway::Method
  Properties:
    AuthorizationType: NONE
    RestApiId:
      Ref: MyApi
    ResourceId:
      Ref: MyResourceOnWhichToEnableCORS
    HttpMethod: OPTIONS
    Integration:
      IntegrationResponses:
      - StatusCode: 200
        ResponseParameters:
          method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
          method.response.header.Access-Control-Allow-Methods: "'POST,OPTIONS'"
          method.response.header.Access-Control-Allow-Origin: "'*'"
        ResponseTemplates:
          application/json: ''
      PassthroughBehavior: WHEN_NO_MATCH
      RequestTemplates:
        application/json: '{"statusCode": 200}'
      Type: MOCK
    MethodResponses:
    - StatusCode: 200
      ResponseModels:
        application/json: 'Empty'
      ResponseParameters:
          method.response.header.Access-Control-Allow-Headers: false
          method.response.header.Access-Control-Allow-Methods: false
          method.response.header.Access-Control-Allow-Origin: false

* Note 1: Ceci est un exemple de prise de valeurs par défaut pour un POST. De toute évidence, vous devrez mettre à jour Access-Control-Allow-Methods pour inclure les valeurs dont vous avez besoin.

* Remarque 2: félicitations à l'équipe AWS CloudFormation pour avoir récemment introduit la prise en charge de YAML. Si vous avez besoin de convertir en/de YAML/JSON, j'ai trouvé ce site pratique: http://www.json2yaml.com/

29
dannymac

La prise en charge de la passerelle API pour la configuration CORS automatique ne fonctionne actuellement que via la console API Gateway. Vous pouvez toujours configurer CORS vous-même lors de l'importation d'une API à partir de swagger ou lors de la définition d'une API via CloudFormation, mais vous devez spécifier tous les paramètres pour configurer la méthode OPTIONS et ajouter les en-têtes spécifiques à CORS à vos autres méthodes.

Cette page montre comment configurer CORS lors de l'importation de swagger. Configurer CORS via CloudFormation est conceptuellement similaire, mais utilise la syntaxe CloudFormation plutôt que la syntaxe swagger.

2
MikeD at AWS

il ne reste que la méthode d’option de création, il reste encore du travail à faire sur les réponses GET, POST, etc.

https://github.com/seraphjiang/aws-cors-cloudformation/tree/master

1
Huan Jiang

Essaye ça: 

  OPTIONS: 
   Type: AWS::ApiGateway::Method 
   Properties: ApiKeyRequired: false
   RestApiId: !Ref YourAPI 
   ResourceId: !Ref YourResourceName 
   HttpMethod: OPTIONS 
   AuthorizationType: NONE 
   Integration: 
    Type: MOCK 
    IntegrationResponses: 
     - StatusCode: 200 
     ResponseParameters: 
      method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'" 
      method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS'" 
      method.response.header.Access-Control-Allow-Origin: "'*'" 
     ResponseTemplates: 
      application/json: '' 
    PassthroughBehavior: WHEN_NO_MATCH 
    RequestTemplates: 
     application/json: '{"statusCode": 200}' 
    Type: MOCK 
   MethodResponses: 
   - StatusCode: 200 
   ResponseModels: 
    application/json: 'Empty' 
   ResponseParameters: 
    method.response.header.Access-Control-Allow-Headers: false 
    method.response.header.Access-Control-Allow-Methods: false 
    method.response.header.Access-Control-Allow-Origin: false
0
Anoop