Edge Microgateway의 작업 및 구성 참조

Apigee Edge 문서입니다.
Apigee X 문서로 이동
정보

Edge Microgateway v. 3.3.x

이 주제에서는 Edge Microgateway를 관리하고 구성하는 방법을 설명합니다.

인터넷에 연결된 경우 Edge Microgateway 업그레이드

이 섹션에서는 Edge Microgateway의 기존 설치를 업그레이드하는 방법을 설명합니다. 인터넷에 연결되어 있지 않은 경우 인터넷 연결 없이 Edge Microgateway를 설치할 수 있나요?를 참고하세요.

Apigee는 프로덕션 환경을 업그레이드하기 전에 새 버전으로 기존 구성을 테스트하는 것이 좋습니다.

  1. 다음 npm 명령어를 실행하여 최신 버전의 Edge Microgateway로 업그레이드합니다.
    npm upgrade edgemicro -g

    특정 버전의 Edge Microgateway를 설치하려면 설치 명령어에 버전 번호를 지정해야 합니다. 예를 들어 버전 3.2.3으로 설치하려면 다음 명령어를 사용합니다.

    npm install edgemicro@3.2.3 -g
  2. 버전 번호를 확인합니다. 예를 들어 버전 3.2.3을 설치한 경우:
    edgemicro --version
    current nodejs version is v12.5.0
    current edgemicro version is 3.2.3
        
  3. 마지막으로 edgemicro-auth 프록시를 최신 버전으로 업그레이드합니다.
    edgemicro upgradeauth -o $ORG -e $ENV -u $USERNAME

구성 변경

알아야 하는 구성 파일은 다음과 같습니다.

  • 기본 시스템 구성 파일
  • 새로 초기화된 Edge Microgateway 인스턴스의 기본 구성 파일
  • 실행 중인 인스턴스의 동적 구성 파일

이 섹션에서는 이러한 파일과 파일 변경에 관해 알아야 할 사항을 설명합니다.

기본 시스템 구성 파일

Edge Microgateway를 설치하면 기본 시스템 구성 파일이 여기에 배치됩니다.

prefix/lib/node_modules/edgemicro/config/default.yaml

여기서 prefixnpm 접두사 디렉터리입니다. 이 디렉터리를 찾을 수 없는 경우 Edge Microgateway가 설치된 위치를 참고하세요.

시스템 구성 파일을 변경하는 경우 Edge Microgateway를 다시 초기화, 재구성, 다시 시작해야 합니다.

edgemicro init
edgemicro configure [params]
edgemicro start [params]

새로 초기화된 Edge Microgateway 인스턴스의 기본 구성 파일

edgemicro init를 실행하면 위에서 설명한 시스템 구성 파일 default.yaml~/.edgemicro 디렉터리에 배치됩니다.

~/.edgemicro에서 구성 파일을 변경하는 경우 Edge Microgateway를 재구성하고 다시 시작해야 합니다.

edgemicro stop
edgemicro configure [params]
edgemicro start [params]

실행 중인 인스턴스의 동적 구성 파일

edgemicro configure [params]를 실행하면 ~/.edgemicro에 동적 구성 파일이 생성됩니다. 파일 이름은 org-env-config.yaml 패턴에 따라 지정되며 여기서 orgenv는 Apigee Edge 조직 및 환경 이름입니다. 이 파일을 사용하여 구성을 변경한 후 다운타임 없이 다시 로드할 수 있습니다. 예를 들어 플러그인을 추가하고 구성하는 경우 아래에 설명된 대로 다운타임 없이 구성을 새로고침할 수 있습니다.

Edge Microgateway가 실행 중인 경우 (다운타임 0인 옵션):

  1. Edge Microgateway 구성을 새로고침합니다.
    edgemicro reload -o $ORG -e $ENV -k $KEY -s $SECRET

    각 항목의 의미는 다음과 같습니다.

    • $ORG는 Edge 조직 이름입니다 (조직 관리자여야 함).
    • $ENV는 조직의 환경 (예: 'test' 또는 'prod')입니다.
    • $KEY는 이전에 configure 명령어에서 반환된 키입니다.
    • $SECRET는 이전에 configure 명령어에서 반환된 키입니다.

    예:

    edgemicro reload -o docs -e test -k 701e70ee718ce6dc188...78b6181d000723 \
      -s 05c14356e42ed1...4e34ab0cc824

Edge Microgateway가 중지된 경우:

  1. Edge Microgateway를 다시 시작합니다.
    edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET

    각 항목의 의미는 다음과 같습니다.

    • $ORG는 Edge 조직 이름입니다 (조직 관리자여야 함).
    • $ENV는 조직의 환경 (예: 'test' 또는 'prod')입니다.
    • $KEY는 이전에 configure 명령어에서 반환된 키입니다.
    • $SECRET는 이전에 configure 명령어에서 반환된 키입니다.

    예를 들면 다음과 같습니다.

    edgemicro start -o docs -e test -k 701e70ee718ce...b6181d000723 \
      -s 05c1435...e34ab0cc824

다음은 구성 파일의 예입니다. 구성 파일 설정에 관한 자세한 내용은 Edge Microgateway 구성 참조를 참고하세요.

edge_config:
  bootstrap: >-
    https://edgemicroservices-us-east-1.apigee.net/edgemicro/bootstrap/organization/docs/environment/test
  jwt_public_key: 'https://docs-test.apigee.net/edgemicro-auth/publicKey'
  managementUri: 'https://api.enterprise.apigee.com'
  vaultName: microgateway
  authUri: 'https://%s-%s.apigee.net/edgemicro-auth'
  baseUri: >-
    https://edgemicroservices.apigee.net/edgemicro/%s/organization/%s/environment/%s
  bootstrapMessage: Please copy the following property to the edge micro agent config
  keySecretMessage: The following credentials are required to start edge micro
  products: 'https://docs-test.apigee.net/edgemicro-auth/products'
edgemicro:
  port: 8000
  max_connections: 1000
  max_connections_hard: 5000
  config_change_poll_interval: 600
  logging:
    level: error
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24
  plugins:
    sequence:
      - oauth
headers:
  x-forwarded-for: true
  x-forwarded-host: true
  x-request-id: true
  x-response-time: true
  via: true
oauth:
  allowNoAuthorization: false
  allowInvalidAuthorization: false
  verify_api_key_url: 'https://docs-test.apigee.net/edgemicro-auth/verifyApiKey'
analytics:
  uri: >-
    https://edgemicroservices-us-east-1.apigee.net/edgemicro/axpublisher/organization/docs/environment/test

환경 변수 설정

Edge 조직 및 환경의 값이 필요한 명령줄 인터페이스 명령어와 Edge Microgateway를 시작하는 데 필요한 키 및 비밀은 다음 환경 변수에 저장할 수 있습니다.

  • EDGEMICRO_ORG
  • EDGEMICRO_ENV
  • EDGEMICRO_KEY
  • EDGEMICRO_SECRET

이러한 변수를 설정하는 것은 선택사항입니다. 이러한 값을 설정하면 명령줄 인터페이스 (CLI)를 사용하여 Edge Microgateway를 구성하고 시작할 때 값을 지정할 필요가 없습니다.

Edge Microgateway 서버에서 SSL 구성

Apigee Edge Microgateway에서 TLS를 구성하는 방법을 알아보려면 다음 동영상을 시청하세요.

동영상 설명
단방향 Northbound TLS 구성 Apigee Edge Microgateway에서 TLS를 구성하는 방법을 알아보세요. 이 동영상에서는 TLS 및 그 중요성에 관한 개요를 제공하고 Edge Microgateway의 TLS를 소개하며, 업스트림 단방향 TLS를 구성하는 방법을 보여줍니다.
양방향 Northbound TLS 구성 Apigee Edge Microgateway에서 TLS를 구성하는 방법을 보여주는 두 번째 동영상입니다. 이 동영상에서는 업스트림 양방향 TLS를 구성하는 방법을 설명합니다.
단방향 및 양방향 남방향 TLS 구성 Apigee Edge Microgateway에서 TLS를 구성하는 방법을 다루는 세 번째 동영상에서는 업스트림 단방향 및 양방향 TLS를 구성하는 방법을 설명합니다.

SSL을 사용하도록 Microgateway 서버를 구성할 수 있습니다. 예를 들어 SSL이 구성된 경우 다음과 같이 'https' 프로토콜을 사용하여 Edge Microgateway를 통해 API를 호출할 수 있습니다.

https://localhost:8000/myapi

Microgateway 서버에서 SSL을 구성하려면 다음 단계를 따르세요.

  1. openssl 유틸리티 또는 원하는 다른 방법을 사용하여 SSL 인증서 및 키를 생성하거나 가져옵니다.
  2. Edge Microgateway 구성 파일edgemicro:ssl 속성을 추가합니다. 전체 옵션 목록은 아래 표를 참고하세요. 예:
    edgemicro:
      ssl:
       key: <absolute path to the SSL key file>
       cert: <absolute path to the SSL cert file>
       passphrase: admin123 #option added in v2.2.2
       rejectUnauthorized: true #option added in v2.2.2
       requestCert: true
  3. Edge Microgateway를 다시 시작합니다. 수정한 구성 파일(기본 파일 또는 런타임 구성 파일)에 따라 구성 변경에 설명된 단계를 따릅니다.

다음은 SSL이 구성된 구성 파일의 edgemicro 섹션 예입니다.

edgemicro:
  port: 8000
  max_connections: 1000
  max_connections_hard: 5000
  logging:
    level: error
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24
  plugins:
    sequence:
      - oauth
  ssl:
    key: /MyHome/SSL/em-ssl-keys/server.key
    cert: /MyHome/SSL/em-ssl-keys/server.crt
    passphrase: admin123 #option added in v2.2.2
    rejectUnauthorized: true #option added in v2.2.2

다음은 지원되는 모든 서버 옵션 목록입니다.

옵션 설명
key ca.key 파일의 경로 (PEM 형식)입니다.
cert ca.cert 파일의 경로 (PEM 형식)입니다.
pfx 클라이언트의 비공개 키, 인증서, CA 인증서가 PFX 형식으로 포함된 pfx 파일의 경로입니다.
passphrase 비공개 키 또는 PFX의 암호가 포함된 문자열입니다.
ca PEM 형식의 신뢰할 수 있는 인증서 목록이 포함된 파일의 경로입니다.
ciphers 사용할 암호화 알고리즘을 ':'로 구분하여 설명하는 문자열입니다.
rejectUnauthorized true인 경우 서버 인증서가 제공된 CA 목록과 비교하여 확인됩니다. 확인에 실패하면 오류가 반환됩니다.
secureProtocol 사용할 SSL 메서드입니다. 예를 들어 SSLv3_method는 SSL을 버전 3으로 강제합니다.
servername SNI (서버 이름 표시) TLS 확장 프로그램의 서버 이름입니다.
requestCert 양방향 SSL의 경우 true, 단방향 SSL의 경우 false

클라이언트 SSL/TLS 옵션 사용

대상 엔드포인트에 연결할 때 Edge Microgateway를 TLS 또는 SSL 클라이언트로 구성할 수 있습니다. Microgateway 구성 파일에서 targets 요소를 사용하여 SSL/TLS 옵션을 설정합니다. 특정 타겟을 여러 개 지정할 수 있습니다. 아래에 다중 타겟 예가 포함되어 있습니다.

이 예에서는 모든 호스트에 적용할 설정을 제공합니다.

edgemicro:
...
targets:
  ssl:
    client:
      key: /Users/jdoe/nodecellar/twowayssl/ssl/client.key
      cert: /Users/jdoe/nodecellar/twowayssl/ssl/ca.crt
      passphrase: admin123
      rejectUnauthorized: true

이 예에서는 설정이 지정된 호스트에만 적용됩니다.

edgemicro:
...
targets:
  - host: 'myserver.example.com'
    ssl:
      client:
        key: /Users/myname/twowayssl/ssl/client.key
        cert: /Users/myname/twowayssl/ssl/ca.crt
        passphrase: admin123
        rejectUnauthorized: true

TLS의 예는 다음과 같습니다.

edgemicro:
...
targets:
  - host: 'myserver.example.com'
    tls:
      client:
        pfx: /Users/myname/twowayssl/ssl/client.pfx
        passphrase: admin123
        rejectUnauthorized: true

여러 특정 타겟에 TLS/SSL 설정을 적용하려면 구성에서 첫 번째 호스트를 '비어 있음'으로 지정하여 범용 요청을 사용 설정한 다음 특정 호스트를 임의의 순서로 지정해야 합니다. 이 예에서는 설정이 여러 특정 호스트에 적용됩니다.

targets:
 - host:   ## Note that this value must be "empty"
   ssl:
     client:
       key: /Users/myname/twowayssl/ssl/client.key
       cert: /Users/myname/twowayssl/ssl/ca.crt
       passphrase: admin123
       rejectUnauthorized: true
 - host: 'myserver1.example.com'
   ssl:
     client:
       key: /Users/myname/twowayssl/ssl/client.key
       cert: /Users/myname/twowayssl/ssl/ca.crt
       rejectUnauthorized: true
 - host: 'myserver2.example.com'
   ssl:
     client:
       key: /Users/myname/twowayssl/ssl/client.key
       cert: /Users/myname/twowayssl/ssl/ca.crt
       rejectUnauthorized: true

다음은 지원되는 모든 클라이언트 옵션 목록입니다.

옵션 설명
pfx 클라이언트의 비공개 키, 인증서, CA 인증서가 PFX 형식으로 포함된 pfx 파일의 경로입니다.
key ca.key 파일의 경로 (PEM 형식)입니다.
passphrase 비공개 키 또는 PFX의 암호가 포함된 문자열입니다.
cert ca.cert 파일의 경로 (PEM 형식)입니다.
ca PEM 형식의 신뢰할 수 있는 인증서 목록이 포함된 파일의 경로입니다.
ciphers 사용할 암호화 알고리즘을 ':'로 구분하여 설명하는 문자열입니다.
rejectUnauthorized true인 경우 서버 인증서가 제공된 CA 목록과 비교하여 확인됩니다. 확인에 실패하면 오류가 반환됩니다.
secureProtocol 사용할 SSL 메서드입니다. 예를 들어 SSLv3_method는 SSL을 버전 3으로 강제합니다.
servername SNI (서버 이름 표시) TLS 확장 프로그램의 서버 이름입니다.

edgemicro-auth 프록시 맞춤설정

기본적으로 Edge Microgateway는 OAuth2 인증을 위해 Apigee Edge에 배포된 프록시를 사용합니다. 이 프록시는 edgemicro configure를 처음 실행할 때 배포됩니다. 이 프록시의 기본 구성을 변경하여 JSON 웹 토큰(JWT)에 맞춤 클레임 지원을 추가하고, 토큰 만료를 구성하고, 새로고침 토큰을 생성할 수 있습니다. 자세한 내용은 GitHub의 edgemicro-auth 페이지를 참고하세요.

맞춤 인증 서비스 사용

기본적으로 Edge Microgateway는 OAuth2 인증을 위해 Apigee Edge에 배포된 프록시를 사용합니다. 이 프록시는 edgemicro configure를 처음 실행할 때 배포됩니다. 기본적으로 이 프록시의 URL은 Edge Microgateway 구성 파일에 다음과 같이 지정됩니다.

authUri: https://myorg-myenv.apigee.net/edgemicro-auth

자체 맞춤 서비스를 사용하여 인증을 처리하려면 구성 파일에서 authUri 값을 서비스로 가리키도록 변경합니다. 예를 들어 LDAP를 사용하여 ID를 확인하는 서비스가 있을 수 있습니다.

로그 파일 관리

Edge Microgateway는 각 요청과 응답에 대한 정보를 로깅합니다. 로그 파일은 디버깅 및 문제 해결에 유용한 정보를 제공합니다.

로그 파일 저장 위치

기본적으로 로그 파일은 /var/tmp에 저장됩니다.

기본 로그 파일 디렉터리를 변경하는 방법

로그 파일이 저장되는 디렉터리는 Edge Microgateway 구성 파일에 지정됩니다. 구성 변경도 참고하세요.

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

dir 값을 변경하여 다른 로그 파일 디렉터리를 지정합니다.

콘솔에 로그 전송

로그 정보가 로그 파일 대신 표준 출력으로 전송되도록 로깅을 구성할 수 있습니다. 다음과 같이 to_console 플래그를 true로 설정합니다.

edgemicro:
  logging:
    to_console: true

이 설정을 사용하면 로그가 표준 출력으로 전송됩니다. 현재 stdout과 로그 파일 모두에 로그를 전송할 수 없습니다.

로깅 수준을 설정하는 방법

edgemicro 구성에서 사용할 로그 수준을 지정합니다. 로그 수준 및 설명의 전체 목록은 edgemicro 속성을 참고하세요.

예를 들어 다음 구성은 로깅 수준을 debug로 설정합니다.

edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: debug
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

로그 간격을 변경하는 방법

이러한 간격은 Edge Microgateway 구성 파일에서 구성할 수 있습니다. 구성 변경도 참고하세요.

구성 가능한 속성은 다음과 같습니다.

  • stats_log_interval: (기본값: 60) 통계 레코드가 API 로그 파일에 기록되는 간격(초)입니다.
  • rotate_interval: (기본값: 24) 로그 파일이 순환되는 간격(시간)입니다. 예를 들면 다음과 같습니다.
edgemicro:
  home: ../gateway
  port: 8000
  max_connections: -1
  max_connections_hard: -1
  logging:
    level: info
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

엄격한 로그 파일 권한을 완화하는 방법

기본적으로 Edge Microgateway는 파일 권한 수준이 0600으로 설정된 애플리케이션 로그 파일 (api-log.log)을 생성합니다. 이 권한 수준에서는 외부 애플리케이션이나 사용자가 로그 파일을 읽을 수 없습니다. 이 엄격한 권한 수준을 완화하려면 logging:disableStrictLogFiletrue로 설정합니다. 이 속성이 true이면 로그 파일이 파일 권한이 0755로 설정된 상태로 생성됩니다. false이거나 속성이 제공되지 않으면 권한 기본값은 0600입니다.

v3.2.3에서 추가되었습니다.

예:

edgemicro:
 logging:
   disableStrictLogFile: true

올바른 로그 파일 유지보수 관행

시간이 지남에 따라 로그 파일 데이터가 누적되므로 Apigee에서는 다음과 같은 관행을 채택하는 것이 좋습니다.

  • 로그 파일은 상당히 커질 수 있으므로 로그 파일 디렉터리에 충분한 공간이 있는지 확인합니다. 로그 파일이 저장되는 위치기본 로그 파일 디렉터리를 변경하는 방법 섹션을 참고하세요.
  • 일주일에 한 번 이상 로그 파일을 삭제하거나 별도의 보관 파일 디렉터리로 이동합니다.
  • 로그를 삭제하는 정책인 경우 CLI 명령어 edgemicro log -c를 사용하여 이전 로그를 삭제 (정리)할 수 있습니다.

로그 파일 이름 지정 규칙

각 Edge Microgateway 인스턴스는 .log 확장자가 있는 로그 파일을 생성합니다. 로그 파일의 명명 규칙은 다음과 같습니다.

edgemicro-HOST_NAME-INSTANCE_ID-api.log

예:

edgemicro-mymachine-local-MTQzNTgNDMxODAyMQ-api.log

로그 파일 콘텐츠 정보

추가된 버전: v2.3.3

기본적으로 로깅 서비스는 다운로드된 프록시, 제품, JSON 웹 토큰 (JWT)의 JSON을 생략합니다. 이러한 객체를 콘솔에 출력하려면 Edge Microgateway를 시작할 때 명령줄 플래그 DEBUG=*를 설정하세요. 예를 들면 다음과 같습니다.

DEBUG=* edgemicro start -o docs -e test -k abc123 -s xyz456

'api' 로그 파일의 콘텐츠

'api' 로그 파일에는 Edge Microgateway를 통한 요청 및 응답 흐름에 관한 자세한 정보가 포함되어 있습니다. 'api' 로그 파일의 이름은 다음과 같습니다.

edgemicro-mymachine-local-MTQzNjIxOTk0NzY0Nw-api.log

Edge Microgateway에 이루어진 각 요청에 대해 'api' 로그 파일에 4개의 이벤트가 캡처됩니다.

  • 클라이언트의 수신 요청
  • 대상에 대한 발신 요청
  • 대상에서 수신되는 응답
  • 클라이언트로 전송되는 응답

이러한 각 항목은 로그 파일을 더 컴팩트하게 만드는 데 도움이 되도록 약어로 표시됩니다. 다음은 4가지 이벤트를 각각 나타내는 4개의 샘플 항목입니다. 로그 파일에서는 다음과 같이 표시됩니다 (줄 번호는 문서의 참조용이며 로그 파일에는 표시되지 않음).

(1) 1436403888651 info req m=GET, u=/, h=localhost:8000, r=::1:59715, i=0
(2) 1436403888665 info treq m=GET, u=/, h=127.0.0.18080, i=0
(3) 1436403888672 info tres s=200, d=7, i=0
(4) 1436403888676 info res s=200, d=11, i=0

하나씩 살펴보겠습니다.

1. 클라이언트의 수신 요청 샘플:

1436403888651 info req m=GET, u=/, h=localhost:8000, r=::1:59715, i=0
  • 1436403888651 - Unix 날짜 스탬프
  • info - 로깅 수준입니다. 이 값은 트랜잭션 컨텍스트와 edgemicro 구성에서 설정된 로깅 수준에 따라 다릅니다. 로깅 수준을 설정하는 방법을 참고하세요. 통계 레코드의 경우 수준이 stats로 설정됩니다. 통계 레코드는 stats_log_interval 구성으로 설정된 정기 간격으로 보고됩니다. 로그 간격을 변경하는 방법도 참고하세요.
  • req: 이벤트를 식별합니다. 이 경우 클라이언트에서 요청합니다.
  • m - 요청에 사용된 HTTP 동사입니다.
  • u - basepath 뒤에 오는 URL의 부분입니다.
  • h - Edge Microgateway가 리슨하는 호스트 및 포트 번호입니다.
  • r - 클라이언트 요청이 시작된 원격 호스트 및 포트입니다.
  • i - 요청 ID입니다. 네 개의 이벤트 항목 모두 이 ID를 공유합니다. 각 요청에는 고유한 요청 ID가 할당됩니다. 요청 ID별로 로그 레코드를 상관시키면 타겟의 지연 시간에 관한 유용한 정보를 얻을 수 있습니다.
  • d - Edge Microgateway에서 요청을 수신한 후 경과한 시간(밀리초)입니다. 위 예에서 요청 0에 대한 타겟의 응답은 7밀리초 후에 수신되었고 (3행), 응답은 4밀리초 후에 클라이언트로 전송되었습니다 (4행). 즉, 총 요청 지연 시간은 11밀리초였으며 이 중 7밀리초는 대상에서, 4밀리초는 Edge Microgateway에서 소요되었습니다.

2. 타겟에 전송된 발신 요청 샘플:

1436403888665 info treq m=GET, u=/, h=127.0.0.1:8080, i=0
  • 1436403888651 - Unix 날짜 스탬프
  • info - 로깅 수준입니다. 이 값은 트랜잭션 컨텍스트와 edgemicro 구성에서 설정된 로깅 수준에 따라 다릅니다. 로깅 수준을 설정하는 방법을 참고하세요. 통계 레코드의 경우 수준이 stats로 설정됩니다. 통계 레코드는 stats_log_interval 구성으로 설정된 정기 간격으로 보고됩니다. 로그 간격을 변경하는 방법도 참고하세요.
  • treq: 이벤트를 식별합니다. 이 경우 타겟 요청입니다.
  • m - 타겟 요청에 사용된 HTTP 동사입니다.
  • u - basepath 뒤에 오는 URL의 부분입니다.
  • h - 백엔드 타겟의 호스트 및 포트 번호입니다.
  • i - 로그 항목의 ID입니다. 네 개의 이벤트 항목 모두 이 ID를 공유합니다.

3. 대상에서 수신되는 응답 샘플

1436403888672 info tres s=200, d=7, i=0

1436403888651 - Unix 날짜 스탬프

  • info - 로깅 수준입니다. 이 값은 트랜잭션 컨텍스트와 edgemicro 구성에서 설정된 로깅 수준에 따라 다릅니다. 로깅 수준을 설정하는 방법을 참고하세요. 통계 레코드의 경우 수준이 stats로 설정됩니다. 통계 레코드는 stats_log_interval 구성으로 설정된 정기 간격으로 보고됩니다. 로그 간격을 변경하는 방법도 참고하세요.
  • tres: 이벤트를 식별합니다. 이 경우 타겟 응답입니다.
  • s - HTTP 응답 상태입니다.
  • d - 재생 시간(밀리초)입니다. 대상에서 API를 호출하는 데 걸린 시간입니다.
  • i - 로그 항목의 ID입니다. 네 개의 이벤트 항목 모두 이 ID를 공유합니다.

4. 클라이언트로 전송되는 응답 샘플

1436403888676 info res s=200, d=11, i=0

1436403888651 - Unix 날짜 스탬프

  • info - 로깅 수준입니다. 이 값은 트랜잭션 컨텍스트와 edgemicro 구성에서 설정된 로깅 수준에 따라 다릅니다. 로깅 수준을 설정하는 방법을 참고하세요. 통계 레코드의 경우 수준이 stats로 설정됩니다. 통계 레코드는 stats_log_interval 구성으로 설정된 정기 간격으로 보고됩니다. 로그 간격을 변경하는 방법도 참고하세요.
  • res: 이벤트를 식별합니다. 이 경우 클라이언트에 대한 응답입니다.
  • s - HTTP 응답 상태입니다.
  • d - 재생 시간(밀리초)입니다. 대상 API에 소요된 시간과 Edge Microgateway 자체에 소요된 시간을 포함하여 API 호출에 소요된 총 시간입니다.
  • i - 로그 항목의 ID입니다. 네 개의 이벤트 항목 모두 이 ID를 공유합니다.

로그 파일 일정

로그 파일은 rotate_interval 구성 속성으로 지정된 간격으로 순환됩니다. 순환 간격이 만료될 때까지 항목이 동일한 로그 파일에 계속 추가됩니다. 그러나 Edge Microgateway가 다시 시작될 때마다 새 UID를 수신하고 이 UID로 새 로그 파일 세트를 만듭니다. 로그 파일 유지보수 권장사항도 참고하세요.

오류 메시지

일부 로그 항목에는 오류 메시지가 포함됩니다. 오류가 발생하는 위치와 이유를 파악하려면 Edge Microgateway 오류 참조를 참고하세요.

Edge Microgateway 구성 참조

구성 파일 위치

이 섹션에 설명된 구성 속성은 Edge Microgateway 구성 파일에 있습니다. 구성 변경도 참고하세요.

edge_config 속성

이 설정은 Edge Microgateway 인스턴스와 Apigee Edge 간의 상호작용을 구성하는 데 사용됩니다.

  • bootstrap: (기본값: 없음) Apigee Edge에서 실행되는 Edge Microgateway별 서비스를 가리키는 URL입니다. Edge Microgateway는 이 서비스를 사용하여 Apigee Edge와 통신합니다. 이 URL은 공개/비공개 키 쌍을 생성하는 명령어(edgemicro genkeys)를 실행할 때 반환됩니다. 자세한 내용은 Edge Microgateway 설정 및 구성을 참고하세요.
  • jwt_public_key: (기본값: 없음) Apigee Edge에 배포된 Edge Microgateway 프록시를 가리키는 URL입니다. 이 프록시는 클라이언트에 서명된 액세스 토큰을 발급하기 위한 인증 엔드포인트 역할을 합니다. 이 URL은 프록시를 배포하는 명령어(edgemicro configure)를 실행할 때 반환됩니다. 자세한 내용은 Edge Microgateway 설정 및 구성을 참고하세요.
  • quotaUri: 조직에 배포된 edgemicro-auth 프록시를 통해 할당량을 관리하려면 이 구성 속성을 설정하세요. 이 속성을 설정하지 않으면 할당량 엔드포인트가 기본적으로 내부 Edge Microgateway 엔드포인트로 설정됩니다.
    edge_config:
      quotaUri: https://your_org-your_env.apigee.net/edgemicro-auth
    

edgemicro 속성

이 설정은 Edge Microgateway 프로세스를 구성합니다.

  • 포트: (기본값: 8000) Edge Microgateway 프로세스가 리슨하는 포트 번호입니다.
  • max_connections: (기본값: -1) Edge Microgateway에서 수신할 수 있는 동시 수신 연결의 최대 개수를 지정합니다. 이 수를 초과하면 다음 상태가 반환됩니다.

    res.statusCode = 429; // Too many requests
  • max_connections_hard: (기본값: -1) Edge Microgateway가 연결을 종료하기 전에 수신할 수 있는 최대 동시 요청 수입니다. 이 설정은 서비스 거부 공격을 방지하기 위한 것입니다. 일반적으로 max_connections보다 큰 숫자로 설정합니다.
  • 로깅:
    • 수준: (기본값: 오류)
      • info - (권장) Edge Microgateway 인스턴스를 통해 전달되는 모든 요청 및 응답을 로깅합니다.
      • 경고 - 경고 메시지만 로깅합니다.
      • error - 오류 메시지만 로깅합니다.
      • debug - 정보, 경고, 오류 메시지와 함께 디버그 메시지를 로깅합니다.
      • trace: 정보, 경고, 오류 메시지와 함께 오류의 추적 정보를 로깅합니다.
      • none: 로그 파일을 만들지 않습니다.
    • dir: (기본값: /var/tmp) 로그 파일이 저장되는 디렉터리입니다.
    • stats_log_interval: (기본값: 60) 통계 레코드가 api 로그 파일에 작성되는 간격(단위: 초)입니다.
    • rotate_interval: (기본값: 24) 로그 파일이 순환되는 간격(시간)입니다.
  • 플러그인: 플러그인은 Edge Microgateway에 기능을 추가합니다. 플러그인 개발에 관한 자세한 내용은 맞춤 플러그인 개발을 참고하세요.
  • dir: ./gateway 디렉터리에서 ./plugins 디렉터리까지의 상대 경로 또는 절대 경로입니다.
  • sequence: Edge Microgateway 인스턴스에 추가할 플러그인 모듈 목록입니다. 모듈은 여기에 지정된 순서대로 실행됩니다.
  • debug: Edge Microgateway 프로세스에 원격 디버깅을 추가합니다.
    • 포트: 리슨할 포트 번호입니다. 예를 들어 이 포트에서 리슨하도록 IDE 디버거를 설정합니다.
    • args: 디버그 프로세스의 인수입니다. 예를 들면 다음과 같습니다. args --nolazy
  • config_change_poll_interval: (기본값: 600초) Edge Microgateway는 주기적으로 새 구성을 로드하고 변경사항이 있으면 새로고침을 실행합니다. 폴링은 Edge에서 이루어진 변경사항 (제품, 마이크로 게이트웨이 인식 프록시 등의 변경사항)과 로컬 구성 파일의 변경사항을 모두 가져옵니다.
  • disable_config_poll_interval: (기본값: false) 자동 변경 폴링을 사용 중지하려면 true로 설정합니다.
  • request_timeout: 타겟 요청의 제한 시간을 설정합니다. 시간 제한은 초 단위로 설정됩니다. 제한 시간이 발생하면 Edge Microgateway는 504 상태 코드로 응답합니다. (v2.4.x 추가됨)
  • keep_alive_timeout: 이 속성을 사용하면 Edge Microgateway 제한 시간 (밀리초)을 설정할 수 있습니다. (기본값: 5초) (v3.0.6 추가됨)
  • headers_timeout: 이 속성은 HTTP 파서가 전체 HTTP 헤더를 수신하기 위해 기다리는 시간을 밀리초 단위로 제한합니다.

    예를 들면 다음과 같습니다.

    edgemicro:
      keep_alive_timeout: 6000
      headers_timeout: 12000

    내부적으로 이 매개변수는 요청에 Node.js Server.headersTimeout 속성을 설정합니다. (기본값: edgemicro.keep_alive_timeout로 설정된 시간보다 5초 더 깁니다. 이 기본 설정은 부하 분산기 또는 프록시가 연결을 잘못 끊지 못하도록 합니다.) (v3.1.1 추가됨)

  • noRuleMatchAction: (문자열) accesscontrol 플러그인에 지정된 일치 규칙이 확인되지 않은 경우 (일치하지 않는 경우) 취할 작업 (액세스 허용 또는 거부)입니다. 유효한 값: ALLOW 또는 DENY 기본값: ALLOW (추가됨: v3.1.7)
  • enableAnalytics: (기본값: true) 애널리틱스 플러그인이 로드되지 않도록 하려면 이 속성을 false로 설정합니다. 이 경우 Apigee Edge 분석이 호출되지 않습니다. true로 설정되거나 이 속성이 제공되지 않으면 애널리틱스 플러그인이 평소와 같이 작동합니다. 자세한 내용은 edgemicro 속성을 참고하세요. (v3.1.8 추가됨)

    예:

    edgemicro
      enableAnalytics=false|true
  • on_target_response_abort: 이 속성을 사용하면 클라이언트 (Edge Microgateway)와 대상 서버 간의 연결이 조기에 닫히는 경우 Edge Microgateway의 동작을 제어할 수 있습니다.
    설명
    기본값 on_target_response_abort를 지정하지 않으면 기본 동작은 오류를 표시하지 않고 응답을 자르는 것입니다. 로그 파일에는 targetResponse aborted 및 502 응답 코드와 함께 경고 메시지가 표시됩니다.
    appendErrorToClientResponseBody 맞춤 오류 TargetResponseAborted가 클라이언트에 반환됩니다. 로그 파일에는 targetResponse aborted 및 502 응답 코드와 함께 경고 메시지가 표시됩니다. 또한 TargetResponseAborted 오류가 Target response ended prematurely. 메시지와 함께 로깅됩니다.
    abortClientRequest Edge Microgateway가 요청을 중단하고 502 요청 상태 코드와 함께 TargetResponseAborted 경고가 로그 파일에 기록됩니다.

예:

edgemicro:
 on_target_response_abort: appendErrorToClientResponseBody | abortClientRequest

headers 속성

이 설정은 특정 HTTP 헤더가 처리되는 방식을 구성합니다.

  • x-forwarded-for: (기본값: true) x-forwarded-for 헤더가 타겟에 전달되지 않도록 false로 설정합니다. x-forwarded-for 헤더가 요청에 있는 경우 값이 Edge Analytics의 client-ip 값으로 설정됩니다.
  • x-forwarded-host: (기본값: true) x-forwarded-host 헤더가 타겟에 전달되지 않도록 false로 설정합니다.
  • x-request-id: (기본값: true) x-request-id 헤더가 타겟에 전달되지 않도록 false로 설정합니다.
  • x-response-time: (기본값: true) x-response-time 헤더가 타겟에 전달되지 않도록 false로 설정합니다.
  • via: (기본값: true) via 헤더가 타겟에 전달되지 않도록 false로 설정합니다.

oauth 속성

이 설정은 Edge Microgateway에서 클라이언트 인증을 적용하는 방법을 구성합니다.

  • allowNoAuthorization: (기본값: false) true로 설정하면 API 호출이 승인 헤더 없이 Edge Microgateway를 통과할 수 있습니다. 승인 헤더를 요구하려면 이 값을 false로 설정합니다 (기본값).
  • allowInvalidAuthorization: (기본값: false) 이 옵션을 true로 설정하면 인증 헤더에 전달된 토큰이 유효하지 않거나 만료된 경우에도 API 호출이 허용됩니다. 유효한 토큰을 요구하려면 이 값을 false로 설정합니다 (기본값).
  • authorization-header: (기본값: Authorization: Bearer) 액세스 토큰을 Edge Microgateway로 전송하는 데 사용되는 헤더입니다. 타겟이 다른 목적으로 Authorization 헤더를 사용해야 하는 경우 기본값을 변경하는 것이 좋습니다.
  • api-key-header: (기본값: x-api-key) API 키를 Edge Microgateway에 전달하는 데 사용되는 헤더 또는 쿼리 매개변수의 이름입니다. API 키 사용도 참고하세요.
  • keep-authorization-header: (기본값: false) true로 설정하면 요청에서 전송된 승인 헤더가 타겟에 전달됩니다 (보존됨).
  • allowOAuthOnly: true로 설정하면 모든 API가 Bearer 액세스 토큰이 포함된 Authorization 헤더를 전송해야 합니다. 이전 버전과의 호환성을 유지하면서 OAuth 보안 모델만 허용할 수 있습니다. (2.4.x 추가됨)
  • allowAPIKeyOnly: true로 설정하면 모든 API가 API 키와 함께 x-api-key 헤더(또는 맞춤 위치)를 포함해야 합니다.이전 버전과의 호환성을 유지하면서 API 키 보안 모델만 허용할 수 있습니다. (2.4.x 추가됨)
  • gracePeriod: 이 매개변수는 시스템 시계와 JWT 승인 토큰에 지정된 Not Before (nbf) 또는 Issued At (iat) 시간 간의 약간의 불일치로 인한 오류를 방지하는 데 도움이 됩니다. 이러한 불일치를 허용하려면 이 매개변수를 초 단위로 설정합니다. (2.5.7 추가됨)

플러그인별 속성

각 플러그인의 구성 가능한 속성에 관한 자세한 내용은 플러그인 사용을 참고하세요.

프록시 필터링

Edge Microgateway 인스턴스가 처리할 마이크로 게이트웨이 인식 프록시를 필터링할 수 있습니다. Edge Microgateway가 시작되면 연결된 조직의 모든 마이크로 게이트웨이 인식 프록시를 다운로드합니다. 다음 구성을 사용하여 마이크로 게이트웨이가 처리할 프록시를 제한합니다. 예를 들어 이 구성은 마이크로 게이트웨이가 처리할 프록시를 edgemicro_proxy-1, edgemicro_proxy-2, edgemicro_proxy-3의 3개로 제한합니다.

edgemicro:
  proxies:
  - edgemicro_proxy-1
  - edgemicro_proxy-2
  - edgemicro_proxy-3

이름별 제품 필터링

다음 구성을 사용하여 Edge Microgateway에서 다운로드하고 처리하는 API 제품 수를 제한합니다. 다운로드한 제품을 필터링하려면 Edge Microgateway *.config.yaml 파일에 나열된 /products API에 productnamefilter 쿼리 매개변수를 추가합니다. 예를 들면 다음과 같습니다.

edge_config:
  bootstrap: >-
    https://edgemicroservices.apigee.net/edgemicro/bootstrap/organization/willwitman/environment/test
  jwt_public_key: 'https://myorg-test.apigee.net/edgemicro-auth/publicKey'
  managementUri: 'https://api.enterprise.apigee.com'
  vaultName: microgateway
  authUri: 'https://%s-%s.apigee.net/edgemicro-auth'
  baseUri: >-
    https://edgemicroservices.apigee.net/edgemicro/%s/organization/%s/environment/%s
  bootstrapMessage: Please copy the following property to the edge micro agent config
  keySecretMessage: The following credentials are required to start edge micro
  products: 'https://myorg-test.apigee.net/edgemicro-auth/products?productnamefilter=%5E%5BEe%5Ddgemicro.%2A%24'

쿼리 매개변수의 값은 정규 표현식 형식으로 지정되어야 하며 URL로 인코딩되어야 합니다. 예를 들어 정규식 ^[Ee]dgemicro.*$은 'edgemicro-test-1', 'edgemicro_demo' , 'Edgemicro_New_Demo'와 같은 이름을 포착합니다. 쿼리 매개변수에 사용할 수 있는 URL 인코딩 값은 %5E%5BEe%5Ddgemicro.%2A%24입니다.

다음 디버그 출력은 필터링된 제품만 다운로드되었음을 보여줍니다.

...
2020-05-27T03:13:50.087Z [76060] [microgateway-config network] products download from https://gsc-demo-prod.apigee.net/edgemicro-auth/products?productnamefilter=%5E%5BEe%5Ddgemicro.%2A%24 returned 200 OK
...
....
....
{
   "apiProduct":[
      {
         "apiResources":[

         ],
         "approvalType":"auto",
         "attributes":[
            {
               "name":"access",
               "value":"public"
            }
         ],
         "createdAt":1590549037549,
         "createdBy":"k***@g********m",
         "displayName":"test upper case in name",
         "environments":[
            "prod",
            "test"
         ],
         "lastModifiedAt":1590549037549,
         "lastModifiedBy":"k***@g********m",
         "name":"Edgemicro_New_Demo",
         "proxies":[
            "catchall"
         ],
         "quota":"null",
         "quotaInterval":"null",
         "quotaTimeUnit":"null",
         "scopes":[

         ]
      },
      {
         "apiResources":[

         ],
         "approvalType":"auto",
         "attributes":[
            {
               "name":"access",
               "value":"public"
            }
         ],
         "createdAt":1590548328998,
         "createdBy":"k***@g********m",
         "displayName":"edgemicro test 1",
         "environments":[
            "prod",
            "test"
         ],
         "lastModifiedAt":1590548328998,
         "lastModifiedBy":"k***@g********m",
         "name":"edgemicro-test-1",
         "proxies":[
            "Lets-Encrypt-Validation-DoNotDelete"
         ],
         "quota":"null",
         "quotaInterval":"null",
         "quotaTimeUnit":"null",
         "scopes":[

         ]
      },
      {
         "apiResources":[
            "/",
            "/**"
         ],
         "approvalType":"auto",
         "attributes":[
            {
               "name":"access",
               "value":"public"
            }
         ],
         "createdAt":1558182193472,
         "createdBy":"m*********@g********m",
         "displayName":"Edge microgateway demo product",
         "environments":[
            "prod",
            "test"
         ],
         "lastModifiedAt":1569077897465,
         "lastModifiedBy":"m*********@g********m",
         "name":"edgemicro_demo",
         "proxies":[
            "edgemicro-auth",
            "edgemicro_hello"
         ],
         "quota":"600",
         "quotaInterval":"1",
         "quotaTimeUnit":"minute",
         "scopes":[

         ]
      }
   ]
}

맞춤 속성별 제품 필터링

맞춤 속성을 기준으로 제품을 필터링하려면 다음 단계를 따르세요.

  1. Edge UI에서 Edge Microgateway를 구성한 조직/환경에서 edgemicro_auth 프록시를 선택합니다.
  2. 개발 탭에서 편집기에서 JavaCallout 정책을 엽니다.
  3. products.filter.attributes 키와 쉼표로 구분된 속성 이름 목록으로 맞춤 속성을 추가합니다. 맞춤 속성 이름이 포함된 제품만 Edge Microgateway로 반환됩니다.
  4. 원하는 경우 맞춤 속성 products.filter.env.enablefalse로 설정하여 제품이 현재 환경에 사용 설정되어 있는지 확인하는 검사를 사용 중지할 수 있습니다. 기본값은 true입니다.
  5. (Private Cloud만 해당) Private Cloud용 Edge를 사용하는 경우 org.noncps 속성을 true로 설정하여 CPS가 아닌 환경의 제품을 가져옵니다.
  6. 예를 들면 다음과 같습니다.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout async="false" continueOnError="false" enabled="true" name="JavaCallout">
        <DisplayName>JavaCallout</DisplayName>
        <FaultRules/>
        <Properties>
            <Property name="products.filter.attributes">attrib.one, attrib.two</Property>
            <Property name="products.filter.env.enable">false</Property>
            <Property name="org.noncps">true</Property>
        </Properties>
        <ClassName>io.apigee.microgateway.javacallout.Callout</ClassName>
        <ResourceURL>java://micro-gateway-products-javacallout-2.0.0.jar</ResourceURL>
    </JavaCallout>

취소 상태별 제품 필터링

API 제품에는 대기 중, 승인됨, 취소됨이라는 세 가지 상태 코드가 있습니다. edgemicro-auth 프록시의 JWT 변수 정책 설정에 allowProductStatus라는 새 속성이 추가되었습니다. 이 속성을 사용하여 JWT에 나열된 API 제품을 필터링하려면 다음 단계를 따르세요.

  1. Apigee 프록시 편집기에서 edgemicro-auth 프록시를 엽니다.
  2. SetJWTVariables 정책의 XML에 allowProductStatus 속성을 추가하고 필터링할 상태 코드의 쉼표로 구분된 목록을 지정합니다. 예를 들어 대기 중취소됨 상태를 필터링하려면 다음 단계를 따르세요.
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Javascript timeLimit="20000" async="false" continueOnError="false"
        enabled="true" name="Set-JWT-Variables">
        <DisplayName>Set JWT Variables</DisplayName>
        <FaultRules/>
        <Properties>
            <Property name="allowProductStatus">Pending,Revoked</Property>
        </Properties>
        <ResourceURL>jsc://set-jwt-variables.js</ResourceURL>
    </Javascript>

    승인됨 제품만 표시하려면 다음과 같이 속성을 설정하세요.

    <Property name="allowProductStatus">Approved</Property>
  3. 프록시를 저장합니다.

    속성 태그가 없으면 모든 상태 코드가 있는 제품이 JWT에 표시됩니다.

    이 새 속성을 사용하려면 edgemicro-auth 프록시를 업그레이드해야 합니다.

애널리틱스 푸시 빈도 구성

다음 구성 매개변수를 사용하여 Edge Microgateway가 Apigee로 분석 데이터를 전송하는 빈도를 제어합니다.

  • bufferSize (선택사항): 가장 오래된 레코드 삭제를 시작하기 전에 버퍼가 보관할 수 있는 최대 애널리틱스 레코드 수입니다. 기본값: 10000
  • batchSize (선택사항): Apigee로 전송되는 분석 레코드 배치의 최대 크기입니다. 기본값: 500
  • flushInterval(선택사항): Apigee로 전송된 분석 레코드 일괄 처리의 각 플러시 간격(밀리초)입니다. 기본값: 5,000

예를 들면 다음과 같습니다.

analytics:
  bufferSize: 15000
  batchSize: 1000
  flushInterval: 6000

분석 데이터 마스킹

다음 구성을 사용하면 요청 경로 정보가 Edge 애널리틱스에 표시되지 않습니다. 요청 URI 또는 요청 경로를 마스킹하려면 마이크로 게이트웨이 구성에 다음을 추가합니다. URI는 요청의 호스트 이름과 경로 부분으로 구성됩니다.

analytics:
  mask_request_uri: 'string_to_mask'
  mask_request_path: 'string_to_mask'

Edge 애널리틱스에서 API 호출 분리

특정 API 경로를 구분하여 Edge Analytics 대시보드에 별도의 프록시로 표시되도록 분석 플러그인을 구성할 수 있습니다. 예를 들어 대시보드에서 상태 점검 API를 분리하여 실제 API 프록시 호출과 혼동하지 않도록 할 수 있습니다. 애널리틱스 대시보드에서 분리된 프록시는 다음과 같은 이름 지정 패턴을 따릅니다.

edgemicro_proxyname-health

다음 이미지는 애널리틱스 대시보드에서 분리된 두 개의 프록시(edgemicro_hello-healthedgemicro_mock-health)를 보여줍니다.

다음 매개변수를 사용하여 애널리틱스 대시보드에서 상대 경로와 절대 경로를 별도의 프록시로 구분합니다.

  • relativePath (선택사항): 애널리틱스 대시보드에서 구분할 상대 경로를 지정합니다. 예를 들어 /healthcheck을 지정하면 /healthcheck 경로가 포함된 모든 API 호출이 대시보드에 edgemicro_proxyname-health로 표시됩니다. 이 플래그는 프록시 기본 경로를 무시합니다. basepath를 포함한 전체 경로를 기준으로 구분하려면 proxyPath 플래그를 사용합니다.
  • proxyPath (선택사항): 분석 대시보드에서 구분할 프록시 기본 경로를 포함한 전체 API 프록시 경로를 지정합니다. 예를 들어 /mocktarget가 프록시 기본 경로인 경우 /mocktarget/healthcheck를 지정하면 경로가 /mocktarget/healthcheck인 모든 API 호출이 대시보드에 edgemicro_proxyname-health로 표시됩니다.

예를 들어 다음 구성에서 /healthcheck가 포함된 모든 API 경로는 분석 플러그인에 의해 분리됩니다. 즉, /foo/healthcheck/foo/bar/healthcheck는 애널리틱스 대시보드에서 edgemicro_proxyname-health라는 별도의 프록시로 분리됩니다.

analytics:
  uri: >-
    https://xx/edgemicro/ax/org/docs/environment/test
  bufferSize: 100
  batchSize: 50
  flushInterval: 500
  relativePath: /healthcheck

다음 구성에서는 프록시 경로가 /mocktarget/healthcheck인 모든 API가 분석 대시보드에서 edgemicro_proxyname-health라는 별도의 프록시로 분리됩니다.

analytics:
  uri: >-
    https://xx/edgemicro/ax/org/docs/environment/test
  bufferSize: 100
  batchSize: 50
  flushInterval: 500
  proxyPath: /mocktarget/healthcheck

회사 방화벽 뒤에 Edge Microgateway 설정

Apigee Edge와 통신하는 데 HTTP 프록시 사용

버전 3.1.2에 추가되었습니다.

Edge Microgateway와 Apigee Edge 간의 통신에 HTTP 프록시를 사용하려면 다음 단계를 따르세요.

  1. HTTP_PROXY, HTTPS_PROXY, NO_PROXY 환경 변수를 설정합니다. 이러한 변수는 Apigee Edge와의 통신에 사용할 각 HTTP 프록시의 호스트 또는 Apigee Edge와의 통신을 처리해서는 안 되는 호스트를 제어합니다. 예를 들면 다음과 같습니다.
    export HTTP_PROXY='http://localhost:3786'
    export HTTPS_PROXY='https://localhost:3786'
    export NO_PROXY='localhost,localhost:8080'

    NO_PROXY는 Edge Microgateway가 프록시하지 않아야 하는 도메인의 쉼표로 구분된 목록일 수 있습니다.

    이러한 변수에 관한 자세한 내용은 https://www.npmjs.com/package/request#controlling-proxy-behaviour-using-environment-variables를 참고하세요.

  2. Edge Microgateway를 다시 시작합니다.

대상 통신에 HTTP 프록시 사용

버전 3.1.2에 추가되었습니다.

Edge Microgateway와 백엔드 타겟 간의 통신에 HTTP 프록시를 사용하려면 다음 단계를 따르세요.

  1. 마이크로 게이트웨이 구성 파일에 다음 구성을 추가합니다.
    edgemicro:
      proxy:
        tunnel: true | false
        url: proxy_url
        bypass: target_host # target hosts to bypass the proxy.
        enabled: true | false

    각 항목의 의미는 다음과 같습니다.

    • 터널: (선택사항) true인 경우 Edge Microgateway는 HTTP CONNECT 메서드를 사용하여 단일 TCP 연결을 통해 HTTP 요청을 터널링합니다. 아래에 언급된 대로 프록시 구성을 위한 환경 변수가 TLS를 사용 설정한 경우에도 마찬가지입니다. 기본값: false
    • url: HTTP 프록시 URL입니다.
    • bypass: (선택사항) HTTP 프록시를 우회해야 하는 하나 이상의 대상 호스트 URL을 쉼표로 구분하여 지정합니다. 이 속성이 설정되지 않은 경우 NO_PROXY 환경 변수를 사용하여 우회할 타겟 URL을 지정합니다.
    • enabled: true이고 proxy.url가 설정된 경우 HTTP 프록시에 proxy.url 값을 사용합니다. true이고 proxy.url가 설정되지 않은 경우 Apigee Edge와의 통신에 HTTP 프록시 사용에 설명된 대로 HTTP 프록시 환경 변수 HTTP_PROXYHTTPS_PROXY에 지정된 프록시를 사용합니다.

    예를 들면 다음과 같습니다.

    edgemicro:
      proxy:
        tunnel: true
        url: 'http://localhost:3786'
        bypass: 'localhost','localhost:8080' # target hosts to bypass the proxy.
        enabled: true

  2. Edge Microgateway를 다시 시작합니다.

Microgateway 인식 프록시에서 와일드 카드 사용

edgemicro_* (Microgateway 인식) 프록시의 기본 경로에서 하나 이상의 '*' 와일드 카드를 사용할 수 있습니다. 예를 들어 /team/*/members를 기본 경로로 사용하면 클라이언트가 새 팀을 지원하기 위해 새 API 프록시를 만들 필요 없이 https://[host]/team/blue/membershttps://[host]/team/green/members를 호출할 수 있습니다. /**/는 지원되지 않습니다.

중요: Apigee는 와일드 카드 '*'로 시작하는 기본 경로를 지원하지 않습니다. 예를 들어 /*/ 검색은 지원되지 않습니다.

JWT 키 순환

JWT를 처음 생성한 후 어느 정도 지나면 Edge 암호화 KVM에 저장된 공개 키/비공개 키 쌍을 변경해야 할 수 있습니다. 새 키 쌍을 생성하는 이 프로세스를 키 순환이라고 합니다.

Edge Microgateway에서 JWT를 사용하는 방법

JSON 웹 토큰 (JWT)은 RFC7519에 설명된 토큰 표준입니다. JWT는 JWT 수신자가 안정적으로 확인할 수 있는 일련의 클레임에 서명하는 방법을 제공합니다.

CLI를 사용하여 JWT를 생성하고 API 호출의 승인 헤더에서 API 키 대신 사용할 수 있습니다. 예를 들면 다음과 같습니다.

curl -i http://localhost:8000/hello -H "Authorization: Bearer eyJhbGciOiJ..dXDefZEA"

CLI를 사용하여 JWT를 생성하는 방법에 관한 자세한 내용은 토큰 생성을 참고하세요.

키 순환이란 무엇인가요?

JWT를 처음 생성한 후 어느 정도 지나면 Edge 암호화 KVM에 저장된 공개 키/비공개 키 쌍을 변경해야 할 수 있습니다. 새 키 쌍을 생성하는 이 프로세스를 키 순환이라고 합니다. 키를 순환하면 새 비공개/공개 키 쌍이 생성되고 Apigee Edge 조직/환경의 'microgateway' KVM에 저장됩니다. 또한 이전 공개 키는 원래 키 ID 값과 함께 보관됩니다.

Edge는 JWT를 생성하기 위해 암호화된 KVM에 저장된 정보를 사용합니다. Edge Microgateway를 처음 설정 (구성)할 때 microgateway라는 KVM이 생성되고 키로 채워졌습니다. KVM의 키는 JWT에 서명하고 암호화하는 데 사용됩니다.

KVM 키에는 다음이 포함됩니다.

  • private_key - JWT에 서명하는 데 사용되는 최신 (가장 최근에 생성된) RSA 비공개 키입니다.

  • public_key - private_key로 서명된 JWT를 확인하는 데 사용되는 최신 (최근에 생성된) 인증서입니다.

  • private_key_kid - 최신 (가장 최근에 생성된) 비공개 키 ID입니다. 이 키 ID는 private_key 값과 연결되며 키 순환을 지원하는 데 사용됩니다.

  • public_key1_kid - 최신 (가장 최근에 생성된) 공개 키 ID입니다. 이 키는 public_key1 값과 연결되며 키 회전을 지원하는 데 사용됩니다. 이 값은 비공개 키 키드와 동일합니다.

  • public_key1 - 최신 (가장 최근에 생성된) 공개 키입니다.

키 교체를 실행하면 맵에서 기존 키 값이 대체되고 이전 공개 키를 유지하기 위해 새 키가 추가됩니다. 예를 들면 다음과 같습니다.

  • public_key2_kid - 이전 공개 키 ID입니다. 이 키는 public_key2 값과 연결되며 키 회전을 지원하는 데 사용됩니다.

  • public_key2 - 이전 공개 키입니다.

확인을 위해 제출된 JWT는 새 공개 키를 사용하여 확인됩니다. 확인에 실패하면 JWT가 만료될 때까지 (token_expiry* 간격 후, 기본값 30분) 이전 공개 키가 사용됩니다. 이렇게 하면 API 트래픽을 즉시 중단하지 않고도 키를 '회전'할 수 있습니다.

키 순환 방법

이 섹션에서는 키 순환을 실행하는 방법을 설명합니다.

  1. KVM을 업그레이드하려면 edgemicro upgradekvm 명령어를 사용합니다. 이 명령어 실행에 관한 자세한 내용은 KVM 업그레이드를 참고하세요. 이 단계는 한 번만 실행하면 됩니다.
  2. edgemicro-oauth 프록시를 업그레이드하려면 edgemicro upgradeauth 명령어를 사용합니다. 이 명령어 실행에 관한 자세한 내용은 edgemicro-auth 프록시 업그레이드를 참고하세요. 이 단계는 한 번만 실행하면 됩니다.
  3. ~/.edgemicro/org-env-config.yaml 파일에 다음 줄을 추가합니다. 여기서 마이크로 게이트웨이에서 사용하도록 구성한 것과 동일한 조직 및 환경을 지정해야 합니다.
    jwk_public_keys: 'https://$ORG-$ENV.apigee.net/edgemicro-auth/jwkPublicKeys'
  4. 키 순환 명령어를 실행하여 키를 순환합니다. 이 명령어에 관한 자세한 내용은 키 순환을 참고하세요.

    edgemicro rotatekey -o $ORG -e $ENV -k $KEY -s $SECRET

    예를 들면 다음과 같습니다.

    edgemicro rotatekey -o docs -e test \
    -k 27ee39567c75e4567a66236cbd4e86d1cc93df6481454301bd5fac4d3497fcbb \
    -s 4618b0008a6185d7327ebf53bee3c50282ccf45a3cceb1ed9828bfbcf1148b47
    

키 순환 후 Edge는 Edge Microgateway에 여러 키를 반환합니다. 다음 예에서 각 키에는 고유한 'kid' (키 ID) 값이 있습니다. 그러면 마이크로 게이트웨이는 이러한 키를 사용하여 승인 토큰을 확인합니다. 토큰 유효성 검사에 실패하면 마이크로 게이트웨이는 키 세트에 이전 키가 있는지 확인하고 해당 키를 시도합니다. 반환된 키의 형식은 JSON 웹 키 (JWK)입니다. 이 형식에 대한 자세한 내용은 RFC 7517을 참고하세요.

{
  "keys": [
    {
      "kty": "RSA",
      "n": "nSl7R_0wKLiWi6cO3n8aOJwYGBtinq723Jgg8i7KKWTSTYoszOjgGsJf_MX4JEW1YCScwpE5o4o8ccQN09iHVTlIhk8CNiMZNPipClmRVjaL_8IWvMQp1iN66qy4ldWXzXnHfivUZZogCkBNqCz7VSC5rw2Jf57pdViULVvVDGwTgf46sYveW_6h8CAGaD0KLd3vZffxIkoJubh0yMy0mQP3aDOeIGf_akeZeZ6GzF7ltbKGd954iNTiKmdm8IKhz6Y3gLpC9iwQ-kex_j0CnO_daHl1coYxUSCIdv4ziWIeM3dmjQ5_2dEvUDIGG6_Az9hTpNgPE5J1tvrOHAmunQ",
      "e": "AQAB",
      "kid": "2"
    },
    {
      "kty": "RSA",
      "n": "8BKwzx34BMUcHwTuQtmp8LFRCMxbkKg_zsWD6eOMIUTAsORexTGJsTy7z-4aH0wJ3fT-3luAAUPLBQwGcuHo0P1JnbtPrpuYjaJKSZOeIMOnlryJCspmv-1xG4qAqQ9XaZ9C97oecuj7MMoNwuaZno5MvsY-oi5B_gqED3vIHUjaWCErd4reONyFSWn047dvpE6mwRhZbcOTkAHT8ZyKkHISzopkFg8CD-Mij12unxA3ldcTV7yaviXgxd3eFSD1_Z4L7ZRsDUukCJkJ-8qY2-GWjewzoxl-mAW9D1tLK6qAdc89yFem3JHRW6L1le3YK37-bs6b2a_AqJKsKm5bWw",
      "e": "AQAB",
      "kid": "1"
    }
  ]
}

'not before' 지연 구성

버전 3.1.5 이하에서는 rotatekey 명령어로 생성된 새 비공개 키가 즉시 적용되고 생성된 새 토큰이 새 비공개 키로 서명되었습니다. 하지만 새 공개 키는 마이크로 게이트웨이 구성이 새로고침될 때만 10분마다 (기본값) Edge Microgateway 인스턴스에 제공되었습니다. 토큰 서명과 마이크로 게이트웨이 인스턴스 새로고침 간에 이러한 지연이 발생하므로 모든 인스턴스가 공개 최신 키를 수신할 때까지 최신 키로 서명된 토큰은 거부됩니다.

마이크로 게이트웨이 인스턴스가 여러 개 있는 경우 공개키 지연으로 인해 상태 403의 간헐적인 런타임 오류가 발생하는 경우가 있었습니다. 토큰 유효성 검사가 한 인스턴스에서는 통과하지만 모든 인스턴스가 새로고침될 때까지 다른 인스턴스에서는 실패하기 때문입니다.

버전 3.1.6부터 rotatekey 명령어의 새 플래그를 사용하여 새 비공개 키가 적용될 지연 시간을 지정할 수 있으므로 모든 마이크로 게이트웨이 인스턴스가 새로고침되고 새 공개 키를 수신할 수 있습니다. 새 플래그는 --nbf이며 '이전이 아님'을 의미합니다. 이 플래그는 지연할 분 수를 나타내는 정수 값을 사용합니다.

다음 예에서는 지연 시간이 15분으로 설정됩니다.

edgemicro rotatekey -o docs -e test \
-k 27ee39567c75e4567a66236cbd4e86d1cc93df6481454301bd5fac4d3497fcbb \
-s 4618b0008a6185d7327ebf53bee3c50282ccf45a3cceb1ed9828bfbcf1148b47 \
--nbf 15

지연 시간을 기본값인 10분인 config_change_poll_internal 구성 설정보다 길게 설정하는 것이 좋습니다. edgemicro 속성도 참고하세요.

다운로드한 프록시 필터링

기본적으로 Edge Microgateway는 이름 접두사 'edgemicro_'로 시작하는 Edge 조직의 모든 프록시를 다운로드합니다. 이 기본값을 변경하여 이름이 패턴과 일치하는 프록시를 다운로드할 수 있습니다.

  1. Edge Micro 구성 파일(~/.edgemicro/org-env-config.yaml)을 엽니다.
  2. edge_config 아래에 proxyPattern 요소를 추가합니다. 예를 들어 다음 패턴은 edgemicro_foo, edgemicro_fast, edgemicro_first와 같은 프록시를 다운로드합니다.
    edge_config:proxyPattern: edgemicro_f*

API 프록시 없이 제품 지정

Apigee Edge에서는 API 프록시가 포함되지 않은 API 제품을 만들 수 있습니다. 이 제품 구성을 사용하면 해당 제품과 연결된 API 키가 조직에 배포된 모든 프록시에서 작동할 수 있습니다. 버전 2.5.4부터 Edge Microgateway는 이 제품 구성을 지원합니다.

디버깅 및 문제 해결

디버거에 연결

node-inspector와 같은 디버거를 사용하여 Edge Microgateway를 실행할 수 있습니다. 맞춤 플러그인의 문제 해결 및 디버깅에 유용합니다.

  1. 디버그 모드에서 Edge Microgateway를 다시 시작합니다. 이렇게 하려면 start 명령어의 시작 부분에 DEBUG=*를 추가합니다.
    DEBUG=* edgemicro start -o $ORG -e $ENV -k $KEY -s $SECRET

    디버그 출력을 파일로 전달하려면 다음 명령어를 사용합니다.

    export DEBUG=* nohup edgemicro start \
    -o $ORG -e $ENV -k $KEY -s $SECRET 2>&1 | tee /tmp/file.log

  2. 디버거를 시작하고 디버깅 프로세스의 포트 번호를 리슨하도록 설정합니다.
  3. 이제 Edge Microgateway 코드를 단계별로 진행하고, 중단점을 설정하고, 표현식을 확인하는 등의 작업을 할 수 있습니다.

디버그 모드와 관련된 표준 Node.js 플래그를 지정할 수 있습니다. 예를 들어 --nolazy는 비동기 코드 디버깅에 도움이 됩니다.

로그 파일 확인

문제가 있는 경우 로그 파일에서 실행 세부정보와 오류 정보를 확인해야 합니다. 자세한 내용은 로그 파일 관리를 참고하세요.

API 키 보안 사용

API 키는 Edge Microgateway에 요청하는 클라이언트를 인증하기 위한 간단한 메커니즘을 제공합니다. Edge Microgateway 인증 프록시가 포함된 Apigee Edge 제품에서 고객 키 (클라이언트 ID라고도 함) 값을 복사하여 API 키를 가져올 수 있습니다.

키 캐싱

API 키는 캐시되는 보유자 토큰으로 교환됩니다. Edge Microgateway로 수신되는 요청에 Cache-Control: no-cache 헤더를 설정하여 캐싱을 사용 중지할 수 있습니다.

API 키 사용

API 키는 API 요청에서 쿼리 매개변수 또는 헤더로 전달할 수 있습니다. 기본적으로 헤더 및 쿼리 매개변수 이름은 모두 x-api-key입니다.

쿼리 매개변수 예:

curl http://localhost:8000/foobar?x-api-key=JG616Gjz7xs4t0dvpvVsGdI49G34xGsz

헤더 예:

curl http://localhost:8000/foobar -H "x-api-key:JG616Gjz7xs4t0dvpvVsGdI49G34xGsz"

API 키 이름 구성

기본적으로 x-api-key는 API 키 헤더와 쿼리 매개변수 모두에 사용되는 이름입니다. 구성 변경에 설명된 대로 구성 파일에서 이 기본값을 변경할 수 있습니다. 예를 들어 이름을 apiKey로 변경하려면 다음을 실행합니다.

oauth:
  allowNoAuthorization: false
  allowInvalidAuthorization: false
  api-key-header: apiKey

이 예시에서는 쿼리 매개변수와 헤더 이름이 모두 apiKey로 변경됩니다. 두 경우 모두 x-api-key 이름은 더 이상 작동하지 않습니다. 구성 변경도 참고하세요.

예를 들면 다음과 같습니다.

curl http://localhost:8000/foobar -H "apiKey:JG616Gjz7xs4t0dvpvVsGdI49G34xGsz"

프록시 요청과 함께 API 키를 사용하는 방법에 관한 자세한 내용은 보안 Edge Microgateway를 참고하세요.

업스트림 응답 코드 사용 설정

기본적으로 oauth 플러그인은 응답이 200 상태가 아닌 경우 4xx 오류 상태 코드만 반환합니다. 오류에 따라 항상 정확한 4xx 또는 5xx 코드를 반환하도록 이 동작을 변경할 수 있습니다.

이 기능을 사용 설정하려면 Edge Microgateway 구성에 oauth.useUpstreamResponse: true 속성을 추가합니다. 예를 들면 다음과 같습니다.

oauth:
  allowNoAuthorization: false
  allowInvalidAuthorization: false
  gracePeriod: 10
  useUpstreamResponse: true

OAuth2 토큰 보안 사용

이 섹션에서는 OAuth2 액세스 토큰과 갱신 토큰을 가져오는 방법을 설명합니다. 액세스 토큰은 마이크로 게이트웨이를 통해 보안 API를 호출하는 데 사용됩니다. 갱신 토큰은 새 액세스 토큰을 얻는 데 사용됩니다.

액세스 토큰을 가져오는 방법

이 섹션에서는 edgemicro-auth 프록시를 사용하여 액세스 토큰을 가져오는 방법을 설명합니다.

edgemicro token CLI 명령어를 사용하여 액세스 토큰을 가져올 수도 있습니다. CLI에 관한 자세한 내용은 토큰 관리를 참고하세요.

API 1: 사용자 인증 정보를 본문 매개변수로 전송

URL에서 조직 및 환경 이름을 대체하고 Apigee Edge의 개발자 앱에서 가져온 소비자 ID 및 소비자 비밀번호 값을 client_idclient_secret 본문 매개변수로 대체합니다.

curl -i -X POST "http://<org>-<test>.apigee.net/edgemicro-auth/token" \
-d '{"grant_type": "client_credentials", "client_id": "your_client_id", \
"client_secret": "your_client_secret"}' -H "Content-Type: application/json"

API 2: 기본 인증 헤더로 사용자 인증 정보 전송

클라이언트 사용자 인증 정보를 기본 인증 헤더로 전송하고 grant_type를 양식 매개변수로 전송합니다. 이 명령어 형식은 RFC 6749: OAuth 2.0 승인 프레임워크에서도 설명합니다.

http://<org>-<test>.apigee.net/edgemicro-auth/token -v -u your_client_id:your_client_secret \
-d 'grant_type=client_credentials' -H "Content-Type: application/x-www-form-urlencoded"

샘플 출력

API는 JSON 응답을 반환합니다. token 속성과 access_token 속성은 다르지 않습니다. 둘 중 하나를 사용할 수 있습니다. expires_in는 초 단위로 지정된 정수 값입니다.
{
"token": "eyJraWQiOiIxIiwidHlwIjoi",
"access_token": "eyJraWQiOiIxIiwid",
"token_type": "bearer",
"expires_in": 1799
}

갱신 토큰을 가져오는 방법

새로고침 토큰을 가져오려면 edgemicro-auth 프록시의 /token 엔드포인트에 API를 호출합니다. password 부여 유형으로 이 API를 호출해야 합니다. 다음 단계에서는 이 프로세스를 안내합니다.

  1. /token API를 사용하여 액세스 토큰과 갱신 토큰을 가져옵니다. 권한 부여 유형은 password입니다.
    curl -X POST \
      https://your_organization-your_environment.apigee.net/edgemicro-auth/token \
      -H 'Content-Type: application/json' \
      -d '{
       "client_id":"mpK6l1Bx9oE5zLdifoDbF931TDnDtLq",
       "client_secret":"bUdDcFgv3nXffnU",
       "grant_type":"password",
       "username":"mpK6lBx9RoE5LiffoDbpF931TDnDtLq",
       "password":"bUdD2FvnMsXffnU"
    }'

    API는 액세스 토큰과 갱신 토큰을 반환합니다. 응답은 다음과 유사합니다. expires_in 값은 정수이며 초 단위로 지정됩니다.

    {
        "token": "your-access-token",
        "access_token": "your-access-token",
        "token_type": "bearer",
        "expires_in": 108,
        "refresh_token": "your-refresh-token",
        "refresh_token_expires_in": 431,
        "refresh_token_issued_at": "1562087304302",
        "refresh_token_status": "approved"
    }
  2. 이제 갱신 토큰을 사용하여 동일한 API의 /refresh 엔드포인트를 호출하여 새 액세스 토큰을 가져올 수 있습니다. 예를 들면 다음과 같습니다.
    curl -X POST \
      https://willwitman-test.apigee.net/edgemicro-auth/refresh \
      -H 'Content-Type: application/json' \
      -d '{
       "client_id":"mpK6l1Bx9RoE5zLifoDbpF931TDnDtLq",
       "client_secret":"bUdDc2Fv3nMXffnU",
       "grant_type":"refresh_token",
       "refresh_token":"your-refresh-token"
    }'

    API는 새 액세스 토큰을 반환합니다. 응답은 다음과 유사합니다.

    {
        "token": "your-new-access-token"
        }

무기한 모니터링

구성 파일 엔드포인트 지정

Edge Microgateway 인스턴스를 여러 개 실행하는 경우 단일 위치에서 구성을 관리하는 것이 좋습니다. Edge Micro가 구성 파일을 다운로드할 수 있는 HTTP 엔드포인트를 지정하면 됩니다. -u 플래그를 사용하여 Edge Micro를 시작할 때 이 엔드포인트를 지정할 수 있습니다.

예를 들면 다음과 같습니다.

edgemicro start -o jdoe -e test -u http://mylocalserver/mgconfig -k public_key -s secret_key

여기서 mgconfig 엔드포인트는 구성 파일의 콘텐츠를 반환합니다. 기본적으로 ~/.edgemicro에 있으며 이름 지정 규칙이 org-env-config.yaml인 파일입니다.

TCP 연결 데이터 버퍼링 사용 중지

nodelay 구성 속성을 사용하여 Edge Microgateway에서 사용하는 TCP 연결의 데이터 버퍼링을 사용 중지할 수 있습니다.

기본적으로 TCP 연결은 Nagle 알고리즘을 사용하여 데이터를 전송하기 전에 버퍼링합니다. nodelaytrue로 설정하면 이 동작이 사용 중지됩니다 (socket.write()가 호출될 때마다 데이터가 즉시 전송됨). 자세한 내용은 Node.js 문서를 참고하세요.

nodelay를 사용 설정하려면 다음과 같이 Edge Micro 구성 파일을 수정합니다.

edgemicro:
  nodelay: true
  port: 8000
  max_connections: 1000
  config_change_poll_interval: 600
  logging:
    level: error
    dir: /var/tmp
    stats_log_interval: 60
    rotate_interval: 24

독립형 모드에서 Edge Microgateway 실행

Edge Microgateway는 Apigee Edge 종속 항목과 완전히 연결 해제된 상태로 실행할 수 있습니다. 독립형 모드라고 하는 이 시나리오를 사용하면 인터넷에 연결하지 않고도 Edge Microgateway를 실행하고 테스트할 수 있습니다.

독립형 모드에서는 Apigee Edge에 연결해야 하므로 다음 기능이 작동하지 않습니다.

  • OAuth 및 API 키
  • 할당량
  • 애널리틱스

반면 맞춤 플러그인과 급증 구제는 Apigee Edge에 연결할 필요가 없으므로 정상적으로 작동합니다. 또한 extauth라는 새 플러그인을 사용하면 독립형 모드에서 JWT로 마이크로 게이트웨이에 대한 API 호출을 승인할 수 있습니다.

게이트웨이 구성 및 시작

독립형 모드에서 Edge Microgateway를 실행하려면 다음 단계를 따르세요.

  1. 다음과 같이 이름이 지정된 구성 파일을 만듭니다. $HOME/.edgemicro/$ORG-$ENV-config.yaml

    예를 들면 다음과 같습니다.

    vi $HOME/.edgemicro/foo-bar-config.yaml
  2. 다음 코드를 파일에 붙여넣습니다.
    edgemicro:
      port: 8000
      max_connections: 1000
      config_change_poll_interval: 600
      logging:
        level: error
        dir: /var/tmp
        stats_log_interval: 60
        rotate_interval: 24
      plugins:
        sequence:
          - extauth
          - spikearrest
    headers:
      x-forwarded-for: true
      x-forwarded-host: true
      x-request-id: true
      x-response-time: true
      via: true
    extauth:
      publickey_url: https://www.googleapis.com/oauth2/v1/certs
    spikearrest:
      timeUnit: second
      allow: 10
      buffersize: 0
  3. 다음 환경 변수를 값 '1'로 내보냅니다.
    export EDGEMICRO_LOCAL=1
  4. 다음 start 명령어를 실행합니다. 여기서 로컬 프록시를 인스턴스화할 값을 제공합니다.
    edgemicro start -o $ORG -e $ENV -a $LOCAL_PROXY_NAME \
      -v $LOCAL_PROXY_VERSION -t $TARGET_URL -b $BASE_PATH

    각 항목의 의미는 다음과 같습니다.

    • $ORG는 구성 파일 이름에 사용한 'org' 이름입니다.
    • $ENV는 구성 파일 이름에 사용한 'env' 이름입니다.
    • $LOCAL_PROXY_NAME은 생성될 로컬 프록시의 이름입니다. 원하는 이름을 사용할 수 있습니다.
    • $LOCAL_PROXY_VERSION는 프록시의 버전 번호입니다.
    • $TARGET_URL은 프록시의 대상 URL입니다. (타겟은 프록시가 호출하는 서비스입니다.)
    • $BASE_PATH는 프록시의 기본 경로입니다. 이 값은 슬래시로 시작해야 합니다. 루트 기본 경로의 경우 슬래시만 지정합니다(예: '/').

    예를 들면 다음과 같습니다.

    edgemicro start -o local -e test -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
  5. 구성을 테스트합니다.
    curl http://localhost:8000/echo  { "error" : "missing_authorization" }

    extauth 플러그인이 foo-bar-config.yaml 파일에 있으므로 'missing_authorization' 오류가 발생합니다. 이 플러그인은 API 호출의 승인 헤더에 있어야 하는 JWT를 검증합니다. 다음 섹션에서는 API 호출이 오류 없이 진행될 수 있는 JWT를 가져옵니다.

예: 승인 토큰 가져오기

다음 예는 Apigee Edge (edgemicro-auth/jwkPublicKeys)의 Edge Microgateway JWT 엔드포인트에서 JWT를 가져오는 방법을 보여줍니다. 이 엔드포인트는 Edge Microgateway의 표준 설정 및 구성을 실행할 때 배포됩니다. Apigee 엔드포인트에서 JWT를 가져오려면 먼저 표준 Edge Microgateway 설정을 실행하고 인터넷에 연결되어 있어야 합니다. Apigee 엔드포인트는 여기에서 예시 목적으로만 사용되며 필요하지 않습니다. 원하는 경우 다른 JWT 토큰 엔드포인트를 사용할 수 있습니다. 이 경우 해당 엔드포인트에 제공된 API를 사용하여 JWT를 가져와야 합니다.

다음 단계에서는 edgemicro-auth/jwkPublicKeys 엔드포인트를 사용하여 토큰을 가져오는 방법을 설명합니다.

  1. Apigee Edge의 조직/환경에 edgemicro-auth 프록시를 배포하려면 Edge Microgateway의 표준 설정 및 구성을 실행해야 합니다. 이전에 이 단계를 수행한 경우에는 반복할 필요가 없습니다.
  2. Apigee Cloud에 Edge Microgateway를 배포한 경우 이 엔드포인트에서 JWT를 가져오려면 인터넷에 연결되어 있어야 합니다.
  3. Edge Microgateway를 중지합니다.
    edgemicro stop
  4. 이전에 만든 구성 파일 ($HOME/.edgemicro/org-env-config.yaml)에서 extauth:publickey_url 속성을 Apigee Edge 조직/환경의 edgemicro-auth/jwkPublicKeys 엔드포인트로 지정합니다. 예를 들면 다음과 같습니다.
    extauth:
      publickey_url: 'https://your_org-your_env.apigee.net/edgemicro-auth/jwkPublicKeys'
  5. 이전과 같이 구성 파일 이름에 사용한 org/env 이름을 사용하여 Edge Microgateway를 다시 시작합니다. 예를 들면 다음과 같습니다.
    edgemicro start -o foo -e bar -a proxy1 -v 1 -t http://mocktarget.apigee.net -b /
  6. 승인 엔드포인트에서 JWT 토큰을 가져옵니다. edgemicro-auth/jwkPublicKeys 엔드포인트를 사용하고 있으므로 다음 CLI 명령어를 사용할 수 있습니다.

edgemicro token 명령어 또는 API를 사용하여 Edge Microgateway의 JWT를 생성할 수 있습니다. 예를 들면 다음과 같습니다.

edgemicro token get -o your_org -e your_env \
  -i G0IAeU864EtBo99NvUbn6Z4CBwVcS2 -s uzHTbwNWvoSmOy

각 항목의 의미는 다음과 같습니다.

  • your_org은 이전에 Edge Microgateway를 구성한 Apigee 조직의 이름입니다.
  • your_env는 조직의 환경입니다.
  • i 옵션은 edgemicro-auth 프록시가 포함된 제품이 있는 개발자 앱의 소비자 키를 지정합니다.
  • s 옵션은 edgemicro-auth 프록시가 포함된 제품이 있는 개발자 앱의 소비자 비밀번호를 지정합니다.

이 명령어는 Apigee Edge에 API 호출을 확인하는 데 사용할 수 있는 JWT를 생성하도록 요청합니다.

토큰 생성도 참고하세요.

독립형 구성 테스트

구성을 테스트하려면 다음과 같이 인증 헤더에 토큰을 추가하여 API를 호출합니다.

curl http://localhost:8000/echo -H "Authorization: Bearer your_token

예:

curl http://localhost:8000/echo -H "Authorization: Bearer eyJraWQiOiIxIiwidHlwIjo...iryF3kwcDWNv7OQ"

출력 예시:

{
   "headers":{
      "user-agent":"curl/7.54.0",
      "accept":"*/*",
      "x-api-key":"DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP",
      "client_received_start_timestamp":"1535134472699",
      "x-authorization-claims":"eyJhdDbiO...M1OTE5MTA1NDkifQ==",
      "target_sent_start_timestamp":"1535134472702",
      "x-request-id":"678e3080-a7ae-11e8-a70f-87ae30db3896.8cc81cb0-a7c9-11e8-a70f-87ae30db3896",
      "x-forwarded-proto":"http",
      "x-forwarded-host":"localhost:8000",
      "host":"mocktarget.apigee.net",
      "x-cloud-trace-context":"e2ac4fa0112c2d76237e5473714f1c85/1746478453618419513",
      "via":"1.1 localhost, 1.1 google",
      "x-forwarded-for":"::1, 216.98.205.223, 35.227.194.212",
      "connection":"Keep-Alive"
   },
   "method":"GET",
   "url":"/",
   "body":""
}

로컬 프록시 모드 사용

로컬 프록시 모드에서는 Edge Microgateway에 microgateway 인식 프록시를 Apigee Edge에 배포할 필요가 없습니다. 대신 마이크로 게이트웨이를 시작할 때 로컬 프록시 이름, 기본 경로, 대상 URL을 제공하여 '로컬 프록시'를 구성합니다. 그러면 마이크로 게이트웨이에 대한 API 호출이 로컬 프록시의 타겟 URL로 전송됩니다. 다른 모든 측면에서 로컬 프록시 모드는 Edge Microgateway를 일반 모드로 실행하는 것과 정확히 동일하게 작동합니다. 인증은 급증 감지 및 할당량 적용, 맞춤 플러그인 등과 마찬가지로 동일하게 작동합니다.

사용 사례 및 예시

로컬 프록시 모드는 단일 프록시를 Edge Microgateway 인스턴스와 연결하기만 하면 되는 경우에 유용합니다. 예를 들어 Edge Microgateway를 사이드카 프록시로 Kubernetes에 삽입할 수 있습니다. 이 경우 마이크로 게이트웨이와 서비스가 각각 단일 포드에서 실행되고 마이크로 게이트웨이가 호환 서비스와의 트래픽을 관리합니다. 다음 그림은 Edge Microgateway가 Kubernetes 클러스터에서 사이드카 프록시로 작동하는 이 아키텍처를 보여줍니다. 각 마이크로 게이트웨이 인스턴스는 호환 서비스의 단일 엔드포인트와만 통신합니다.

사이드카로서 Edgemicro

이 스타일의 아키텍처의 이점은 Edge Microgateway가 Kubernetes 클러스터와 같은 컨테이너 환경에 배포된 개별 서비스에 API 관리를 제공한다는 것입니다.

로컬 프록시 모드 구성

Edge Microgateway가 로컬 프록시 모드로 실행되도록 구성하려면 다음 단계를 따르세요.

  1. 일반적인 Edge Microgateway 설정과 똑같이 edgemicro init를 실행하여 로컬 구성 환경을 설정합니다. Edge Microgateway 구성도 참고하세요.
  2. 일반적인 Edge Microgateway 설정 절차와 같이 edgemicro configure를 실행합니다. 예를 들면 다음과 같습니다.
    edgemicro configure -o your_org -e your_env -u your_apigee_username

    이 명령어는 edgemicro-auth 정책을 Edge에 배포하고 마이크로 게이트웨이를 시작하는 데 필요한 키와 보안 비밀을 반환합니다. 도움이 필요한 경우 Edge Microgateway 구성을 참고하세요.

  3. Apigee Edge에서 API 제품을 만들고 다음과 같은 필수 구성 요구사항을 적용합니다 (다른 모든 구성은 원하는 대로 관리할 수 있음).
    • 제품에 edgemicro-auth 프록시를 추가해야 합니다. 이 프록시는 edgemicro configure를 실행할 때 자동으로 배포되었습니다.
    • 리소스 경로를 제공해야 합니다. Apigee에서는 제품에 /** 경로를 추가할 것을 권장합니다. 자세한 내용은 리소스 경로의 동작 구성을 참고하세요. Edge 문서의 API 제품 만들기도 참고하세요.
  4. Apigee Edge에서 개발자를 만들거나 원하는 경우 기존 개발자를 사용할 수 있습니다. 자세한 내용은 Edge 관리 UI를 사용하여 개발자 추가를 참고하세요.

  5. Apigee Edge에서 개발자 앱을 만듭니다. 방금 만든 API 제품을 앱에 추가해야 합니다. 자세한 내용은 Edge 관리 UI에서 앱 등록을 참고하세요.
  6. Edge Microgateway가 설치된 머신에서 다음 환경 변수를 값 '1'로 내보냅니다.
    export EDGEMICRO_LOCAL_PROXY=1
  7. 다음 start 명령어를 실행합니다.
    edgemicro start -o your_org -e your_environment -k your_key -s your_secret \
        -a local_proxy_name -v local_proxy_version -t target_url -b base_path

    각 항목의 의미는 다음과 같습니다.

    • your_org은 Apigee 조직입니다.
    • your_environment는 조직의 환경입니다.
    • your_keyedgemicro configure를 실행할 때 반환된 키입니다.
    • your_secretedgemicro configure를 실행할 때 반환된 보안 비밀입니다.
    • local_proxy_name은 생성될 로컬 프록시의 이름입니다.
    • local_proxy_version는 프록시의 버전 번호입니다.
    • target_url는 프록시의 대상 (프록시가 호출할 서비스)의 URL입니다.
    • base_path는 프록시의 기본 경로입니다. 이 값은 슬래시로 시작해야 합니다. 루트 기본 경로의 경우 슬래시만 지정합니다(예: '/').

    예를 들면 다음과 같습니다.

    edgemicro start -o your_org -e test -k 7eb6aae644cbc09035a...d2eae46a6c095f \
      -s e16e7b1f5d5e24df...ec29d409a2df853163a -a proxy1 -v 1 \
      -t http://mocktarget.apigee.net -b /echo

구성 테스트

프록시 엔드포인트를 호출하여 로컬 프록시 구성을 테스트할 수 있습니다. 예를 들어 기본 경로를 /echo로 지정한 경우 다음과 같이 프록시를 호출할 수 있습니다.

curl  http://localhost:8000/echo
{
  "error" : "missing_authorization",
  "error_description" : "Missing Authorization header"
}

유효한 API 키를 제공하지 않았기 때문에 이 초기 API 호출에서 오류가 발생했습니다. 이전에 만든 개발자 앱에서 키를 찾을 수 있습니다. Edge UI에서 앱을 열고 고객 키를 복사한 다음 다음과 같이 키를 사용합니다.

curl  http://localhost:8000/echo -H 'x-api-key:your_api_key'

예를 들면 다음과 같습니다.

curl  http://localhost:8000/echo -H "x-api-key:DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP"

출력 예시:

{
  "headers":{
    "user-agent":"curl/7.54.0",
    "accept":"*/*",
    "x-api-key":"DvUdLlFwG9AvGGpEgfnNGwtvaXIlUUvP",
    "client_received_start_timestamp":"1535134472699",
    "x-authorization-claims":"eyJhdWQiOi...TQ0YmUtOWNlOS05YzM1OTE5MTA1NDkifQ==",
    "target_sent_start_timestamp":"1535134472702",
    "x-request-id":"678e3080-a7ae-11e8-a70f-87ae30db3896.8cc81cb0-a7c9-11e8-a70f-87ae30db3896",
    "x-forwarded-proto":"http",
    "x-forwarded-host":"localhost:8000",
    "host":"mocktarget.apigee.net",
    "x-cloud-trace-context":"e2ac4fa0112c2d76237e5473714f1c85/1746478453618419513",
    "via":"1.1 localhost, 1.1 google",
    "x-forwarded-for":"::1, 216.98.205.223, 35.227.194.212",
    "connection":"Keep-Alive"
  },
  "method":"GET",
  "url":"/",
  "body":""
}

동기화 도구 사용

이 섹션에서는 Apigee Edge에서 구성 데이터를 가져와 로컬 Redis 데이터베이스에 쓸 수 있도록 허용하여 Edge Microgateway의 복원력을 개선하는 선택적 기능인 동기화 도구를 사용하는 방법을 설명합니다. 동기화기 인스턴스가 실행되면 다른 노드에서 실행되는 다른 Edge Microgateway 인스턴스는 이 데이터베이스에서 직접 구성을 가져올 수 있습니다.

동기화 기능은 현재 Redis 5.0.x에서 작동하도록 지원됩니다.

동기화 도구란 무엇인가요?

동기화 도구는 Edge Microgateway에 일정 수준의 복원력을 제공합니다. 이렇게 하면 Edge Microgateway의 모든 인스턴스가 동일한 구성을 사용하고 인터넷 연결이 끊겨도 Edge Microgateway 인스턴스가 제대로 시작되고 실행될 수 있습니다.

기본적으로 Edge Microgateway 인스턴스는 Apigee Edge와 통신하여 API 프록시 및 API 제품 구성과 같은 구성 데이터를 검색하고 새로고침할 수 있어야 합니다. Edge와의 인터넷 연결이 중단되면 최신 구성 데이터가 캐시되므로 마이크로 게이트웨이 인스턴스가 계속 작동할 수 있습니다. 하지만 명확한 연결 없이는 새 마이크로 게이트웨이 인스턴스를 시작할 수 없습니다. 또한 인터넷 연결이 끊겨 하나 이상의 마이크로 게이트웨이 인스턴스가 다른 인스턴스와 동기화되지 않은 구성 정보로 실행될 수 있습니다.

Edge Microgateway 동기화기는 Edge Microgateway 인스턴스가 API 프록시 트래픽을 시작하고 처리하는 데 필요한 구성 데이터를 검색하는 대체 메커니즘을 제공합니다. Apigee Edge 호출에서 가져온 구성 데이터에는 jwk_public_keys 호출, jwt_public_key 호출, 부트스트랩 호출, API 제품 호출이 포함됩니다. 동기화 도구를 사용하면 Edge Microgateway와 Apigee Edge 간의 인터넷 연결이 끊겨도 여러 노드에서 실행되는 모든 Edge Microgateway 인스턴스가 제대로 시작되고 동기화 상태를 유지할 수 있습니다.

동기화기는 Edge Microgateway의 특별히 구성된 인스턴스입니다. 이 스크립트의 유일한 목적은 Apigee Edge를 폴링하고 (타이밍은 구성 가능), 구성 데이터를 가져와 로컬 Redis 데이터베이스에 쓰는 것입니다. 동기화 도구 인스턴스 자체는 API 프록시 트래픽을 처리할 수 없습니다. 다른 노드에서 실행되는 Edge Microgateway의 다른 인스턴스는 Apigee Edge가 아닌 Redis 데이터베이스에서 구성 데이터를 가져오도록 구성할 수 있습니다. 모든 마이크로 게이트웨이 인스턴스는 로컬 데이터베이스에서 구성 데이터를 가져오므로 인터넷 연결이 끊겨도 API 요청을 시작하고 처리할 수 있습니다.

동기화 도구 인스턴스 구성

동기화 도구로 사용하려는 Edge Microgateway 설치의 org-env/config.yaml 파일에 다음 구성을 추가합니다.

edgemicro:
  redisHost: host_IP
  redisPort: host_port
  redisDb: database_index
  redisPassword: password
edge_config:
  synchronizerMode: 1
  redisBasedConfigCache: true

예:

edgemicro:
  redisHost: 192.168.4.77
  redisPort: 6379
  redisDb: 0
  redisPassword: codemaster
edge_config:
  synchronizerMode: 1
  redisBasedConfigCache: true
옵션 설명
redisHost Redis 인스턴스가 실행 중인 호스트입니다. 기본값: 127.0.0.1
redisPort Redis 인스턴스의 포트입니다. 기본값: 6379
redisDb 사용할 Redis DB입니다. 기본값: 0
redisPassword 데이터베이스 비밀번호입니다.

마지막으로 구성 파일을 저장하고 Edge Microgateway 인스턴스를 시작합니다. Apigee Edge를 폴링하고 다운로드한 구성 데이터를 Redis 데이터베이스에 저장하기 시작합니다.

일반 Edge Microgateway 인스턴스 구성

동기화 도구가 실행되면 API 프록시 트래픽을 처리하는 일반 마이크로 게이트웨이 인스턴스를 실행하도록 Edge Microgateway 노드를 추가로 구성할 수 있습니다. 하지만 이러한 인스턴스는 Apigee Edge가 아닌 Redis 데이터베이스에서 구성 데이터를 가져오도록 구성합니다.

추가된 각 Edge Microgateway 노드의 org-env/config.yaml 파일에 다음 구성을 추가합니다. synchronizerMode 속성은 0로 설정됩니다. 이 속성은 인스턴스를 API 프록시 트래픽을 처리하는 일반 Edge Microgateway 인스턴스로 작동하도록 설정하며 인스턴스는 Redis 데이터베이스에서 구성 데이터를 가져옵니다.

edgemicro:
  redisHost: host_IP
  redisPort: host_port
  redisDb: database_index
  redisPassword: password
edge_config:
  synchronizerMode: 0
  redisBasedConfigCache: true

예:

edgemicro:
  redisHost: 192.168.4.77
  redisPort: 6379
  redisDb: 0
  redisPassword: codemaster
edge_config:
  synchronizerMode: 0
  redisBasedConfigCache: true

구성 속성

동기화 도구 사용을 지원하기 위해 다음 구성 속성이 추가되었습니다.

속성 설명
edge_config.synchronizerMode 0 또는 1

0 (기본값)인 경우 Edge Microgateway가 표준 모드로 작동합니다.

1이면 Edge Microgateway 인스턴스를 시작하여 동기화 도구로 작동합니다. 이 모드에서는 인스턴스가 Apigee Edge에서 구성 데이터를 가져와 로컬 Redis 데이터베이스에 저장합니다. 이 인스턴스는 API 프록시 요청을 처리할 수 없습니다. 유일한 목적은 Apigee Edge에서 구성 데이터를 폴링하고 로컬 데이터베이스에 쓰는 것입니다. 그런 다음 데이터베이스에서 읽도록 다른 마이크로 게이트웨이 인스턴스를 구성해야 합니다.

edge_config.redisBasedConfigCache true 또는 false true이면 Edge Microgateway 인스턴스가 Apigee Edge가 아닌 Redis 데이터베이스에서 구성 데이터를 가져옵니다. Redis 데이터베이스는 동기화 도구가 쓰기로 구성된 데이터베이스와 동일해야 합니다. Redis 데이터베이스를 사용할 수 없거나 데이터베이스가 비어 있으면 마이크로 게이트웨이는 구성을 위해 기존 cache-config.yaml 파일을 찾습니다.

false (기본값)인 경우 Edge Microgateway 인스턴스는 평소와 같이 Apigee Edge에서 구성 데이터를 가져옵니다.

edgemicro.config_change_poll_interval 시간 간격(초) 동기화 도구가 Apigee Edge에서 데이터를 가져오는 폴링 간격을 지정합니다.

플러그인의 제외 URL 구성

지정된 URL의 플러그인 처리를 건너뛰도록 마이크로 게이트웨이를 구성할 수 있습니다. 이러한 '제외' URL은 전역적으로 (모든 플러그인에 대해) 또는 특정 플러그인에 대해 구성할 수 있습니다.

예를 들면 다음과 같습니다.

...
edgemicro:
  ...
  plugins:
    excludeUrls: '/hello,/proxy_one' # global exclude urls
    sequence:
      - oauth
      - json2xml
      - quota
json2xml:
  excludeUrls: '/hello/xml'  # plugin level exclude urls
...

이 예시에서 플러그인은 경로가 /hello 또는 /proxy_one인 수신 API 프록시 호출을 처리하지 않습니다. 또한 경로에 /hello/xml가 있는 API의 경우 json2xml 플러그인이 건너뜁니다.

환경 변수 값으로 구성 속성 설정

구성 파일에서 태그를 사용하여 환경 변수를 지정할 수 있습니다. 지정된 환경 변수 태그가 실제 환경 변수 값으로 대체됩니다. 대체 항목은 메모리에만 저장되며 원래 구성 또는 캐시 파일에는 저장되지 않습니다.

이 예에서 key 속성은 TARGETS_SSL_CLIENT_KEY 환경 변수의 값으로 대체됩니다.

targets:
  - ssl:
      client:
        key: <E>TARGETS_SSL_CLIENT_KEY</E>
        cert: <E>TARGETS_SSL_CLIENT_CERT</E>
        passphrase: <E>TARGETS_SSL_CLIENT_PASSPHRASE</E>

이 예에서는 <n> 태그가 정수 값을 나타내는 데 사용됩니다. 양의 정수만 지원됩니다.

edgemicro:
  port: <E><n>EMG_PORT</n></E>

이 예에서는 <b> 태그가 불리언(예: true 또는 false) 값을 나타내는 데 사용됩니다.

quotas:
  useRedis: <E><b>EMG_USE_REDIS</b></E>