4장. APIcast 정책
APIcast 정책은 APIcast가 작동하는 방식을 수정하는 기능 단위입니다. APIcast 수정 방법을 제어하도록 정책을 활성화, 비활성화 및 구성할 수 있습니다. 정책을 사용하여 기본 APIcast 배포에서 사용할 수 없는 기능을 추가합니다. 자체 정책을 생성하거나 Red Hat 3scale에서 제공하는 표준 정책을 사용할 수 있습니다.
다음 주제에서는 표준 APIcast 정책, 정책 체인 생성, 사용자 지정 APIcast 정책 생성에 대한 정보를 제공합니다.
4.1. 기본 3scale API Management APIcast 동작을 변경하는 표준 정책
3scale은 APIcast가 요청 및 응답을 처리하는 방법을 수정하는 기능 단위인 기본 제공 표준 정책을 제공합니다. APIcast 수정 방법을 제어하도록 정책을 활성화, 비활성화 또는 구성할 수 있습니다.
자세한 내용은 3scale 관리 포털에서 정책 활성화를 참조하십시오. 3scale은 다음과 같은 표준 정책을 제공합니다.
- 3scale API Management Auth Caching
- 3scale API Management Batcher
- 3scale API Management Referrer
- 익명 액세스
- Camel 서비스
- 조건부 정책
- 콘텐츠 캐싱
- CORS 요청 처리
- 사용자 정의 지표
- Echo
- 엣지 제한
- 헤더 수정
- HTTP 상태 코드 덮어쓰기
- HTTP2 끝점
- IP 확인
- JWT 클레임 확인
- 유동성 컨텍스트 디버그
- 로깅
- 유지 관리 모드
- NGINX 필터
- OAuth 2.0 상호 TLS 클라이언트 인증
- OAuth 2.0 토큰 인트로스펙션
- On Fail
- 프록시 서비스
- 속도 제한 헤더
- 응답 요청 콘텐츠 제한
- Retry
- RH-SSO/Keycloak 역할 확인
- 라우팅
- SOAP
- TLS 클라이언트 인증서 유효성 검사
- TLS 종료
- 업스트림
- 업스트림 연결
- 업스트림 상호 TLS
- URL 재작성
- 캡처를 사용하여 URL 재작성
- WebSocket
4.1.1. 3scale API Management 관리 포털에서 정책 활성화
관리 포털에서 각 3scale API 제품에 대해 하나 이상의 정책을 활성화할 수 있습니다.
사전 요구 사항
- 3scale API 제품입니다.
프로세스
- 3scale 관리 포털에 로그인합니다.
- 관리 포털 대시보드에서 정책을 활성화할 API 제품을 선택합니다.
- [ your_product_name] > Integration > Policies 로 이동합니다.
- 정책 추가를 클릭합니다.
- 추가할 정책을 선택하고 필수 필드에 값을 입력합니다.
- 정책 체인 업데이트를 클릭합니다.
4.1.2. 3scale API Management 인증 캐싱
항상 정책 체인의 APIcast 정책 앞에 auth 캐싱 정책을 배치합니다.
3scale Auth 캐싱 정책에서는 APIcast에 대한 인증 호출을 캐시합니다. 운영 모드를 선택하여 캐시 작업을 구성할 수 있습니다.
3scale Auth 캐싱은 다음 모드에서 사용할 수 있습니다.
1. Strict - 인증된 호출만 캐시합니다.
"strict" 모드는 권한 있는 호출만 캐시합니다. 정책이 "strict" 모드에서 실행되고 있고 호출이 실패하거나 거부되면 정책은 캐시 항목을 무효화합니다. 백엔드에 연결할 수 없게 되면 캐시된 상태와 관계없이 모든 캐시된 호출이 거부됩니다.
2. 복원력 - 백엔드가 중단될 때 마지막 요청에 따라 인증됩니다.
"Resilient" 모드는 권한 있고 거부된 호출을 모두 캐시합니다. 정책이 "resilient" 모드에서 실행 중인 경우 실패한 호출은 기존 캐시 항목을 무효화하지 않습니다. 백엔드에 연결할 수 없게 되면 캐시 조회가 캐시된 상태에 따라 계속 인증되거나 거부됩니다.
3. allow - 백엔드가 다운되면 이전 및 거부되지 않는 한 모든 것을 허용합니다.
"허용" 모드는 권한 있는 호출과 거부된 호출을 모두 캐시합니다. 정책이 "허용" 모드에서 실행 중인 경우 캐시된 호출은 캐시된 상태에 따라 계속 거부되거나 허용됩니다. 그러나 새 호출은 권한 있는 것으로 캐시됩니다.
"허용" 모드에서 작동하면 보안에 영향을 미칩니다. "허용" 모드를 사용할 때 이러한 영향을 미치는 것으로 간주하고 주의하십시오.
4. none - 캐싱을 비활성화합니다.
"없음" 모드는 캐싱을 비활성화합니다. 이 모드는 정책을 활성 상태로 유지하지만 캐싱을 사용하지 않으려는 경우에 유용합니다.
구성 속성
속성 | description | 값 | 필수 항목입니다. |
---|---|---|---|
caching_type |
| 데이터 유형: 열거된 문자열 [resilient, strict, allow, none] | 제공됨 |
정책 오브젝트 예
{ "name": "caching", "version": "builtin", "configuration": { "caching_type": "allow" } }
정책을 구성하는 방법에 대한 자세한 내용은 문서의 정책 체인 생성 섹션을 참조하십시오.
4.1.3. 3scale API Management Batcher
각 APIcast 인스턴스에는 자체 로컬 권한 부여 캐시가 있습니다. 첫 번째 호출은 서비스, 메트릭 및 인증 정보의 특정 조합에 대해 API 백엔드에 호출을 전달하기 전에 항상 3scale에 대해 권한이 부여됩니다.
응답이 성공하면 이 조합에 대한 로컬 캐시에 "OK"를 저장합니다. APIcast는 API 백엔드에서 응답을 가져온 후 캐시를 업데이트한 다음 이를 사용하여 후속 호출을 승인합니다.
잘못된 인증 정보로 인해 3scale에 대한 요청이 실패하면 "OK" 상태가 로컬 캐시에서 제거됩니다. APIcast 인스턴스 한 개를 사용하면 한 번의 호출로 제한을 초과할 수 있으며 N 인스턴스를 사용하면 N을 초과할 수 있습니다.
분당 속도 제한은 세계 시계의 두 번째 0에서 시작됩니다.
3scale Batcher 정책은 표준 APIcast 권한 부여 메커니즘에 대한 대안을 제공하며, 이 메커니즘에서 APIcast가 수신하는 각 API 요청에 대해 3scale 백엔드(Service Management API)를 호출합니다.
이 정책을 사용하려면 정책 체인의 3scale APIcast
정책 앞에 3scale Batcher
를 배치해야합니다.
3scale Batcher 정책은 권한 부여 상태를 캐시하고 사용 보고서를 일괄 처리하여 3scale 백엔드에 대한 요청 수를 크게 줄입니다. 3scale Batcher 정책을 사용하면 대기 시간을 줄이고 처리량을 늘려 APIcast 성능을 개선할 수 있습니다.
3scale Batcher 정책이 활성화되면 APIcast는 다음 권한 부여 흐름을 사용합니다.
각 요청에서 정책은 인증 정보가 캐시되는지 확인합니다.
- 인증 정보가 캐시되면 정책은 3scale 백엔드를 호출하는 대신 캐시된 권한 부여 상태를 사용합니다.
- 인증 정보가 캐시되지 않은 경우 정책은 백엔드를 호출하고 구성 가능한 TTL(Time to Live)을 사용하여 권한 부여 상태를 캐시합니다.
- 3scale 백엔드에 대한 요청에 해당하는 사용량을 즉시 보고하는 대신 정책은 사용 카운터를 누적하여 일괄적으로 백엔드에 보고합니다. 별도의 스레드는 구성 가능한 빈도를 사용하여 집계된 사용 카운터를 단일 호출로 3scale 백엔드에 보고합니다.
3scale Batcher 정책은 처리량을 개선하지만 정확도가 감소합니다. 사용량 제한과 현재 사용률은 3scale에 저장되고 APIcast는 3scale 백엔드를 호출할 때 올바른 권한 부여 상태만 가져올 수 있습니다. 3scale Batcher 정책이 활성화되면 APIcast가 3scale에 호출을 보내지 않는 기간이 있습니다. 이 기간 동안 호출을 수행하는 애플리케이션은 정의된 제한을 초과할 수 있습니다.
처리량이 속도 제한의 정확성보다 중요한 경우 높은 로드 API에 이 정책을 사용합니다. 3scale Batcher 정책은 보고 빈도 및 권한 부여 TTL이 속도 제한 기간보다 훨씬 적을 때 정확도로 더 나은 결과를 제공합니다. 예를 들어, 제한이 일별이고 보고 빈도 및 권한 부여 TTL이 몇 분으로 구성된 경우입니다.
3scale Batcher 정책은 다음 구성 설정을 지원합니다.
auths_ttl
: 권한 부여 캐시가 만료될 때 TTL을 초 단위로 설정합니다.-
현재 호출에 대한 권한 부여가 캐시되면 APIcast는 캐시된 값을 사용합니다.
auths_ttl
매개변수에 설정된 시간 후에 APIcast는 캐시를 제거하고 3scale 백엔드를 호출하여 권한 부여 상태를 검색합니다. -
auths_ttl
매개변수를0
이 아닌 값으로 설정합니다.auths_ttl
을 값0
으로 설정하면 요청이 캐시될 때 권한 부여 카운터가 업데이트되어 속도 제한이 적용되지 않습니다.
-
현재 호출에 대한 권한 부여가 캐시되면 APIcast는 캐시된 값을 사용합니다.
-
batch_report_seconds
: APIcast가 3scale 백엔드로 전송하는 배치 보고 빈도를 설정합니다. 기본값은10
초입니다.
4.1.4. 3scale API Management Referrer
3scale Referrer 정책을 사용하면 Referrer 필터링 기능을 사용할 수 있습니다. 서비스 정책 체인에서 정책을 활성화하면 APIcast는 3scale Referrer 정책 값을 서비스 관리 API 에 upwards AuthRep 호출으로 보냅니다. 3scale Referrer 정책 값은 호출의 referrer
매개변수로 전송됩니다.
Referrer Filtering 작동 방식에 대한 자세한 내용은 인증 패턴 의 참조 섹션을 참조하십시오.
4.1.5. 익명 액세스
익명 액세스 정책은 인증 없이 서비스를 노출합니다. 예를 들어 인증 매개 변수를 전송하도록 조정할 수 없는 레거시 애플리케이션에 유용할 수 있습니다. 익명 액세스 정책은 API Key 및 App Id / App Key 인증 옵션 만 사용하는 서비스를 지원합니다. 인증 정보가 제공되지 않은 API 요청에 대해 정책을 활성화하면 APIcast는 정책에 구성된 기본 인증 정보를 사용하여 호출에 권한을 부여합니다. API 호출을 인증하려면 구성된 인증 정보가 있는 애플리케이션이 있어야 하며 활성 상태여야 합니다.
애플리케이션 계획을 사용하여 기본 자격 증명에 사용되는 애플리케이션에 대한 속도 제한을 구성할 수 있습니다.
정책 체인에서 이 두 정책을 함께 사용할 때 APIcast 정책 앞에 익명 액세스 정책을 배치해야 합니다.
정책에 필요한 구성 속성은 다음과 같습니다.
auth_type
아래 대안 중 하나에서 값을 선택하고 속성이 API에 대해 구성된 인증 옵션에 해당하는지 확인합니다.
app_id_and_app_key
App ID / 앱 키 인증 옵션의 경우
user_key
API 키 인증 옵션의 경우
app_id ( app_id_and_app_key 인증 유형 전용)
API 호출과 함께 제공되는 인증 정보가 없는 경우 권한 부여에 사용할 애플리케이션의 앱 ID입니다.
app_key ( app_id_and_app_key 인증 유형 전용)
API 호출과 함께 제공되는 인증 정보가 없는 경우 권한 부여에 사용할 애플리케이션의 앱 키입니다.
user_key ( user_key auth_type만 해당)
API 호출과 함께 제공되는 인증 정보가 없는 경우 권한 부여에 사용할 애플리케이션의 API 키입니다.
그림 4.1. 익명 액세스 정책
4.1.6. Camel 서비스
Camel 서비스 정책을 사용하여 3scale 트래픽이 정의된 Apache Camel 프록시를 통해 전송되는 HTTP 프록시를 정의할 수 있습니다. 이 경우 Camel은 역방향 HTTP 프록시로 작동합니다. 여기서 APIcast는 트래픽을 Camel로 전송하고 Camel은 트래픽을 API 백엔드로 보냅니다.
다음 예제에서는 트래픽 흐름을 보여줍니다.
3scale 백엔드로 전송된 모든 APIcast 트래픽은 Camel 프록시를 사용하지 않습니다. 이 정책은 Camel 프록시와 APIcast와 API 백엔드 간의 통신에만 적용됩니다.
프록시를 통해 모든 트래픽을 보내려면 HTTP_PROXY
환경 변수를 사용해야 합니다.
- Camel 서비스 정책은 도메인 이름이 여러 IP 주소로 확인되면 로드 밸런싱 업스트림의 APIcast 기능을 비활성화합니다. Camel 서비스는 업스트림 서비스의 DNS 확인을 관리합니다.
-
HTTP_PROXY
,HTTPS_PROXY
또는ALL_PROXY
매개변수가 정의된 경우 이 정책은 해당 값을 덮어씁니다. - 프록시 연결은 인증을 지원하지 않습니다. 인증에 헤더 변경 정책을 사용합니다.
설정
다음 예제에서는 정책 체인 구성을 보여줍니다.
"policy_chain": [ { "name": "apicast.policy.apicast" }, { "name": "apicast.policy.camel", "configuration": { "all_proxy": "http://192.168.15.103:8080/", "http_proxy": "http://192.168.15.103:8080/", "https_proxy": "http://192.168.15.103:8443/" } } ]
all_proxy
값은 http_proxy
또는 https_proxy
가 정의되지 않은 경우 사용됩니다.
사용 사례 예
Camel 서비스 정책은 Apache Camel을 사용하여 3scale에 보다 세분화된 정책과 변환을 적용하도록 설계되었습니다. 이 정책은 HTTP 및 HTTPS를 통한 Apache Camel과의 통합을 지원합니다. 자세한 내용은 6장. Fuse의 정책 확장을 사용하여 3scale API Management 메시지 콘텐츠 변환 에서 참조하십시오.
일반 HTTP 프록시 정책 사용에 대한 자세한 내용은 4.1.25절. “프록시 서비스” 을 참조하십시오.
프로젝트 예
GitHub의 Camel 프록시 정책에서 사용 가능한 camel-netty-proxy
예제를 참조하십시오. 이 예제 프로젝트는 응답 본문을 API 백엔드에서 대문자로 변환하는 HTTP 프록시를 보여줍니다.
4.1.7. 조건부 정책
조건부 정책은 정책 체인이 포함되어 있으므로 다른 APIcast 정책과 다릅니다. 각 nginx 단계에서 평가되는 조건을 정의합니다(예: 액세스,재작성,로그 등). 조건이 true이면 조건 정책은 체인에 포함된 각 정책에 대해 해당 단계를 실행합니다.
APIcast 조건 정책은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
다음 예제에서는 Conditional Policy에서 다음 조건을 정의한다고 가정합니다. request 메서드는 POST입니다
.
APIcast --> Caching --> Conditional --> Upstream | v Headers | v URL Rewriting
이 경우 요청이 POST
인 경우 각 단계의 실행 순서는 다음과 같습니다.
- APIcast
- 캐싱
- headers
- URL 재작성
- 업스트림
요청이 POST
가 아닌 경우 각 단계의 실행 순서는 다음과 같습니다.
- APIcast
- 캐싱
- 업스트림
조건
조건 정책 체인에서 정책을 실행할지 여부를 결정하는 조건은 JSON 을 사용하여 표현하고 유동 템플릿 작성을 사용할 수 있습니다.
이 예에서는 요청 경로가 /example_path
인지 확인합니다.
{ "left": "{{ uri }}", "left_type": "liquid", "op": "==", "right": "/example_path", "right_type": "plain" }
왼쪽 및 오른쪽 피연산자는 모두 liquid 또는 일반 문자열로 평가할 수 있습니다. 일반 문자열이 기본값입니다.
작업을 및 또는
결합할 수 있습니다. 이 구성은 이전 예와 또는
와Backend
헤더 값과 동일한지 확인합니다.
{ "operations": [ { "left": "{{ uri }}", "left_type": "liquid", "op": "==", "right": "/example_path", "right_type": "plain" }, { "left": "{{ headers['Backend'] }}", "left_type": "liquid", "op": "==", "right": "test_upstream", "right_type": "plain" } ], "combine_op": "and" }
자세한 내용은 정책 구성 스키마를 참조하십시오.
liquid에서 지원되는 변수
- URI
- host
- remote_addr
- headers['Some-Header']
업데이트된 변수 목록은 여기에서 확인할 수 있습니다. ngx_variable.lua
이 예제에서는 요청의 Backend
헤더가 스테이징 인 경우 업스트림 정책을 실행합니다.
{ "name":"conditional", "version":"builtin", "configuration":{ "condition":{ "operations":[ { "left":"{{ headers['Backend'] }}", "left_type":"liquid", "op":"==", "right":"staging" } ] }, "policy_chain":[ { "name":"upstream", "version": "builtin", "configuration":{ "rules":[ { "regex":"/", "url":"http://my_staging_environment" } ] } } ] } }
4.1.8. 콘텐츠 캐싱
콘텐츠 캐싱 정책을 사용하면 사용자 지정 조건에 따라 캐싱을 활성화하고 비활성화할 수 있습니다. 이러한 조건은 정책에서 업스트림 응답을 사용할 수 없는 클라이언트 요청에만 적용할 수 있습니다.
콘텐츠 캐싱 정책이 정책 체인에 있는 경우 APIcast는 요청 업스트림을 보내기 전에 HEAD
요청을 GET
요청으로 변환합니다. 이 변환을 원하지 않는 경우 정책 체인에 콘텐츠 캐싱 정책을 추가하지 마십시오.
cache-control 헤더가 전송되면 APIcast에서 설정한 시간 초과보다 우선합니다.
다음 예제 구성은 Method가 GET인 경우 응답을 캐시합니다.
설정 예
{ "name": "apicast.policy.content_caching", "version": "builtin", "configuration": { "rules": [ { "cache": true, "header": "X-Cache-Status-POLICY", "condition": { "combine_op": "and", "operations": [ { "left": "{{method}}", "left_type": "liquid", "op": "==", "right": "GET" } ] } } ] } }
지원되는 구성
-
POST
,PUT
또는DELETE
메서드 중 하나에 대해 Content Caching 정책을 disabled로 설정합니다. - 하나의 규칙이 일치하고 캐시를 활성화하면 실행이 중지되고 비활성화됩니다. 여기서는 우선순위에 따라 정렬하는 것이 중요합니다.
업스트림 응답 헤더
NGINX proxy_cache_valid
지시문 정보는 APICAST_CACHE_ STATUS_CODES 및 APICAST_CACHE
_MAX_TIME 에서만 전역적으로 설정할 수 있습니다. 업스트림에 시간 초과와 관련된 다른 동작이 필요한 경우 Cache-Control
헤더를 사용합니다.
4.1.9. CORS 요청 처리
CORS(Cross Origin Resource Sharing) 요청 처리 정책을 사용하면 다음을 지정할 수 있으므로 CORS 동작을 제어할 수 있습니다.
- 허용되는 헤더
- 허용되는 방법
- 허용되는 origin 헤더
- 허용된 인증 정보
- 최대 사용 기간
CORS 요청 처리 정책은 지정되지 않은 모든 CORS 요청을 차단합니다.
정책 체인에서 이 두 정책을 함께 사용할 때 APIcast 정책 앞에 CORS 요청 처리 정책을 배치해야 합니다.
구성 속성
속성 | description | 값 | 필수 항목입니다. |
---|---|---|---|
allow_headers |
| 데이터 유형: 문자열 배열은 CORS 헤더여야 합니다. | 제공되지 않음 |
allow_methods |
| 데이터 유형: 열거된 문자열의 배열 [GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT] | 제공되지 않음 |
allow_origin |
| 데이터 유형: 문자열 | 제공되지 않음 |
allow_credentials |
| 데이터 유형: 부울 | 제공되지 않음 |
max_age |
| 데이터 유형: 정수 | 제공되지 않음 |
정책 오브젝트 예
{ "name": "cors", "version": "builtin", "configuration": { "allow_headers": [ "App-Id", "App-Key", "Content-Type", "Accept" ], "allow_credentials": true, "allow_methods": [ "GET", "POST" ], "allow_origin": "https://example.com", "max_age" : 200 } }
정책을 구성하는 방법에 대한 자세한 내용은 3scale API Management 관리 포털의 정책 체인 수정을 참조하십시오.
4.1.10. 사용자 정의 지표
Custom Metrics 정책은 업스트림 API에서 보낸 응답 후 지표를 추가하는 가용성을 추가합니다. 이 정책의 주요 사용 사례는 응답 코드 상태, 헤더 또는 다른 NGINX 변수를 기반으로 메트릭을 추가하는 것입니다.
사용자 정의 메트릭의 제한 사항
- 요청이 업스트림 API로 전송되기 전에 인증이 발생하면 백엔드에 대한 두 번째 호출이 생성되어 새 메트릭을 업스트림 API에 보고합니다.
- 이 정책은 일괄 처리 정책에서는 작동하지 않습니다.
- 정책이 지표 값을 내보내려면 관리 포털에서 메트릭을 생성해야 합니다.
요청 흐름의 예
다음 차트는 인증이 캐시되지 않은 경우의 요청 흐름 예와 인증이 캐시될 때의 흐름을 보여줍니다.
구성 예
이 정책은 업스트림 API에서 400 상태를 반환하는 경우 헤더에 의해 메트릭 오류를 늘립니다.
{ "name": "apicast.policy.custom_metrics", "configuration": { "rules": [ { "metric": "error", "increment": "{{ resp.headers['increment'] }}", "condition": { "operations": [ { "right": "{{status}}", "right_type": "liquid", "left": "400", "op": "==" } ], "combine_op": "and" } } ] } }
이 정책은 업스트림 API에서 200 상태를 반환하는 경우 status_code 정보를 사용하여 hits 메트릭을 늘립니다.
{ "name": "apicast.policy.custom_metrics", "configuration": { "rules": [ { "metric": "hits_{{status}}", "increment": "1", "condition": { "operations": [ { "right": "{{status}}", "right_type": "liquid", "left": "200", "op": "==" } ], "combine_op": "and" } } ] } }
4.1.11. Echo
Echo 정책은 들어오는 요청을 선택적 HTTP 상태 코드와 함께 클라이언트에 다시 출력합니다.
구성 속성
속성 | description | 값 | 필수 항목입니다. |
---|---|---|---|
status | Echo 정책이 클라이언트에 반환되는 HTTP 상태 코드 | 데이터 유형: 정수 | 제공되지 않음 |
종료 |
Echo 정책이 사용할 종료 모드를 지정합니다. | 데이터 유형: 열거된 문자열 [request, set] | 제공됨 |
정책 오브젝트 예
{ "name": "echo", "version": "builtin", "configuration": { "status": 404, "exit": "request" } }
정책을 구성하는 방법에 대한 자세한 내용은 설명서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.12. 엣지 제한
Edge 제한 정책은 백엔드 API로 전송되는 트래픽에 대해 유연한 속도 제한을 제공하는 것을 목표로 하며 기본 3scale 권한 부여와 함께 사용할 수 있습니다. 정책에서 지원하는 사용 사례의 몇 가지 예는 다음과 같습니다.
-
최종 사용자 속도 제한: 요청의 Authorization 헤더에 전달된 JWT 토큰의
하위
(주체) 클레임 값에 따른 속도 제한입니다. 이는{{ jwt.sub }}
로 구성됩니다. - 초당 요청(RPS) 속도 제한.
- 서비스당 글로벌 속도 제한: 애플리케이션이 아닌 서비스당 제한을 적용합니다.
- 동시 연결 제한: 허용되는 동시 연결 수를 설정합니다.
제한 유형
이 정책은 lua-resty-limit-traffic 라이브러리에서 제공하는 다음 유형의 제한을 지원합니다.
leaky_bucket_limiters
평균 요청 수와 최대 버스트 크기를 기반으로 하는 누출 버킷 알고리즘에 기반합니다.
fixed_window_limiters
고정 시간 창에 따라 마지막 n초입니다.
connection_limiters
동시 연결 수에 따라 다릅니다.
서비스별 제한 범위를 지정하거나 전역적으로 지정할 수 있습니다.
제한 정의
제한에는 IP 주소, 서비스, 엔드포인트, 식별자, 특정 헤더의 값 및 기타 엔티티와 같이 제한을 정의하는 데 사용되는 엔터티를 인코딩하는 키가 있습니다. 이 키는 제한자의 키
매개변수에 지정됩니다.
key
는 다음 속성으로 정의된 오브젝트입니다.
name
키 이름을 정의합니다. 범위에서 고유해야 합니다.
scope
키의 범위를 정의합니다. 지원되는 범위는 다음과 같습니다.
-
하나의 서비스(서비스)에 영향을 주는 서비스 범위당 .
-
모든 서비스(글로벌 )에 영향을 미치는
전역
범위.
-
하나의 서비스(서비스)에 영향을 주는 서비스 범위당 .
name_type _
name
값이 평가되는 방법을 정의합니다.-
일반 텍스트(
일반
) -
제품 상세 정보 (Er
quid
)
-
일반 텍스트(
각 제한에는 유형에 따라 다른 일부 매개변수도 있습니다.
leaky_bucket_limiters
속도
,버스트
.속도
지연 없이 초당 요청할 수 있는 요청 수를 정의합니다.
burst
허용된 속도를 초과할 수 있는 초당 요청 수를 정의합니다. 인위적인 지연은 유량에 의해 지정된 허용된 속도 이상의 요청에 대해 도입됩니다.
burst
에 정의된 것보다 초당 더 많은 요청으로 속도를 초과하면 요청이 거부됩니다.
fixed_window_limiters
count
,창
.count
는창에
정의된 초 수당 수행할 수 있는 요청 수를 정의합니다.connection_limiters
Conn
,burst
,delay
.Conn
허용되는 최대 동시 연결 수를 정의합니다. 초당
버스트
연결로 해당 수를 초과할 수 있습니다.delay
제한을 초과하는 연결을 지연할 시간(초)을 정의합니다.
예
service_A에 분당 10개의 요청을 허용합니다.
{ "key": { "name": "service_A" }, "count": 10, "window": 60 }
1초의 지연으로 10인 버스트와 100개의 연결을 허용합니다.
{ "key": { "name": "service_A" }, "conn": 100, "burst": 10, "delay": 1 }
각 서비스에 대해 여러 제한을 정의할 수 있습니다. 여러 제한이 정의되면 요청이 거부되거나 하나 이상의 제한에 도달하는 경우 지연될 수 있습니다.
유동 템플릿 작성
Edge 제한 정책을 사용하면 키에서 리쿼드 변수를 지원하여 동적 키에 대한 제한을 지정할 수 있습니다. 이를 위해 키의 name_type
매개 변수를 liquid
로 설정해야 하며 name
매개 변수는 Liquid 변수를 사용할 수 있습니다. 예를 들어 클라이언트 IP 주소의 경우 {{ remote_addr }}
또는 JWT 토큰의 하위 클레임의 경우 {{ jwt.
입니다.
sub
}}
예제
{ "key": { "name": "{{ jwt.sub }}", "name_type": "liquid" }, "count": 10, "window": 60 }
리쿼드 지원에 대한 자세한 내용은 5.1절. “정책에서 변수 및 필터 사용” 을 참조하십시오.
조건 적용
각 제한자에게는 제한자가 적용되는 시기를 정의하는 조건이 있어야 합니다. 조건은 제한자의 condition
속성에 지정됩니다.
condition
은 다음 속성으로 정의됩니다.
combine_op
작업 목록에 적용된 부울 연산자입니다.
또는
및
의 값이 지원됩니다.작업
평가해야 하는 조건 목록입니다. 각 작업은 다음 속성을 사용하여 개체로 표시됩니다.
left
작업의 왼쪽 부분입니다.
left_type
왼쪽
속성을 평가하는 방법(일반 또는 유동)입니다.right
작업의 올바른 부분입니다.
right_type
올바른
속성(일반 또는 유동)을 평가하는 방법op
왼쪽과 오른쪽 부분 사이에 적용되는 Operator입니다. 다음 두 값이 지원됩니다.
==
(equals) 및!=
(동일하지 않음).
예제
"condition": { "combine_op": "and", "operations": [ { "op": "==", "right": "GET", "left_type": "liquid", "left": "{{ http_method }}", "right_type": "plain" } ] }
속도 제한 카운터의 스토리지 구성
기본적으로 Edge 제한 정책은 속도 제한 카운터에 OpenResty 공유 사전을 사용합니다. 그러나 공유 사전 대신 외부 Redis 서버를 사용할 수 있습니다. 이 기능은 여러 APIcast 인스턴스가 배포될 때 유용할 수 있습니다. redis_url
매개변수를 사용하여 Redis 서버를 구성할 수 있습니다.
오류 처리
제한자는 다음 매개변수를 지원하여 오류 처리 방법을 구성합니다.
limits_exceeded_error
구성된 제한이 초과될 때 클라이언트에 반환되는 오류 상태 코드 및 메시지를 지정합니다. 다음 매개변수를 구성해야 합니다.
status_code
제한이 초과된 요청의 상태 코드입니다. 기본값:
429
.error_handling
다음 옵션을 사용하여 오류를 처리하는 방법을 지정합니다.
종료
처리 요청을 중지하고 오류 메시지를 반환합니다.
log
처리 요청을 완료하고 출력 로그를 반환합니다.
configuration_error
잘못된 구성의 경우 클라이언트에 반환되는 오류 상태 코드와 메시지를 지정합니다. 다음 매개변수를 구성해야 합니다.
status_code
구성 문제가 있을 때 상태 코드입니다. 기본값:
500
.error_handling
다음 옵션을 사용하여 오류를 처리하는 방법을 지정합니다.
종료
처리 요청을 중지하고 오류 메시지를 반환합니다.
log
처리 요청을 완료하고 출력 로그를 반환합니다.
4.1.13. 헤더 수정
헤더 조정 정책을 사용하면 기존 헤더를 수정하거나 추가 헤더를 정의하여 들어오는 요청 또는 응답에서 추가하거나 제거할 수 있습니다. 응답 헤더와 요청 헤더를 모두 수정할 수 있습니다.
헤더 조정 정책은 다음 구성 매개변수를 지원합니다.
요청
요청 헤더에 적용할 작업 목록
응답
응답 헤더에 적용할 작업 목록
각 작업은 다음 매개변수로 구성됩니다.
-
Op
: 적용할 작업을 지정합니다.add
작업은 기존 헤더에 값을 추가합니다.set
작업은 헤더와 값을 생성하고 이미 존재하는 경우 기존 헤더의 값을 덮어씁니다.푸시
작업은 헤더와 값을 생성하지만 이미 존재하는 경우 기존 헤더의 값을 덮어쓰지 않습니다. 대신push
는 기존 헤더에 값을 추가합니다.삭제
작업은 헤더를 제거합니다. -
header
: 생성 또는 수정할 헤더를 지정하고 헤더 이름으로 사용할 모든 문자열(예:Custom-Header
)일 수 있습니다. -
value_type
: 헤더 값이 평가되는 방법을 정의하고일반
텍스트 또는 리쿼리드 템플릿으로 평가를 위한유동성
일 수 있습니다. 자세한 내용은 5.1절. “정책에서 변수 및 필터 사용”의 내용을 참조하십시오. -
value
: 헤더에 사용할 값을 지정합니다. 값 유형 "liquid"의 경우 값은{{ variable_from_context }}
형식이어야 합니다. 삭제할 때 필요하지 않습니다.
정책 오브젝트 예
{ "name": "headers", "version": "builtin", "configuration": { "response": [ { "op": "add", "header": "Custom-Header", "value_type": "plain", "value": "any-value" } ], "request": [ { "op": "set", "header": "Authorization", "value_type": "plain", "value": "Basic dXNlcm5hbWU6cGFzc3dvcmQ=" }, { "op": "set", "header": "Service-ID", "value_type": "liquid", "value": "{{service.id}}" } ] } }
정책을 구성하는 방법에 대한 자세한 내용은 설명서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.14. HTTP 상태 코드 덮어쓰기
API 공급자는 API 제품에 HTTP 상태 코드 덮어쓰기 정책을 추가할 수 있습니다. 이 정책을 사용하면 지정하는 응답 코드로 업스트림 응답 코드를 변경할 수 있습니다. 3scale은 HTTP 상태 코드 덮어쓰기 정책을 업스트림 서비스에서 보낸 응답 코드에 적용합니다. 즉, 3scale이 노출하는 API에서 상황에 맞지 않는 코드를 반환하는 경우 HTTP 상태 코드 덮어쓰기 정책을 구성하여 애플리케이션에 의미 있는 응답 코드로 해당 코드를 변경할 수 있습니다.
정책 체인에서 변경하려는 응답 코드를 생성하는 모든 정책은 HTTP 상태 코드 덮어쓰기 정책 앞에 있어야 합니다. 변경하려는 상태 코드를 생성하는 정책이 없는 경우 HTTP 상태 코드 덮어쓰기 정책의 정책 체인 위치는 중요하지 않습니다.
관리 포털에서 제품의 정책 체인에 HTTP 상태 코드 덮어쓰기 정책을 추가합니다. 정책 체인에서 정책을 클릭하여 변경하려는 업스트림 응답 코드와 대신 반환하려는 응답 코드를 지정합니다. 덮어쓰려는 각 추가 업스트림 응답 코드에 대해 더하기 기호를 클릭합니다. 예를 들어 HTTP 상태 코드 덮어쓰기 정책을 사용하여 업스트림 201
, "Created", 응답 코드, 200
, "OK" 응답 코드를 변경할 수 있습니다.
변경하려는 응답 코드의 또 다른 예는 콘텐츠 제한을 초과할 때의 응답입니다. 업스트림에서는 응답 코드가 414
인 요청 코드가 너무 길면 페이로드 413
을 너무 크게 반환할 수 있습니다.
관리 포털에서 HTTP 상태 코드 덮어쓰기 정책을 추가하는 대안은 정책 체인 구성 파일과 함께 3scale API를 사용하는 것입니다.
예제
정책 체인 구성 파일의 다음 JSON 구성이 두 개의 업스트림 응답 코드를 덮어씁니다.
{ "name": "statuscode_overwrite", "version": "builtin", "configuration": { "http_statuses": [ { "upstream": 201, "apicast": 200 }, { "upstream": 413, "apicast": 414 } ] } }
4.1.15. HTTP2 끝점
HTTP2 끝점 정책은 요청과 APIcast를 보내는 소비자 애플리케이션 간에 HTTP/2 프로토콜 및 원격 프로시저 호출(gRPC) 연결을 활성화합니다. HTTP2 끝점 정책이 제품의 정책 체인에 있는 경우 요청을 수행하는 소비자 애플리케이션에서 업스트림 서비스에 대한 전체 통신 흐름은 HTTP/2 프로토콜 및 gRPC를 사용할 수 있습니다.
HTTP2 끝점 정책이 정책 체인에 있는 경우:
-
요청 인증은 JSON 웹 토큰 또는
App_ID
및App_Key
쌍을 통해야 합니다. API 키 인증은 지원되지 않습니다. - gRPC 끝점은 TLS(Transport Layer Security)를 종료합니다.
- HTTP2 끝점 정책은 3scale APIcast 정책 앞에 있어야 합니다.
- 업스트림 서비스의 백엔드는 HTTP/1.1 일반 텍스트 또는 TLS(Transport Layer Security)를 구현할 수 있습니다.
정책 체인에는 TLS 종료 정책도 포함되어야 합니다.
APIcast 구성 정책 체인의 예:
"policy_chain": [ { "name": "apicast.policy.tls" }, { "name": "apicast.policy.grpc" }, { "name": "apicast.policy.apicast" } ]
4.1.16. IP 확인
IP 확인 정책은 IP 목록을 기반으로 요청을 거부하거나 허용하는 데 사용됩니다.
구성 속성
속성 | description | 데이터 유형 | 필수 항목입니다. |
---|---|---|---|
check_type |
|
문자열은 | 제공됨 |
ips |
| 문자열 배열은 유효한 IP 주소여야 합니다. | 제공됨 |
error_msg |
| string | 제공되지 않음 |
client_ip_sources |
|
문자열 배열, 유효한 옵션은 | 제공되지 않음 |
정책 오브젝트 예
{ "name": "ip_check", "configuration": { "ips": [ "3.4.5.6", "1.2.3.0/4" ], "check_type": "blacklist", "client_ip_sources": ["X-Forwarded-For", "X-Real-IP", "last_caller"], "error_msg": "A custom error message" } }
정책을 구성하는 방법에 대한 자세한 내용은 설명서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.17. JWT 클레임 확인
JWT(JSON 웹 토큰) 클레임에 따라 JWT 클레임 검사를 사용하면 리소스 대상 및 메서드를 차단하는 새 규칙을 정의할 수 있습니다.
JWT 클레임 검사 정책 정보
JWT 클레임의 값을 기반으로 라우팅하려면 JWT의 유효성을 검사하고 정책이 공유하는 컨텍스트에 클레임을 저장하는 체인에 정책이 필요합니다.
JWT 클레임 검사 정책이 리소스를 차단하고 있는 경우 정책은 JWT 작업도 검증합니다. 또는 메서드 리소스가 일치하지 않으면 요청이 백엔드 API로 계속됩니다.
예: GET 요청의 경우 JWT에는 요청이 거부되지 않는 경우 admin으로 역할 클레임이 있어야 합니다. 반면, 비 GET 요청은 JWT 작업을 검증하지 않으므로 JWT 제약 조건 없이 POST 리소스가 허용됩니다.
{ "name": "apicast.policy.jwt_claim_check", "configuration": { "error_message": "Invalid JWT check", "rules": [ { "operations": [ {"op": "==", "jwt_claim": "role", "jwt_claim_type": "plain", "value": "admin"} ], "combine_op":"and", "methods": ["GET"], "resource": "/resource", "resource_type": "plain" } ] } }
정책 체인에서 JWT 클레임 검사 정책 구성
정책 체인에서 JWT 클레임 검사 정책을 구성하려면 다음을 수행합니다.
- 3scale 설치에 액세스할 수 있어야 합니다.
- 모든 배포가 완료될 때까지 기다려야 합니다.
정책 구성
- API에 JWT 클레임 확인 정책을 추가하려면 3scale API Management 관리 포털에서 정책 활성화에 설명된 단계를 수행하고 JWT 클레임 검사를 선택합니다.
- JWT 클레임 확인 링크를 클릭합니다.
- 정책을 활성화하려면 Enabled 확인란을 선택합니다.
-
규칙을 추가하려면 더하기
+
아이콘을 클릭합니다. - resource_type 을 지정합니다.
- Operator를 선택합니다.
- 규칙에 의해 제어되는 리소스 를 나타냅니다.
-
허용되는 메서드를 추가하려면 더하기
+
아이콘을 클릭합니다. - 트래픽이 차단되면 사용자에게 표시할 오류 메시지를 입력합니다.
JWT 클레임 검사를 사용하여 API 설정을 완료하면 업데이트 정책을 클릭합니다.
해당 섹션에서 더하기
+
아이콘을 클릭하여 리소스 유형 및 허용되는 메서드를 추가할 수 있습니다.- 업데이트 정책 체인을 클릭하여 변경 사항을 저장합니다.
4.1.18. 유동성 컨텍스트 디버그
리쿼드 컨텍스트 디버그 정책은 개발 환경에서의 디버깅 목적으로만 사용되며 프로덕션에서는 사용할 수 없습니다.
이 정책은 컨텍스트에서 사용 가능한 오브젝트 및 값을 포함하는 JSON
을 사용하여 API 요청에 응답하고 리쿼리드 템플릿을 평가하는 데 사용할 수 있습니다. 3scale APIcast 또는 업스트림 정책과 결합할 때 리쿼드 컨텍스트 디버그를 정책 체인에 배치하여 올바르게 작동해야 합니다. 순환 참조를 피하기 위해 정책에 중복된 오브젝트만 포함되고 스텁 값으로 대체됩니다.
정책이 활성화될 때 APIcast에서 반환하는 값의 예입니다.
{ "jwt": { "azp": "972f7b4f", "iat": 1537538097, ... "exp": 1537574096, "typ": "Bearer" }, "credentials": { "app_id": "972f7b4f" }, "usage": { "deltas": { "hits": 1 }, "metrics": [ "hits" ] }, "service": { "id": "2", ... } ... }
4.1.19. 로깅
로깅 정책에는 다음 두 가지 용도가 있습니다.
- 액세스 로그 출력을 활성화하고 비활성화하려면 다음을 수행합니다.
- 각 서비스에 대한 사용자 정의 액세스 로그 형식을 생성하고 사용자 지정 액세스 로그를 쓰기 위한 조건을 설정할 수 있습니다.
로깅 정책을 액세스 로그 위치에 대한 글로벌 설정과 결합할 수 있습니다. APICAST_ACCESS_LOG_FILE
환경 변수를 설정하여 APIcast 액세스 로그의 위치를 구성합니다. 기본적으로 이 변수는 표준 출력 장치인 /dev/stdout
로 설정됩니다. 글로벌 APIcast 매개변수에 대한 자세한 내용은 APIcast 환경 변수를 참조하십시오.
또한 로깅 정책에는 다음과 같은 기능이 있습니다.
-
이 정책은
enable_access_logs
구성 매개변수만 지원합니다. -
액세스 로그를 활성화하려면
enable_access_logs
매개변수를 선택하거나 로깅 정책을 비활성화합니다. API에 대한 액세스 로깅을 비활성화하려면 다음을 수행합니다.
- 정책을 활성화합니다.
-
enable_access_logs
매개변수를 지웁니다. -
Submit
(제출) 버튼을 클릭합니다.
- 기본적으로 이 정책은 정책 체인에서 활성화되지 않습니다.
4.1.19.1. 모든 API에 대한 로깅 정책 구성
APICAST_ENVIRONMENT 를 사용하여 정책이 모든 API 제품에 전역적으로 적용되는 구성을 로드할 수 있습니다. 다음은 이를 달성하는 방법의 예입니다. APICAST_ENVIRONMENT는 배포, 템플릿 또는 운영자의 유형에 따라 파일 경로를 가리키는 데 사용됩니다.
로깅 정책을 전역적으로 구성하려면 배포 유형에 따라 다음을 고려하십시오.
- 템플릿 기반 배포의 경우: ConfigMap 및 VolumeMount를 통해 컨테이너에 파일을 마운트해야 합니다.
3scale Operator 기반 배포의 경우:
- 3scale 2.11 이전에는 ConfigMap 및 VolumeMount를 통해 컨테이너에 파일을 마운트해야 합니다.
- 3scale 2.11부터 APIManager CR(사용자 정의 리소스)에서 참조하는 시크릿을 사용해야 합니다.
APIcast Operator 배포의 경우 다음을 수행합니다.
- 이전에는 3scale 2.11로 이 값을 구성할 수 없었습니다.
- 3scale 2.11부터 APIManager CR에서 참조하는 보안을 사용해야 합니다.
- Docker에 배포된 APIcast 자체 관리의 경우 컨테이너에 파일을 마운트해야 합니다.
로깅 옵션을 사용하면 API에서 올바르게 포맷되지 않은 로그 관련 문제를 방지할 수 있습니다.
다음은 모든 서비스에서 로드하는 정책의 예입니다.
custom_env.lua 파일
local cjson = require('cjson') local PolicyChain = require('apicast.policy_chain') local policy_chain = context.policy_chain local logging_policy_config = cjson.decode([[ { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}" } ]]) policy_chain:insert( PolicyChain.load_policy('logging', 'builtin', logging_policy_config), 1) return { policy_chain = policy_chain, port = { metrics = 9421 }, }
4.1.19.1.1. ConfigMap 및 VolumeMount를 통해 컨테이너에 파일을 마운트하여 모든 API의 로깅 정책 구성
custom_env.lua
파일을 사용하여 ConfigMap을 생성합니다.$ oc create configmap logging --from-file=/path/to/custom_env.lua
ConfigMap의 볼륨을 마운트합니다. 예를 들면
apicast-staging
:$ oc set volume deployment/apicast-staging --add --name=logging --mount-path=/opt/app-root/src/config/custom_env.lua --sub-path=custom_env.lua -t configmap --configmap-name=logging
환경 변수를 설정합니다.
$ oc set env deployment/apicast-staging APICAST_ENVIRONMENT=/opt/app-root/src/config/custom_env.lua
4.1.19.1.2. APIManager CR에서 참조되는 보안을 사용하여 모든 API의 로깅 정책 구성
Operator 기반 배포의 3scale 2.11에서 로깅 정책을 시크릿으로 구성하고 APIManager CR의 시크릿을 참조합니다.
다음 절차는 3scale Operator에만 유효합니다. 그러나 이러한 단계를 사용하여 유사한 방식으로 APIcast Operator를 구성할 수 있습니다.
사전 요구 사항
- Lua로 코딩된 하나 이상의 사용자 지정 환경.
프로세스
사용자 정의 환경 콘텐츠를 사용하여 보안을 생성합니다.
$ oc create secret generic custom-env --from-file=./custom_env.lua
APIcast 사용자 정의 환경을 사용하여 APIManager CR을 구성하고 배포합니다.
apimanager.yaml content:
apiVersion: apps.3scale.net/v1alpha1 kind: APIManager metadata: name: apimanager-apicast-custom-environment spec: apicast: productionSpec: customEnvironments: - secretRef: name: custom-env stagingSpec: customEnvironments: - secretRef: name: custom-env
APIManager CR을 배포합니다.
$ oc apply -f apimanager.yaml
시크릿이 없는 경우 Operator는 CR을 실패로 표시합니다. 보안을 변경하려면 APIcast에 반영하려면 pod/container를 다시 배포해야 합니다.
사용자 정의 환경 업데이트
사용자 지정 환경 콘텐츠를 수정해야 하는 경우 다음 두 가지 옵션이 있습니다.
권장 사항: 다른 이름으로 다른 시크릿을 생성하고 APIManager CR 필드를 업데이트합니다.
customEnvironments[].secretRef.name
Operator는 새 사용자 정의 환경 콘텐츠를 로드하는 롤링 업데이트를 트리거합니다.
-
기존 시크릿 콘텐츠를 업데이트하고 APIcast를 재배포하여
spec.apicast.productionSpec.replicas
또는spec.apicast.stagingSpec.replicas
를 0으로 변경한 다음 이전 값으로 돌아갑니다.
4.1.19.1.3. Docker에 배포된 APIcast 자체 관리의 모든 API의 로깅 정책 구성
다음 docker 명령을 사용하여 custom_env.lua를 마운트하여 이 특정 환경에서 APIcast를 실행합니다.
docker run --name apicast --rm -p 8080:8080 \ -v $(pwd):/config \ -e APICAST_ENVIRONMENT=/config/custom_env.lua \ -e THREESCALE_PORTAL_ENDPOINT=https://ACCESS_TOKEN@ADMIN_PORTAL_DOMAIN \ quay.io/3scale/apicast:master
다음은 고려해야 할 docker 명령의 주요 개념입니다.
-
현재 Lua 파일을 container
-v $(pwd):/config
와 공유합니다. -
APICAST_ENVIRONMENT 변수를
/config
디렉터리에 저장된 Lua 파일로 설정합니다.
4.1.19.2. 로깅 정책의 예
다음은 로깅 정책의 예입니다. 다음과 같은 경고 사항은 다음과 같습니다.
-
custom_logging
또는enable_json_logs
속성이 활성화된 경우 기본 액세스 로그가 비활성화됩니다. -
enable_json_logs
가 활성화된 경우custom_logging
필드가 생략됩니다.
액세스 로그 비활성화
{ "name": "apicast.policy.logging", "configuration": { "enable_access_logs": false } }
사용자 정의 액세스 로그 활성화
{ "name": "apicast.policy.logging", "configuration": { "enable_access_logs": false, "custom_logging": "[{{time_local}}] {{host}}:{{server_port}} {{remote_addr}}:{{remote_port}} \"{{request}}\" {{status}} {{body_bytes_sent}} ({{request_time}}) {{post_action_impact}}", } }
서비스 식별자를 사용하여 사용자 정의 액세스 로그 활성화
{ "name": "apicast.policy.logging", "configuration": { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.serializable.name}}", } }
JSON 형식으로 액세스 로그 구성
{ "name": "apicast.policy.logging", "configuration": { "enable_access_logs": false, "enable_json_logs": true, "json_object_config": [ { "key": "host", "value": "{{host}}", "value_type": "liquid" }, { "key": "time", "value": "{{time_local}}", "value_type": "liquid" }, { "key": "custom", "value": "custom_method", "value_type": "plain" } ] } }
성공적인 요청에 대해서만 사용자 정의 액세스 로그 구성
{ "name": "apicast.policy.logging", "configuration": { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}", "condition": { "operations": [ {"op": "==", "match": "{{status}}", "match_type": "liquid", "value": "200"} ], "combine_op": "and" } } }
응답 상태가 200
또는 500
과 일치하는 액세스 로그 사용자 정의
{ "name": "apicast.policy.logging", "configuration": { "enable_access_logs": false, "custom_logging": "\"{{request}}\" to service {{service.id}} and {{service.name}}", "condition": { "operations": [ {"op": "==", "match": "{{status}}", "match_type": "liquid", "value": "200"}, {"op": "==", "match": "{{status}}", "match_type": "liquid", "value": "500"} ], "combine_op": "or" } } }
4.1.19.3. 사용자 정의 로깅에 대한 추가 정보
사용자 정의 로깅의 경우 내보낸 변수와 함께 리쿼드 템플릿을 사용할 수 있습니다. 이러한 변수는 다음과 같습니다.
-
NGINX 기본 지시문 변수: log_format. 예:
{{remote_addr}}
. 응답 및 요청 헤더:
-
{{req.headers.FECDHE}}
: 요청에서 F Cryostat 헤더를 가져옵니다. -
{{Res.headers.Fcnf}}
: 응답 시 F Cryostat 헤더를 검색합니다.
-
{{service.id}}
와 같은 서비스 정보 및 이러한 매개변수에서 제공하는 모든 서비스 속성:- THREESCALE_CONFIG_FILE
- THREESCALE_PORTAL_ENDPOINT
4.1.20. 유지 관리 모드
에 대한 유지 관리 모드 정책을 사용하면 지정된 상태 코드 및 메시지를 사용하여 들어오는 요청을 거부할 수 있습니다. 유지 관리 기간이나 API를 일시적으로 차단하는 데 유용합니다.
구성 속성
다음은 사용 가능한 속성 및 기본값 목록입니다.
속성 | value | default | description |
---|---|---|---|
status | 정수, 선택 사항 | 503 | 응답 코드 |
message | 문자열, 선택 사항 | 503 Service Unavailable - 유지 관리 | 응답 메시지 |
유지 관리 모드 정책 예
{ "policy_chain": [ {"name": "maintenance-mode", "version": "1.0.0", "configuration": {"message": "Be back soon..", "status": 503} }, ] }
특정 업스트림에 대한 유지 관리 모드 적용
{ "name": "maintenance_mode", "version": "builtin", "configuration": { "message_content_type": "text/plain; charset=utf-8", "message": "Echo API /test is currently Unavailable", "condition": { "combine_op": "and", "operations": [ { "left_type": "liquid", "right_type": "plain", "op": "==", "left": "{{ original_request.path }}", "right": "/test" } ] }, "status": 503 } }
정책을 구성하는 방법에 대한 자세한 내용은 설명서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.21. NGINX 필터
NGINX는 일부 요청 헤더를 자동으로 확인하고 해당 헤더를 검증할 수 없는 경우 요청을 거부합니다. 예를 들어 NGINX는 NGINX에서 검증할 수 없는 If-Match
헤더가 있는 요청을 거부합니다. NGINX가 특정 헤더의 검증을 건너뛰려면 NGINX 필터 정책을 추가합니다.
NGINX 필터 정책을 추가할 때 NGINX에서 검증을 건너뛸 하나 이상의 요청 헤더를 지정합니다. 지정하는 각 헤더에 대해 요청에 헤더를 유지할지 여부를 나타냅니다. 예를 들어 다음 JSON 코드는 NGINX Filter 정책을 추가하여 If-Match
헤더의 검증을 건너뛰지만 업스트림 서버로 전달되는 요청에 If-Match
헤더를 유지합니다.
{ "name": "apicast.policy.nginx_filters", "configuration": { "headers": [ {"name": "If-Match", "append": true} ] } }
다음 예제에서는 If-Match
헤더의 검증을 건너뛰지만 이 코드는 요청을 업스트림 서버로 보내기 전에 NGINX에 If-Match
헤더를 삭제하도록 지시합니다.
{ "name": "apicast.policy.nginx_filters", "configuration": { "headers": [ {"name": "If-Match", "append": false} ] } }
업스트림 서버로 이동하는 요청에 지정된 헤더를 추가할지 여부에 관계없이 NGINX 412
응답 코드를 통해 지정한 헤더를 검증할 수 없습니다.
헤더 조정 정책과 NGINX Filter 정책에 대해 동일한 헤더를 지정하는 것은 잠재적인 충돌 소스입니다.
4.1.22. OAuth 2.0 상호 TLS 클라이언트 인증
이 정책은 모든 API 호출에 대해 OAuth 2.0 상호 TLS 클라이언트 인증을 실행합니다.
OAuth 2.0 상호 TLS 클라이언트 인증 정책 JSON
의 예는 다음과 같습니다.
{ "$schema": "http://apicast.io/policy-v1/schema#manifest#", "name": "OAuth 2.0 Mutual TLS Client Authentication", "summary": "Configure OAuth 2.0 Mutual TLS Client Authentication.", "description": ["This policy executes OAuth 2.0 Mutual TLS Client Authentication ", "(https://tools.ietf.org/html/draft-ietf-oauth-mtls-12) for every API call." ], "version": "builtin", "configuration": { "type": "object", "properties": { } } }
4.1.23. OAuth 2.0 토큰 인트로스펙션
OAuth 2.0 토큰 인트로스펙션 정책을 사용하면 토큰 발행자(Red Hat Single Sign-On)의 Token Introspection Endpoint를 사용하여 OpenID Connect(OIDC) 인증 옵션이 있는 서비스에 사용되는 JSON 웹 토큰(JWT) 토큰을 검증할 수 있습니다.
APIcast는 auth_type
필드에서 다음 인증 유형을 지원하여 토큰 Introspection Endpoint 및 이 끝점을 호출할 때 APIcast가 사용하는 인증 정보를 확인합니다.
use_3scale_oidc_issuer_endpoint
: APIcast는 서비스 통합 페이지에 구성된 OIDC 발행자 설정의 클라이언트 인증 정보, 클라이언트 ID 및 클라이언트 시크릿 과 토큰 Introspection Endpoint를 사용합니다. APIcast는token_introspection_endpoint
필드에서 토큰 인트로스펙션 엔드포인트를 검색합니다. 이 필드는 OIDC 발행자가 반환하는.well-known/openid-configuration
엔드포인트에 있습니다.use_3scale_oidc_issuer_endpoint
:"policy_chain": [ … { "name": "apicast.policy.token_introspection", "configuration": { "auth_type": "use_3scale_oidc_issuer_endpoint" } } … ],
client_id+client_secret
: 이 옵션을 사용하면 다른 토큰 인트로스펙션 엔드포인트와 클라이언트 ID 및 클라이언트 시크릿 APIcast가 토큰 정보를 요청할 수 있습니다. 이 옵션을 사용하는 경우 다음 구성 매개변수를 설정합니다.-
client_id
: Token Introspection Endpoint의 클라이언트 ID를 설정합니다. -
client_secret
: Token Introspection Endpoint의 클라이언트 시크릿을 설정합니다. introspection_url
: Introspection Endpoint URL을 설정합니다.client_id+client_secret
으로 설정된 인증 유형 :"policy_chain": [ … { "name": "apicast.policy.token_introspection", "configuration": { "auth_type": "client_id+client_secret", "client_id": "myclient", "client_secret": "mysecret", "introspection_url": "http://red_hat_single_sign-on/token/introspection" } } … ],
-
auth_type
필드의 설정에 관계없이 APIcast는 기본 인증을 사용하여 토큰 인트로스펙션 호출을 승인합니다(인증: 기본 <token> 헤더입니다. 여기서 < token
>은 Base64로 인코딩된 < client_id>:<client_secret > 설정입니다.
토큰 인트로스펙션 엔드포인트의 응답에는 활성
특성이 포함되어 있습니다. APIcast는 이 속성의 값을 확인합니다. 속성 값에 따라 APIcast는 호출을 승인하거나 거부합니다.
true
전화가 승인됨
false
Authentication Failed
오류와 함께 호출이 거부됩니다.
이 정책을 사용하면 토큰 캐싱을 활성화하여 동일한 JWT 토큰에 대한 모든 호출에서 Token Introspection Endpoint를 호출하지 않도록 할 수 있습니다. 토큰 인트로스펙션 정책에 대한 토큰 캐싱을 활성화하려면 max_cached_tokens
필드를 0
의 값으로 설정하여 기능을 비활성화하고 10000
. 또한 max_ttl_tokens
필드의 토큰에 대해 1
에서 3600
초까지 Time to Live (TTL) 값을 설정할 수 있습니다.
4.1.24. On Fail
API 공급자로 API 제품에 On Fail 정책을 추가할 수 있습니다. On Fail 정책이 정책 체인에 있고 지정된 API 소비자 요청에 대한 정책 실행이 실패하면 APIcast는 다음을 수행합니다.
- 요청 처리를 중지합니다.
- 요청을 보낸 애플리케이션에 지정하는 상태 코드를 반환합니다.
On Fail 정책은 APIcast가 잘못된 구성 또는 사용자 정의 정책의 비호환 코드 때문에 정책을 처리할 수 없는 경우 유용합니다. 정책 체인의 On Fail 정책이 없으면 APIcast는 적용할 수 없는 정책을 건너뛰고 체인의 다른 정책을 처리하며 요청을 업스트림 API로 보냅니다. 정책 체인의 On Fail 정책을 사용하면 APIcast에서 요청을 거부합니다.
정책 체인에서 On Fail 정책은 모든 위치에 있을 수 있습니다.
관리 포털에서 제품의 정책 체인에 On Fail 정책을 추가합니다. 정책 체인에서 정책을 클릭하여 APIcast가 On Fail 정책을 적용할 때 반환할 상태 코드를 지정합니다. 예를 들어 400
을 지정할 수 있으며 이는 클라이언트의 잘못된 요청을 나타냅니다.
4.1.25. 프록시 서비스
프록시 서비스 정책을 사용하여 정의된 프록시를 사용하여 3scale 트래픽이 전송되는 일반 HTTP 프록시를 정의할 수 있습니다. 이 경우 프록시 서비스는 역방향 HTTP 프록시로 작동합니다. 여기서 APIcast는 트래픽을 HTTP 프록시로 전송하고 프록시는 트래픽을 API 백엔드로 보냅니다.
다음 예제에서는 트래픽 흐름을 보여줍니다.
3scale 백엔드로 전송된 모든 APIcast 트래픽은 프록시를 사용하지 않습니다. 이 정책은 프록시 및 APIcast와 API 백엔드 간의 통신에만 적용됩니다.
프록시를 통해 모든 트래픽을 보내려면 HTTP_PROXY
환경 변수를 사용해야 합니다.
- * 도메인 이름이 여러 IP 주소로 확인되면 Camel 서비스 정책은 로드 밸런싱 업스트림의 APIcast 기능을 비활성화합니다. Camel 서비스는 업스트림 서비스의 DNS 확인을 관리합니다.
-
HTTP_PROXY
,HTTPS_PROXY
또는ALL_PROXY
매개변수가 정의된 경우 이 정책은 해당 값을 덮어씁니다. -
3scale은 현재 TLS(Transport Layer Security)를 통해 HTTP 프록시에 대한 연결을 지원하지 않습니다. 따라서
HTTPS_PROXY
값의 스키마는 HTTP로 제한됩니다.
설정
이 정책에서는 URL이 http://[<username>[:<passwd>]@]<host>[:<port>]
형식을 따를 것으로 예상합니다. 다음 예제에서는 정책 체인 구성을 보여줍니다.
"policy_chain": [ { "name": "apicast.policy.apicast" }, { "name": "apicast.policy.http_proxy", "configuration": { "all_proxy": "http://foo:bar@192.168.15.103:8888/", "https_proxy": "http://foo:bar@192.168.15.103:8888/", "http_proxy": "http://foo:bar@192.168.15.103:8888/" } } ]
all_proxy
값은 http_proxy
또는 https_proxy
가 정의되지 않은 경우 사용됩니다. < ;username>
및 & lt;passwd>
;는 선택 사항입니다. 다른 모든 구성 요소가 필요합니다.
사용 사례 예
프록시 서비스 정책은 HTTP를 통한 Apache Camel을 사용하여 3scale에 보다 세분화된 정책과 변환을 적용하도록 설계되었습니다. 그러나 프록시 서비스 정책을 일반 HTTP 프록시 서비스로 사용할 수도 있습니다. HTTPS를 통한 Apache Camel과의 통합은 4.1.6절. “Camel 서비스” 에서 참조하십시오.
프로젝트 예
GitHub에서 camel-netty-proxy 예제를 참조하십시오. 이 프로젝트는 응답 본문을 API 백엔드에서 대문자로 변환하는 HTTP 프록시를 보여줍니다.
4.1.26. 속도 제한 헤더
Rate Limit Headers 정책은 애플리케이션이 속도 제한이 있는 애플리케이션 계획에 구독할 때 응답 메시지에 RateLimit
헤더를 추가합니다. 이러한 헤더는 구성된 요청 할당량 제한과 현재 시간 창에서 나머지 요청 할당량 및 초에 대한 유용한 정보를 제공합니다.
제품의 정책 체인에서 Rate Limit Headers 정책을 추가하는 경우 3scale APIcast 정책 앞에 있어야 합니다. 3scale APIcast 정책이 Rate Limit Headers 정책 이전의 경우 Rate Limit Headers 정책이 작동하지 않습니다.
RateLimit 헤더
다음 RateLimit
헤더가 각 메시지에 추가됩니다.
RateLimit-Limit
구성된 시간 창에 총 요청 할당량을 표시합니다(예:
10
개의 요청).RateLimit-Remaining
현재 시간 창에 나머지 요청 할당량을 표시합니다(예:
5
개의 요청).RateLimit-Reset
현재 시간 창에 남아 있는 시간(예:
30
초)을 표시합니다. 이 헤더의 동작은Retry-After
헤더의delta-seconds
표기법과 호환됩니다.
기본적으로 Rate Limit Headers 정책이 구성되지 않았거나 애플리케이션 계획에 속도 제한이 없는 경우 응답 메시지에 속도 제한 헤더가 없습니다.
속도 제한이 없는 API 메트릭을 요청하고 있지만 상위 메트릭에 제한이 구성되어 있는 경우 상위 제한이 적용되므로 속도 제한 헤더가 여전히 응답에 포함됩니다.
4.1.27. 응답/요청 콘텐츠 제한
API 공급자는 응답/요청 콘텐츠 제한 정책을 API 제품에 추가할 수 있습니다. 이 정책을 사용하면 요청 크기를 업스트림 API로 제한하고 업스트림 API의 응답 크기를 제한할 수 있습니다. 이 정책이 없으면 요청/응답 크기는 무제한입니다.
이 정책은 다음과 같은 과부하를 방지하는 데 유용합니다.
- 백엔드는 너무 큰 페이로드에서 작동해야 하기 때문입니다.
- 최종 사용자(API 소비자)는 처리할 수 있는 것보다 더 많은 데이터를 수신하기 때문입니다.
요청 또는 응답에서 3scale이 Response/Request Content Limits 정책을 적용하려면 content-length
헤더가 필요합니다.
관리 포털에서 제품에 Response/Request Content Limits 정책을 추가한 후 이를 클릭하여 제한을 바이트 단위로 지정합니다. 요청 제한 또는 응답 제한을 지정하거나 둘 다 지정할 수 있습니다. 기본값인 0
은 무제한 크기를 나타냅니다.
또는 정책 체인 구성 파일을 업데이트하여 이 정책을 추가할 수 있습니다. 예를 들면 다음과 같습니다.
{ "name": "apicast.policy.limits", "configuration": { "request": 100, "response": 100 } }
4.1.28. Retry
재시도 정책은 재시도 요청 수를 업스트림 API로 설정합니다. 재시도 정책은 서비스별로 구성되므로 사용자는 원하는 만큼 소수 또는 여러 서비스에 대한 재시도를 활성화하고 다양한 서비스에 대해 다른 재시도 값을 구성할 수 있습니다.
3scale 2.15에서는 정책에서 재시도할 사례를 구성할 수 없습니다. 이는 모든 서비스에 재시도 요청을 적용하는 환경 변수 APICAST_UPSTREAM_RETRY_CASES
로 제어됩니다. 이에 대한 자세한 내용은 APICAST_UPSTREAM_RETRY_CASES 를 참조하십시오.
재시도 정책 JSON
의 예는 다음과 같습니다.
{ "$schema": "http://apicast.io/policy-v1/schema#manifest#", "name": "Retry", "summary": "Allows retry requests to the upstream", "description": "Allows retry requests to the upstream", "version": "builtin", "configuration": { "type": "object", "properties": { "retries": { "description": "Number of retries", "type": "integer", "minimum": 1, "maximum": 10 } } } }
4.1.29. RH-SSO/Keycloak 역할 확인
RH-SSO/Keycloak Role Check 정책을 APIcast 정책 체인에 추가하면 APIcast 및 라우팅 정책 앞에 배치합니다.
이 정책은 OpenID Connect 인증 옵션과 함께 사용할 때 역할 검사를 추가합니다. 이 정책은 RH-SSO(Red Hat Single Sign-On)에서 발행한 액세스 토큰에서 영역 역할 및 클라이언트 역할을 확인합니다. realm 역할은 3scale의 모든 클라이언트 리소스에 역할 검사를 추가하려는 경우 지정됩니다.
유형 속성이 정책 구성에 지정하는 두 가지 유형의 역할 검사가 있습니다.
whitelist
이는 기본값입니다. 허용 목록을 사용하면 APIcast에서 지정된 범위가 JWT 토큰에 있는지 확인하고 JWT에 범위가 없는 경우 호출을 거부합니다.
blacklist
blacklist 을 사용하면 JWT 토큰에 블랙리스트 범위가 포함된 경우 APIcast에서 호출을 거부합니다.
동일한 정책에서 블랙리스트 와 화이트리스트 를 모두 구성할 수는 없지만, RH-SSO/Keycloak 역할 확인 정책의 인스턴스를 APIcast 정책 체인에 두 개 이상 추가할 수 있습니다.
정책 구성의 scopes 속성을 통해 범위 목록을 구성할 수 있습니다.
각 scope 오브젝트에는 다음과 같은 속성이 있습니다.
resource
역할에 의해 제어되는 리소스 끝점입니다. 이는 매핑 규칙과 동일한 형식입니다. 패턴은 문자열의 시작 부분에서 일치하고 정확히 일치하려면 끝에 $ 를 추가해야 합니다.
resource_type
이는 리소스 값이 평가되는 방법을 정의합니다.
- 일반 텍스트(일반): 리소스 값을 일반 텍스트로 평가합니다. 예: /api/v1/products$.
- iquid text (liquid) : 리소스 값에 리쿼드를 사용할 수 있습니다. 예: /resource_{{ jwt.aud }} 는 클라이언트 ID가 포함된 리소스에 대한 액세스를 관리합니다.
methods: 이 매개변수를 사용하여 RH-SSO의 사용자 역할에 따라 APIcast에서 허용되는 HTTP 메서드를 나열합니다. 예를 들어 다음과 같은 메서드를 허용할 수 있습니다.
-
/resource1
에 액세스하는role1
영역 역할입니다. 이 영역 역할이 없는 메서드의 경우 블랙리스트 를 지정해야 합니다. -
/resource1
에 액세스하기 위해role1
이라는client1
역할. -
/resource1
에 액세스할 수 있는role1
및role2
영역 역할입니다. realm_roles 에서 역할을 지정합니다. 각 역할의 범위를 지정할 수도 있습니다. -
애플리케이션 클라이언트의
role1
이라는 클라이언트 역할로, 액세스 토큰 수신자인/resource1
에 액세스합니다. 유동클라이언트
유형을 사용하여 클라이언트에 대한 JSON 웹 토큰(JWT) 정보를 지정합니다. -
/resource1
에 액세스하기 위해 애플리케이션 클라이언트의 클라이언트 ID, 액세스 토큰 수신자를 포함한 클라이언트 역할.liquid
클라이언트 유형을 사용하여 클라이언트 역할의이름에
JWT 정보를 지정합니다. -
애플리케이션 클라이언트 ID를 포함하여 리소스에 액세스하기 위해
role1
이라는 클라이언트 역할입니다. 유동클라이언트
유형을 사용하여 리소스에 대한 JWT 정보를 지정합니다.
-
realm_roles
이를 사용하여 realm 역할을 확인합니다. Red Hat Single Sign-On 설명서의 Cryostat 역할을 참조하십시오.
영역 역할은 Red Hat Single Sign-On에서 발행한 JWT에 있습니다.
"realm_access": { "roles": [ "<realm_role_A>", "<realm_role_B>" ] }
실제 역할은 정책에 지정해야 합니다.
"realm_roles": [ { "name": "<realm_role_A>" }, { "name": "<realm_role_B>" } ]
다음은 realm_roles 배열에서 각 오브젝트의 사용 가능한 속성입니다.
name
역할의 이름을 지정합니다.
name_type
이름을 평가하는 방법을 정의합니다. 값은 일반 또는 유동일 수 있습니다. 이 명령은 resource_type 과 동일한 방식으로 작동합니다.
client_roles
client_roles 를 사용하여 클라이언트 네임스페이스에서 특정 액세스 역할을 확인합니다. Red Hat Single Sign-On 설명서의 클라이언트 역할을 참조하십시오.
클라이언트 역할은 resource_access 클레임의 JWT에 있습니다.
"resource_access": { "<client_A>": { "roles": [ "<client_role_A>", "<client_role_B>" ] }, "<client_B>": { "roles": [ "<client_role_A>", "<client_role_B>" ] } }
정책에서 클라이언트 역할을 지정합니다.
"client_roles": [ { "name": "<client_role_A>", "client": "<client_A>" }, { "name": "<client_role_B>", "client": "<client_A>" }, { "name": "<client_role_A>", "client": "<client_B>" }, { "name": "<client_role_B>", "client": "<client_B>" } ]
다음은 client_roles 배열에서 각 오브젝트의 사용 가능한 속성입니다.
name
역할의 이름을 지정합니다.
name_type
name 값을 평가하는 방법을 정의합니다. 값은 일반 또는 유동일 수 있습니다. 이 명령은 resource_type 과 동일한 방식으로 작동합니다.
클라이언트
역할의 클라이언트를 지정합니다. 정의되지 않은 경우 이 정책은 aud 클레임을 클라이언트로 사용합니다.
client_type
클라이언트 값을 평가하는 방법을 정의합니다. 값은 일반 또는 유동일 수 있습니다. 이 명령은 resource_type 과 동일한 방식으로 작동합니다.
4.1.30. 라우팅
라우팅 정책이 요청을 처리하는 경우에도 요청에 대한 해당 매핑 규칙이 있어야 합니다.
라우팅 정책을 사용하면 요청을 다른 대상 끝점으로 라우팅할 수 있습니다. 대상 끝점을 정의한 다음, 들어오는 요청을 UI에서 정규식을 사용하여 해당 요청으로 라우팅할 수 있습니다.
라우팅은 다음 규칙을 기반으로 합니다.
정책 체인에 라우팅 정책을 추가할 때 라우팅 정책은 항상 표준 3scale APIcast 정책 앞에 있어야 합니다. 즉, 라우팅 정책과 3scale APIcast 정책 간에는 정책이 있을 수 없습니다. 이렇게 하면 APIcast가 업스트림 API로 전송하는 요청에서 올바른 APIcast 출력이 생성됩니다. 다음은 올바른 정책 체인의 두 가지 예입니다.
Liquid Context Debug JWT Claim Check Routing 3scale APIcast
Liquid Context Debug Routing 3scale APIcast JWT Claim Check
라우팅 규칙
- 여러 규칙이 있는 경우 라우팅 정책이 첫 번째 일치 항목을 적용합니다. 이러한 규칙을 정렬할 수 있습니다.
- 규칙이 일치하지 않으면 정책이 업스트림을 변경하지 않고 서비스 구성에 정의된 정의된 프라이빗 기본 URL을 사용합니다.
요청 경로 규칙
경로가 /accounts
인 경우 http://example.com
로 라우팅되는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "operations": [ { "match": "path", "op": "==", "value": "/accounts" } ] } } ] } }
헤더 규칙
Test-Header
헤더 값이 123
인 경우 http://example.com
로 라우팅되는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "operations": [ { "match": "header", "header_name": "Test-Header", "op": "==", "value": "123" } ] } } ] } }
쿼리 인수 규칙
쿼리 인수 test_query_arg
값이 123
인 경우 로 라우팅하는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "operations": [ { "match": "query_arg", "query_arg_name": "test_query_arg", "op": "==", "value": "123" } ] } } ] } }
JWT 클레임 규칙
JWT 클레임의 값을 기반으로 라우팅하려면 JWT를 검증하고 정책이 공유하는 컨텍스트에 저장하는 체인의 정책이 있어야 합니다.
JWT 클레임 test_claim
값이 123
인 경우 http://example.com
로 라우팅되는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "operations": [ { "match": "jwt_claim", "jwt_claim_name": "test_claim", "op": "==", "value": "123" } ] } } ] } }
여러 작업 규칙
규칙은 'and' combine_op
을 사용하여 모든 작업이 true로 평가되거나 '또는' combine_op
를 사용하여 true로 평가되는 경우에만 지정된 업스트림에 대한 여러 작업 및 경로가 있을 수 있습니다. combine_op
의 기본값은 'and'입니다.
요청 경로가 /accounts
이고 헤더 Test-Header
값이 123
인 경우 로 라우팅하는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "combine_op": "and", "operations": [ { "match": "path", "op": "==", "value": "/accounts" }, { "match": "header", "header_name": "Test-Header", "op": "==", "value": "123" } ] } } ] } }
요청 경로가 /accounts
일 때 또는 헤더 Test-Header
값이 123
인 경우 http://example.com
로 라우팅되는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "combine_op": "or", "operations": [ { "match": "path", "op": "==", "value": "/accounts" }, { "match": "header", "header_name": "Test-Header", "op": "==", "value": "123" } ] } } ] } }
규칙 결합
규칙을 결합할 수 있습니다. 규칙이 여러 개 있는 경우 선택한 업스트림은 true로 평가되는 첫 번째 규칙 중 하나입니다.
이 구성은 다음과 같은 몇 가지 규칙이 포함된 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://some_upstream.com", "condition": { "operations": [ { "match": "path", "op": "==", "value": "/accounts" } ] } }, { "url": "http://another_upstream.com", "condition": { "operations": [ { "match": "path", "op": "==", "value": "/users" } ] } } ] } }
catch-all 규칙
작업이 없는 규칙은 항상 일치합니다. 이는 catch-all 규칙을 정의하는 데 유용할 수 있습니다.
이 구성은 경로가 /abc
인 경우 http://another_upstream.com
로 요청을 라우팅하고, 경로가 /def
인 경우 요청을 http://another_upstream.com
로 라우팅하고, 마지막으로 이전 규칙이 true로 평가되지 않은 경우 요청을 http://default_upstream.com
로 라우팅합니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://some_upstream.com", "condition": { "operations": [ { "match": "path", "op": "==", "value": "/abc" } ] } }, { "url": "http://another_upstream.com", "condition": { "operations": [ { "match": "path", "op": "==", "value": "/def" } ] } }, { "url": "http://default_upstream.com", "condition": { "operations": [] } } ] } }
지원되는 작업
지원되는 작업은 ==
, !=
및 matches
입니다. 후자는 정규식을 사용하여 문자열과 일치하며 ngx.re.match를 사용하여 구현됩니다.
이는 !=
를 사용하는 구성입니다. 경로가 /accounts
가 아닌 경우 http://example.com
로 라우팅됩니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "operations": [ { "match": "path", "op": "!=", "value": "/accounts" } ] } } ] } }
유동 템플릿 작성
구성 값에는 유동 템플릿 지정을 사용할 수 있습니다. 이를 통해 체인의 정책이 키에 my_var
키를 저장하는 경우 동적 값으로 규칙을 정의할 수 있습니다.
이는 해당 값을 사용하여 요청을 라우팅하는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "condition": { "operations": [ { "match": "header", "header_name": "Test-Header", "op": "==", "value": "{{ my_var }}", "value_type": "liquid" } ] } } ] } }
host_header
에 사용되는 호스트 설정
기본적으로 요청이 라우팅되면 정책은 일치하는 규칙의 URL의 호스트를 사용하여 Host 헤더를 설정합니다. host_header
특성을 사용하여 다른 호스트를 지정할 수 있습니다.
이 구성은 some_host.com
을 Host 헤더의 호스트로 지정하는 구성입니다.
{ "name": "routing", "version": "builtin", "configuration": { "rules": [ { "url": "http://example.com", "host_header": "some_host.com", "condition": { "operations": [ { "match": "path", "op": "==", "value": "/" } ] } } ] } }
4.1.31. SOAP
Cryostat 정책은 정책에 지정된 매핑 규칙을 사용하여 HTTP 요청의 Cryostat Action 또는 Content-Type 헤더에 제공된 Cryostat 작업 URI와 일치합니다.
구성 속성
속성 | description | 값 | 필수 항목입니다. |
---|---|---|---|
패턴 |
| 데이터 유형: 문자열 | 제공됨 |
metric_system_name |
| 데이터 유형: 문자열은 유효한 메트릭이어야 합니다. | 제공됨 |
정책 오브젝트 예
{ "name": "soap", "version": "builtin", "configuration": { "mapping_rules": [ { "pattern": "http://example.com/soap#request", "metric_system_name": "soap", "delta": 1 } ] } }
정책을 구성하는 방법에 대한 자세한 내용은 문서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.32. TLS 클라이언트 인증서 유효성 검사
TLS 클라이언트 인증서 유효성 검사 정책을 사용하여 APIcast는 TLS 핸드셰이크를 구현하고 허용 목록에 대해 클라이언트 인증서를 검증합니다. 허용 목록에는 CA(인증 기관) 또는 일반 클라이언트 인증서만 서명한 인증서가 포함되어 있습니다. 만료된 인증서 또는 유효하지 않은 인증서의 경우 요청이 거부되고 다른 정책은 처리되지 않습니다.
클라이언트는 APIcast에 연결하여 요청을 전송하고 클라이언트 인증서를 제공합니다. APIcast는 정책 구성에 따라 들어오는 요청에 제공된 인증서의 진위 여부를 확인합니다. 업스트림에 연결할 때 사용하기 위해 자체 클라이언트 인증서를 사용하도록 APIcast를 구성할 수도 있습니다.
TLS 클라이언트 인증서 유효성 검사에서 작동하도록 APIcast 설정
TLS를 종료하도록 APIcast를 구성해야 합니다. 다음 단계에 따라 클라이언트 인증서 유효성 검사 정책을 사용하여 APIcast에서 사용자가 제공하는 클라이언트 인증서의 검증을 구성합니다.
3scale 설치에 액세스할 수 있어야 합니다. 모든 배포가 완료될 때까지 기다려야 합니다.
정책에서 작동하도록 APIcast 설정
APIcast를 설정하고 TLS를 종료하도록 구성하려면 다음 단계를 따르십시오.
OpenShift 템플릿을 사용하여 APIcast 배포에 표시된 대로 액세스 토큰을 가져오고 APIcast 자체 관리를 배포해야 합니다.
참고전체 게이트웨이에 일부 인증서를 사용하도록 APIcast 인스턴스를 재구성해야 하므로 APIcast 자체 관리 배포가 필요합니다.
테스트 목적으로만 지연 로더를 캐시 및 스테이징 환경 및
--param
플래그 없이 사용하여 쉽게 테스트할 수 있습니다.$ oc new-app -f https://raw.githubusercontent.com/3scale/3scale-amp-openshift-templates/master/apicast-gateway/apicast.yml --param CONFIGURATION_LOADER=lazy --param DEPLOYMENT_ENVIRONMENT=staging --param CONFIGURATION_CACHE=0
- 테스트를 위해 인증서를 생성합니다. 또는 프로덕션 배포의 경우 인증 기관에서 제공하는 인증서를 사용할 수 있습니다.
TLS 인증서를 사용하여 시크릿 생성
$ oc create secret tls apicast-tls --cert=ca/certs/server.crt --key=ca/keys/server.key
APIcast 배포 내부에 시크릿 마운트
$ oc set volume deployment/apicast --add --name=certificates --mount-path=/var/run/secrets/apicast --secret-name=apicast-tls
HTTPS용 포트 8443에서 수신 대기하도록 APIcast 구성
$ oc set env deployment/apicast APICAST_HTTPS_PORT=8443 APICAST_HTTPS_CERTIFICATE=/var/run/secrets/apicast/tls.crt APICAST_HTTPS_CERTIFICATE_KEY=/var/run/secrets/apicast/tls.key
서비스에 8443 노출
$ oc patch service apicast -p '{"spec":{"ports":[{"name":"httpsproxy","port":8443,"protocol":"TCP"}]}}'
기본 경로 삭제
$ oc delete route api-apicast-staging
apicast
서비스를 경로로 노출$ oc create route passthrough --service=apicast --port=https --hostname=api-3scale-apicast-staging.$WILDCARD_DOMAIN
참고이 단계는 사용하려는 모든 API와 모든 API에 대해 도메인 변경에 필요합니다.
자리 표시자에 [ your_user_key]를 지정하여 이전에 배포된 게이트웨이가 작동하고 구성이 저장되었는지 확인합니다.
curl https://api-3scale-apicast-staging.$WILDCARD_DOMAIN?user_key=[Your_user_key] -v --cacert ca/certs/ca.crt
정책 체인에서 TLS 클라이언트 인증서 유효성 검사 구성
정책 체인에서 TLS 클라이언트 인증서 유효성 검사를 구성하려면 3scale 로그인 인증 정보가 필요합니다. 또한 TLS 클라이언트 인증서 유효성 검사 정책을 사용하여 APIcast 를 구성해야 합니다.
- API에 TLS 클라이언트 인증서 유효성 검사 정책을 추가하려면 3scale API Management 관리 포털에서 정책 활성화에 설명된 단계를 수행하고 TLS 클라이언트 인증서 유효성 검사를 선택합니다.
- TLS 클라이언트 인증서 유효성 검사 링크를 클릭합니다.
- 정책을 활성화하려면 Enabled 확인란을 선택합니다.
-
허용 목록에 인증서를 추가하려면 더하기
+
아이콘을 클릭합니다. -
-----BEGIN CERTIFICATE--- 및 ----
를 포함한 인증서를 지정합니다.END CERTIFICATE-----
- TLS 클라이언트 인증서 유효성 검사를 사용하여 API 설정을 완료하면 업데이트 정책을 클릭합니다.
추가 사항:
-
더하기
+
아이콘을 클릭하여 인증서를 추가할 수 있습니다. - 위쪽 및 아래쪽 화살표를 클릭하여 인증서를 재구성할 수도 있습니다.
변경 사항을 저장하려면 정책 체인 업데이트를 클릭합니다.
TLS 클라이언트 인증서 유효성 검사 정책의 기능 확인
TLS 클라이언트 인증서 유효성 검사 정책의 기능을 확인하려면 3scale 로그인 인증 정보가 필요합니다. 또한 TLS 클라이언트 인증서 유효성 검사 정책을 사용하여 APIcast 를 구성해야 합니다.
자리 표시자에 [ your_user_key]
를 지정하여 적용된 정책을 확인할 수 있습니다.
curl https://api-3scale-apicast-staging.$WILDCARD_DOMAIN\?user_key\=[Your_user_key] -v --cacert ca/certs/ca.crt --cert ca/certs/client.crt --key ca/keys/client.key curl https://api-3scale-apicast-staging.$WILDCARD_DOMAIN\?user_key\=[Your_user_key] -v --cacert ca/certs/ca.crt --cert ca/certs/server.crt --key ca/keys/server.key curl https://api-3scale-apicast-staging.$WILDCARD_DOMAIN\?user_key\=[Your_user_key] -v --cacert ca/certs/ca.crt
허용 목록에서 인증서 제거
허용 목록에서 인증서를 제거하려면 3scale 로그인 인증 정보가 필요합니다. TLS 클라이언트 인증서 유효성 검사 정책을 사용하여 APIcast 를 설정해야 합니다. 정책 체인에서 TLS 클라이언트 인증서 유효성 검사를 구성하여 허용 목록에 인증서를 추가해야 합니다.
- TLS 클라이언트 인증서 유효성 검사 링크를 클릭합니다.
-
허용 목록에서 인증서를 제거하려면
x
아이콘을 클릭합니다. - 인증서 제거를 완료하면 정책 업데이트를 클릭합니다.
변경 사항을 저장하려면 정책 체인 업데이트를 클릭합니다.
인증서 사용에 대한 자세한 내용은 Red Hat Certificate System 을 참조하십시오.
4.1.33. TLS 종료
이 섹션에서는 TLS(Transport Layer Security) 종료 정책에 대한 정보를 제공합니다: 개념, 구성, 확인 및 정책에서 파일 제거.
TLS 종료 정책을 사용하면 모든 API에 대해 단일 인증서를 사용하지 않고 각 API에 대한 TLS 요청을 완료하도록 APIcast를 구성할 수 있습니다. APIcast는 클라이언트에 대한 연결을 설정하기 전에 구성 설정을 가져옵니다. 이러한 방식으로 APIcast는 정책의 인증서를 사용하여 TLS를 종료합니다. 이 정책은 다음 소스와 함께 작동합니다.
- 정책 구성에 저장됩니다.
- 파일 시스템에 저장됩니다.
기본적으로 이 정책은 정책 체인에서 활성화되지 않습니다.
정책 체인에서 TLS 종료 구성
이 섹션에서는 Privacy Enhanced mail(PEM) 형식의 인증서를 사용하여 정책 체인에서 TLS 종료를 구성하는 사전 요구 사항 및 단계에 대해 설명합니다. 사전 요구 사항은 다음과 같습니다.
- 사용자가 발급한 인증서입니다.
- PEM 형식의 서버 인증서입니다.
- PEM 형식의 인증서 개인 키입니다.
다음 절차를 따르십시오.
- API에 TLS 종료 정책을 추가하려면 표준 정책 활성화에 설명된 단계를 수행하고 TLS 종료를 선택합니다.
- TLS 종료 링크를 클릭합니다.
- 정책을 활성화하려면 Enabled 확인란을 선택합니다.
-
정책에 TLS 인증서를 추가하려면 더하기
+
아이콘을 클릭합니다. 인증서의 소스를 선택합니다.
포함된 인증서는 기본적으로 선택됩니다. 다음 인증서를 업로드합니다.
- PEM 형식의 인증서 개인 키: 찾아보기 를 클릭하여 선택하고 업로드합니다.
- PEM 형식 인증서: 찾아보기 를 클릭하여 선택하고 업로드합니다.
파일 시스템에서 인증서 - 다음 인증서 경로를 선택하고 지정합니다.
- 인증서의 경로
- 인증서 개인 키의 경로
- TLS 종료를 사용하여 API 설정을 완료하면 업데이트 정책을 클릭합니다.
추가 사항:
-
더하기
+
아이콘을 클릭하여 인증서를 추가할 수 있습니다. - 위쪽 및 아래쪽 화살표를 클릭하여 인증서를 재구성할 수도 있습니다.
변경 사항을 저장하려면 정책 체인 업데이트를 클릭합니다.
TLS 종료 정책의 기능 확인
3scale 로그인 인증 정보가 있어야 합니다. TLS 종료 정책을 사용하여 APIcast를 구성해야 합니다.
정책이 다음 명령과 함께 작동하는 경우 명령줄에서 테스트할 수 있습니다.
curl “${public_URL}:${port}/?user_key=${user_key}" --cacert ${path_to_certificate}/ca.pem -v
다음과 같습니다.
public_URL
스테이징 공용 기본 URL입니다.
port
포트 번호입니다.
user_key
인증할 사용자 키입니다.
path_to_certificate
로컬 파일 시스템의 CA 인증서 경로입니다.
TLS 종료에서 파일 제거
이 섹션에서는 TLS 종료 정책에서 인증서 및 키 파일을 제거하는 단계에 대해 설명합니다.
- 3scale 로그인 인증 정보가 필요합니다.
- TLS 종료 정책으로 APIcast를 구성하여 정책에 인증서를 추가해야 합니다.
인증서를 제거하려면 다음을 수행합니다.
- TLS 종료 링크를 클릭합니다.
-
인증서 및 키를 제거하려면
x
아이콘을 클릭합니다. - 인증서 제거를 완료하면 정책 업데이트를 클릭합니다.
변경 사항을 저장하려면 정책 체인 업데이트를 클릭합니다.
4.1.34. 업스트림
Upstream 정책을 사용하면 정규식을 사용하여 Host 요청 헤더를 구문 분석하고 Private Base URL에 정의된 업스트림 URL을 다른 URL로 교체할 수 있습니다.
예를 들면 다음과 같습니다.
regex /foo
가 있는 정책 및 URL 필드 newexample.com
은 URL https://www.example.com/foo/123/
을 newexample.com
으로 바꿉니다.
정책 체인 참조:
속성 | description | 값 | 필수 항목입니다. |
---|---|---|---|
regex |
| 데이터 유형: 문자열, 유효한 정규식 구문이어야 합니다. | 제공됨 |
url |
| data type: string, 이 URL이 유효한 URL인지 확인 | 제공됨 |
정책 오브젝트 예
{ "name": "upstream", "version": "builtin", "configuration": { "rules": [ { "regex": "^/v1/.*", "url": "https://api-v1.example.com", } ] } }
정책을 구성하는 방법에 대한 자세한 내용은 문서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.35. 업스트림 연결
Upstream 연결 정책을 사용하면 백엔드 서비스 또는 중간 프록시로 열린 연결의 기본값을 변경할 수 있습니다. 모든 시간 초과 값은 초 단위입니다. http_proxy
를 사용하고 HTTP를 사용하여 API 백엔드에 액세스할 때 Upstream 연결 정책에 구성된 시간 초과는 작동하지만 HTTPS를 사용하여 https_proxy
API 백엔드에 액세스할 때 작동하지 않습니다.
사전 요구 사항
- 3scale 설치에 액세스할 수 있어야 합니다.
- 모든 배포가 완료될 때까지 기다려야 합니다.
절차:
- API에 Upstream 연결 정책을 추가하려면 3scale API Management 관리 포털에서 정책 활성화에 설명된 단계를 수행하고 Upstream Connection 을 선택합니다.
- Upstream Connection 링크를 클릭합니다.
- 정책을 활성화하려면 Enabled 확인란을 선택합니다.
업스트림 연결에 대한 옵션을 구성합니다.
read_timeout
연속 읽기 두 작업(초) 사이의 시간 초과입니다.
connect_timeout
연결을 설정하는 시간(초)입니다.
send_timeout
연속 쓰기 작업(초) 사이의 시간 초과입니다.
- Upstream Connection으로 API 설정을 완료하면 업데이트 정책을 클릭합니다.
- 정책 체인 업데이트를 클릭합니다.
추가 리소스
4.1.36. 업스트림 상호 TLS
Upstream 상호 TLS 정책을 사용하면 구성에 설정된 인증서에 따라 APIcast와 업스트림 API 간의 상호 TLS 연결을 설정하고 검증할 수 있습니다.
verify
필드가 활성화되면 정책에서 업스트림 API에서 서버 인증서도 확인합니다. ca_certificates
에는 APIcast가 서버의 유효성을 검사하는 데 사용하는 -----BEGIN CERTIFICATE---- 및 ----END CERTIFICATE-------------
를 포함하여 개인 정보 보호 향상된 메일(PEM) 형식 인증서가 포함되어 있습니다.
검증
필드를 활성화하고 업스트림 API의 인증서를 확인하기 위해 ca_certificates
가 입력되어 있어야 합니다. verify
필드가 활성화되지 않은 경우 업스트림 API의 APIcast 인증서만 검사합니다.
정책 체인에서 업스트림 상호 TLS를 구성하려면 3scale 설치에 액세스할 수 있어야 합니다.
- Upstream 상호 TLS 정책을 API에 추가하려면 3scale API Management 관리 포털에서 정책 활성화에 설명된 단계를 수행하고 Upstream Mutual TLS 를 선택합니다.
- Upstream 상호 TLS 링크를 클릭합니다.
- 정책을 활성화하려면 Enabled 확인란을 선택합니다.
인증서 유형을 선택합니다.
path
OpenShift에서 생성한 인증서와 같은 인증서 경로를 지정하려면 다음을 수행합니다.
포함됨
타사 생성된 인증서를 파일 시스템에서 업로드하여 사용하려는 경우.
- 인증서 에서 클라이언트 인증서를 지정합니다.
- 인증서 키의 키를 표시합니다.
- Upstream 상호 TLS로 API 설정을 완료한 경우 정책 체인 업데이트를 클릭합니다.
변경 사항을 승격하려면 다음을 수행합니다.
- [ your_product] 페이지로 이동합니다 > Integration > Configuration.
- APIcast 구성에서 Promote v# to Staging APIcast 를 클릭합니다.
V #
은 승격할 구성의 버전 번호를 나타냅니다.
경로 구성
다음과 같이 OpenShift 및 Kubernetes 시크릿의 인증서 경로를 사용합니다.
{ "name": "apicast.policy.upstream_mtls", "configuration": { "certificate": "/secrets/client.cer", "certificate_type": "path", "certificate_key": "/secrets/client.key", "certificate_key_type": "path" } }
포함된 구성
http 양식 및 파일 업로드에 대해 다음 구성을 사용합니다.
{ "name": "apicast.policy.upstream_mtls", "configuration": { "certificate_type": "embedded", "certificate_key_type": "embedded", "certificate": "data:application/pkix-cert;name=client.cer;base64,XXXXXXXXXXX", "certificate_key": "data:application/x-iwork-keynote-sffkey;name=client.key;base64,XXXXXXXX" } }
추가 필드인 ca_certificates
에 대한 자세한 내용은 Upstream 상호 TLS, 정책 구성 스키마를 확인합니다
.
추가 고려 사항
Upstream 상호 TLS 정책은 APICAST_PROXY_HTTPS_CERTIFICATE_KEY
및 APICAST_PROXY_HTTPS_CERTIFICATE
환경 변수 값을 덮어씁니다. 정책에서 설정한 인증서를 사용하므로 해당 환경 변수가 적용되지 않습니다.
4.1.37. URL 재작성
URL 재작성 정책을 사용하면 요청 경로 및 쿼리 문자열을 수정할 수 있습니다.
3scale APIcast 정책과 결합하면 URL 재작성 정책이 정책 체인의 APIcast 정책 앞에 배치되면 APIcast 매핑 규칙이 수정된 경로에 적용됩니다. URL 재작성 정책이 정책 체인의 APIcast 뒤에 배치되면 매핑 규칙이 원래 경로에 적용됩니다.
정책은 다음 두 가지 작업을 지원합니다.
명령
요청 경로를 다시 작성하는 데 적용할 명령 목록입니다.
query_args_commands
요청의 쿼리 문자열을 다시 작성하는 데 적용할 명령 목록입니다.
경로 재작성 명령
다음은 명령 목록의 각 명령에
포함된 구성 매개변수입니다.
op
적용할 작업입니다. 사용 가능한 옵션은
sub
및gsub
입니다.하위
작업은 첫 번째 일치 항목만 지정된 정규식으로 대체합니다.gsub
작업은 일치하는 모든 항목이 지정된 정규식으로 교체됩니다. 하위 및 g sub 작업에 대한 설명서를 참조하십시오.regex
일치시킬 Perl 호환 정규식입니다.
replace
일치하는 경우 사용되는 대체 문자열입니다.
options
이는 선택 사항입니다. regex 일치 방법을 정의하는 옵션. 사용 가능한 옵션에 대한 자세한 내용은 OpenResty Lua 모듈 프로젝트 설명서의 ngx.re.match 섹션을 참조하십시오.
break
이는 선택 사항입니다. 확인란이 활성화된 상태에서 true로 설정하면 명령이 URL을 다시 실행하면 마지막으로 적용된 후 목록의 모든 posterior 명령이 삭제됩니다.
쿼리 문자열을 다시 작성하는 명령
다음은 query_args_commands
목록의 각 명령이 다음으로 구성된 구성 매개변수입니다.
op
쿼리 인수에 적용할 작업입니다. 다음 옵션을 사용할 수 있습니다.
add
기존 인수에 값을 추가합니다.
set
설정되지 않은 경우 arg를 생성하고 설정 시 값을 바꿉니다.
push
설정되지 않은 경우 arg를 생성하고 설정 시 값을 추가합니다.
삭제
arg를 삭제합니다.
ARG
작업이 적용되는 쿼리 인수 이름입니다.
value
쿼리 인수에 사용되는 값을 지정합니다. 값 유형 "liquid"의 경우 값은
{{ variable_from_context }}
형식이어야 합니다.삭제
작업의 경우 값이 고려되지 않습니다.value_type
이는 선택 사항입니다. 쿼리 인수 값이 평가되는 방법을 정의하고 일반 텍스트의 경우
일반
텍스트 또는 리쿼드 템플릿으로 평가를 위한유동성
일 수 있습니다. 자세한 내용은 5.1절. “정책에서 변수 및 필터 사용”의 내용을 참조하십시오. 지정하지 않으면 기본적으로 "plain" 유형이 사용됩니다.
예제
URL 재작성 정책은 다음과 같이 구성됩니다.
{ "name": "url_rewriting", "version": "builtin", "configuration": { "query_args_commands": [ { "op": "add", "arg": "addarg", "value_type": "plain", "value": "addvalue" }, { "op": "delete", "arg": "user_key", "value_type": "plain", "value": "any" }, { "op": "push", "arg": "pusharg", "value_type": "plain", "value": "pushvalue" }, { "op": "set", "arg": "setarg", "value_type": "plain", "value": "setvalue" } ], "commands": [ { "op": "sub", "regex": "^/api/v\\d+/", "replace": "/internal/", "options": "i" } ] }
APIcast로 전송되는 원래 요청 URI입니다.
https://api.example.com/api/v1/products/123/details?user_key=abc123secret&pusharg=first&setarg=original
URL 재작성을 적용한 후 APIcast가 API 백엔드에 전송하는 URI입니다.
https://api-backend.example.com/internal/products/123/details?pusharg=first&pusharg=pushvalue&setarg=setvalue
다음 변환이 적용됩니다.
-
하위 문자열
/api/v1/
은 유일한 경로 재작성 명령과 일치하며/internal/
로 교체됩니다. -
user_key
쿼리 인수가 삭제됩니다. -
값
pushvalue
는pusharg
쿼리 인수에 추가 값으로 추가됩니다. -
쿼리 인수
setarg
의원래
값은 구성된 값setvalue
로 교체됩니다. -
쿼리 인수
add
arg
정책을 구성하는 방법에 대한 자세한 내용은 문서의 3scale API Management 섹션에서 정책 체인 생성 을 참조하십시오.
4.1.38. 캡처 캡처로 URL 재작성
URL Rewriting with Captures 정책은 URL 재작성 정책의 대안이며 API 백엔드에 전달하기 전에 API 요청의 URL을 다시 작성할 수 있습니다.
URL Rewriting with Captures 정책은 URL에서 인수를 검색하고 다시 작성된 URL에 해당 값을 사용합니다.
정책은 변환
구성 매개변수를 지원합니다. 요청 URL에 적용되는 변환을 설명하는 오브젝트 목록입니다. 각 tranformation 오브젝트는 다음 두 가지 속성으로 구성됩니다.
match_rule
이 규칙은 들어오는 요청 URL과 일치합니다.
{nameOfArgument}
형식으로 이름이 지정된 인수를 포함할 수 있습니다. 이러한 인수는 다시 작성된 URL에서 사용할 수 있습니다. URL은match_rule
과 정규식으로 비교됩니다. 이름이 지정된 인수와 일치하는 값은 다음 문자(PCRE regex 표기법)만 포함해야 합니다.[\w-.~%!$&'()*,;=@:]
. 다른 regex 토큰은 문자열 시작 부분에^
, 문자열 끝에$
와 같은match_rule
표현식에 사용할 수 있습니다.템플릿
원래 URL을 사용하여 다시 작성하는 URL 템플릿입니다.
match_rule
에서 이름이 지정된 인수를 사용할 수 있습니다.
원본 URL의 쿼리 매개변수는 템플릿에
지정된 쿼리 매개변수와 병합됩니다.
예제
Captures 정책을 사용하여 URL Rewriting은 다음과 같이 구성됩니다.
{ "name": "rewrite_url_captures", "version": "builtin", "configuration": { "transformations": [ { "match_rule": "/api/v1/products/{productId}/details", "template": "/internal/products/details?id={productId}&extraparam=anyvalue" } ] } }
APIcast로 전송되는 원래 요청 URI입니다.
https://api.example.com/api/v1/products/123/details?user_key=abc123secret
URL 재작성을 적용한 후 APIcast가 API 백엔드에 전송하는 URI입니다.
https://api-backend.example.com/internal/products/details?user_key=abc123secret&extraparam=anyvalue&id=123
4.1.39. WebSocket
WebSocket 정책은 업스트림 API에 WebSocket 프로토콜 연결을 활성화합니다. WebSocket 프로토콜을 활성화하려면 다음을 고려하십시오.
WebSocket 프로토콜은 추가 헤더를 허용하지 않습니다.
- 인증 정보 위치에 대한 쿼리 매개 변수를 사용하여 WebSocket 정책을 구성합니다.
- WebSocket 정책은 OIDC(OpenID Connect) 인증 방법을 지원하지 않습니다.
- WebSocket 프로토콜은 HTTP/2 표준의 일부가 아닙니다.
WebSocket 연결을 활성화하는 지정된 업스트림 API의 경우 백엔드를 http[s]
또는 ws[s]
로 정의할 수 있습니다.
정책 체인에 WebSocket 정책을 추가하는 경우 3scale API Management APIcast 정책 이전이어야 합니다.