swagger를 통해 API Gateway의 CORS를 설정합니다.
배경.
AWS S3 + API Gateway 조합을 사용하여 개인 웹 애플리케이션을 만들고 있습니다.
API Gateway 부분은 로컬 기기로 구축(AWS Outposts와 같은 서비스도 있음)할 수 없기 때문에 선행 개발에서 로컬에서 API Gateway에 접근하려고 한다.이때 필요한 것은 CORS 설정입니다.
AWS 콘솔에서 설정할 수도 있습니다.다만, API 부분은 스웨거로 설계돼 있어 스웨거에 지정하려고 했다.
구성도와 관련된 부분.
이 그림의 빨간색 부분.이렇게 되면 APIGateway에 액세스할 수 없습니다.상세한 내용은 여러분의 많은 지지를 바랍니다. 간단하게 말하면 이것은 다른 사이트에서 함부로 인용되는 것을 방지하는 구조라고 생각합니다(제 생각에는).S3의 정식 디버깅 상태에서 API와 static 자원은 클라우드 Front 필드로 변하기 때문에 문제가 없지만 로컬 개발의 경우 필드가 다르기 때문에 API에 접근할 수 없습니다.
(참고로 컬지령 등은 브라우저가 아닌 방법으로 접근할 수 있으며 CORS 설정이 없으면 안전하다고 할 수 없습니다.)
절차.
이 그림의 빨간색 부분.이렇게 되면 APIGateway에 액세스할 수 없습니다.상세한 내용은 여러분의 많은 지지를 바랍니다. 간단하게 말하면 이것은 다른 사이트에서 함부로 인용되는 것을 방지하는 구조라고 생각합니다(제 생각에는).S3의 정식 디버깅 상태에서 API와 static 자원은 클라우드 Front 필드로 변하기 때문에 문제가 없지만 로컬 개발의 경우 필드가 다르기 때문에 API에 접근할 수 없습니다.
(참고로 컬지령 등은 브라우저가 아닌 방법으로 접근할 수 있으며 CORS 설정이 없으면 안전하다고 할 수 없습니다.)
절차.
관문에서 대상을 선택하는 관문
리소스에서 대상 엔드포인트 선택
작업 단추에서 CORS 유효성 검사
디테일
3단계 수행 시 정보
Create OPTIONS method
Add 200 Method Response with Empty Response Model to OPTIONS method
Add Mock Integration to OPTIONS method
Add 200 Integration Response to OPTIONS method
Add Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin Method Response Headers to OPTIONS method
Add Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin Integration Response Header Mappings to OPTIONS method
Add Access-Control-Allow-Origin Method Response Header to GET method
Add Access-Control-Allow-Origin Integration Response Header Mapping to GET method
Add Access-Control-Allow-Origin Method Response Header to POST method
Add Access-Control-Allow-Origin Integration Response Header Mapping to POST method
간단하게 말하면 다음과 같은 처리를 한 것 같다.
Create OPTIONS method
Add 200 Method Response with Empty Response Model to OPTIONS method
Add Mock Integration to OPTIONS method
Add 200 Integration Response to OPTIONS method
Add Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin Method Response Headers to OPTIONS method
Add Access-Control-Allow-Headers, Access-Control-Allow-Methods, Access-Control-Allow-Origin Integration Response Header Mappings to OPTIONS method
Add Access-Control-Allow-Origin Method Response Header to GET method
Add Access-Control-Allow-Origin Integration Response Header Mapping to GET method
Add Access-Control-Allow-Origin Method Response Header to POST method
Add Access-Control-Allow-Origin Integration Response Header Mapping to POST method
실제의 차이
OPION 메소드 추가 섹션
options:
consumes:
- "application/json"
produces:
- "application/json"
responses:
200:
description: "200 response"
schema:
$ref: "#/definitions/Empty"
headers:
Access-Control-Allow-Origin:
type: "string"
Access-Control-Allow-Methods:
type: "string"
Access-Control-Allow-Headers:
type: "string"
x-amazon-apigateway-integration:
responses:
default:
statusCode: "200"
responseParameters:
method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS,POST'"
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-Origin: "'http://localhost:8080'"
requestTemplates:
application/json: "{\"statusCode\": 200}"
passthroughBehavior: "when_no_templates"
type: "mock"
●Allow-Origin 등 AWS 콘솔에서 살짝 건드린 부분도 있다.GET, POST 등 기존 방법에서 추가된 부분
responses:
200:
description: "200 response"
schema:
$ref: "#/definitions/Hogehoge"
# 以下部分が追加されました。
headers:
Access-Control-Allow-Origin:
type: "string"
Access-Control-Allow-Methods:
type: "string"
Access-Control-Allow-Headers:
type: "string"
/중략/ x-amazon-apigateway-integration:
uri: "arn:aws:apigateway:ap-northeast-1:lambda:path/2015-03-31/functions/arn:aws:lambda:ap-northeast-1:{ACCOUNT ID}:function:fugafuga-lambda-function/invocations"
responses:
default:
statusCode: "200"
# 以下部分が追加されました。
responseParameters:
method.response.header.Access-Control-Allow-Methods: "'GET,OPTIONS,POST'"
method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
method.response.header.Access-Control-Allow-Origin: "'http://localhost:8080'"
AWS 콘솔에서 각 단점, 각 방법의 방법으로 응답하는 200의 응답 헤드에 3개의 제목 설정(전자차)을 추가하고, 종합적으로 응답하는 200 응답의 설정 내 제목의 맵에 3개의 제목(후자차)을 추가한다.lambda 함수의 반환값에 헤더 정보 추가
APIGateway의 각 끝점 - 각 방법의 종합 요청에서 Lambda 프록시를 사용하여 병합하는 방법에서는 종합 응답을 설정할 수 없습니다.그 방법은 lambda에서 헤더를 지정해야 합니다.
return {
'statusCode': 200,
'body': json.dumps(ret, indent=0),
# この部分追加
'headers': {
'Access-Control-Allow-Headers' : 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
'Access-Control-Allow-Methods' : 'GET,OPTIONS,POST',
'Access-Control-Allow-Origin' : 'http://localhost:8080'
},
'isBase64Encoded': False
}
(2019-11-10 추기)참고 가치가 있는 사이트
AWS 공식 웹사이트 API Gateway REST API 리소스의 CORS 활성화
반성하다.
이 기사를 쓸 때 자세히 찾아보니 OpenAPI로 설명된 공식 사이트가 발견됐다.그리고 위에 링크 근처에 있습니다.
AWS 공식 웹사이트 API Gateway의 API 가져오기를 사용하여 리소스에서 CORS 활성화
항상 swagger를 지켜보고 있습니다. OpenAPI는 swagger의 확장판입니다. (혹은 업그레이드 후 이름이 바뀌었나요?)그래?
GitHub - OpenAPI Specification
그렇게 말하지만 방대한 공식 문서를 한 번 읽고 흡수할 수 있는 사람은 일부분에 불과하다.많은 사람들이 조금씩 이해 영역을 늘릴 때 공식 문서를 읽는다.묻힐까 고민도 해봤지만, 자신과 같은 사람에게 참고가 될 가능성이 크다고 생각해 투고했다.
Reference
이 문제에 관하여(swagger를 통해 API Gateway의 CORS를 설정합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/silverbox/items/43ecb047908a9580f7bd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이 기사를 쓸 때 자세히 찾아보니 OpenAPI로 설명된 공식 사이트가 발견됐다.그리고 위에 링크 근처에 있습니다.
AWS 공식 웹사이트 API Gateway의 API 가져오기를 사용하여 리소스에서 CORS 활성화
항상 swagger를 지켜보고 있습니다. OpenAPI는 swagger의 확장판입니다. (혹은 업그레이드 후 이름이 바뀌었나요?)그래?
GitHub - OpenAPI Specification
그렇게 말하지만 방대한 공식 문서를 한 번 읽고 흡수할 수 있는 사람은 일부분에 불과하다.많은 사람들이 조금씩 이해 영역을 늘릴 때 공식 문서를 읽는다.묻힐까 고민도 해봤지만, 자신과 같은 사람에게 참고가 될 가능성이 크다고 생각해 투고했다.
Reference
이 문제에 관하여(swagger를 통해 API Gateway의 CORS를 설정합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/silverbox/items/43ecb047908a9580f7bd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)