API 게이트웨이 + HTTP 호스트 = X_forwarded_for 헤더 없음

5834 단어 apicloudflareaws

배경



REST API를 API Gateway에 배포할 때 헤더가 없는 문제HTTP_X_FORWARDED_FOR를 발견했습니다. 고객 IP 주소를 얻을 수 있는 방법이 없었기 때문에 보안 팀의 보안 문제였습니다.

x-amazon-apigateway-integration OpenAPI extension을 활용하여 API 최종 사용자에게 제공되는 API 문서에 추가 데이터를 추가합니다.

예시



다음은 단계 변수 URL을 사용하여 내부 백엔드에 액세스하는 매우 간단한 Open API 3.0 엔드포인트의 예입니다.

/products:
    summary: get all products
    get:
      summary: Retrieve all products
      responses:
        '200':
          description: No issues
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/products'
      x-amazon-apigateway-integration:
        type: http
        httpMethod: GET
        uri: https://${stageVariables.url}/products
        requestParameters:
          default:
            statusCode: 200


해결책



REST API를 배포할 때 아래와 같이 x-forwarded-for 헤더를 http 엔드포인트로 전달해야 합니다.

/products:
    summary: get all products
    get:
      summary: Retrieve all products
      responses:
        '200':
          description: No issues
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/products'
      x-amazon-apigateway-integration:
        type: http
        httpMethod: GET
        uri: https://${stageVariables.url}/products
        requestParameters:
          integration.request.header.x-forwarded-for: method.request.header.x-forwarded-for
          default:
            statusCode: 200
      parameters:
        - name: x-forwarded-for
          in: header
          required: true
          schema:
            type: string


다음 단계



우리의 x-amazon-API 게이트웨이 통합 문서는 계속 증가하고 있으므로 자동 배포 스크립트를 업데이트하여 이러한 일반 항목 대부분을 추가했습니다. 이는 특정 Amazon 문서 없이 문서를 깔끔하게 유지하는 데 도움이 됩니다.
현재 제품 끝점 사양의 예를 추가했습니다.

/products:
    summary: get all products
    get:
      summary: Retrieve all products
      responses:
        '200':
          description: No issues
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/products'

좋은 웹페이지 즐겨찾기