이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.
Apigee Edge 문서 보기
이 페이지에서는 Kubernetes용 Apigee APIM Operator를 사용하여 Google Kubernetes Engine(GKE) 게이트웨이에 Apigee 런타임 정책 및 Google 토큰 삽입 정책을 추가하는 방법을 설명합니다. 게이트웨이에 사용 가능한 정책 집합을 추가하면 API 제품 시행을 넘어 보안 및 비즈니스 규칙을 추가하여 게이트웨이의 기능을 확장할 수 있습니다.
Kubernetes용 Apigee APIM Operator를 사용하여 게이트웨이에 다음 정책을 추가할 수 있습니다.
- SpikeArrest 정책
- JavaScript 정책
- Google 토큰 삽입 정책
- GenerateJWT 정책
- KVM 정책
- OASValidation 정책
- ServiceCallout 정책
- OAuthv2 정책
- ResponseCache 정책
- VerifyAPIKey 정책
개요
다음 섹션에서는 아래 작업을 수행하는 방법을 설명합니다.
- GKE 게이트웨이에 정책을 추가합니다.
- 정책 사용을 시행하는 템플릿 규칙을 만듭니다.
- 템플릿 규칙을 사용하는 Apigee 템플릿을 만듭니다.
- 템플릿을 사용하여 Apigee Gateway 정책을 배포합니다.
- 정책 시행을 확인합니다.
시작하기 전에
이 가이드의 예시로 사용된 전체 정책 집합으로 GKE 게이트웨이를 수정하려면 Apigee 내에서 토큰을 만들고 프록시 및 확장 프로그램을 배포하는 데 필요한 역할이 있는 서비스 계정이 있어야 합니다. Google 토큰을 만들지 않는 경우 서비스 계정에 추가 역할을 추가할 필요가 없으며 다음 섹션으로 건너뛸 수 있습니다.
필요한 권한이 있는 서비스 계정을 만들려면 다음 안내를 따르세요.
- Kubernetes용 Apigee APIM Operator 설치 가이드에서
apigee-apim-gsa
라는 서비스 계정을 만든 경우 이 단계를 건너뛰고 다음 단계로 진행할 수 있습니다. 그렇지 않은 경우 서비스 계정을 만듭니다.gcloud iam service-accounts create apigee-apim-gsa --project=$PROJECT_ID
- 서비스 계정에 토큰을 만드는 데 필요한 역할을 부여합니다.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/iam.serviceAccountTokenCreator"
apigee-apim-gsa
서비스 계정에 프록시 및 확장 프로그램을 배포하는 데 필요한 역할을 부여합니다.gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:apigee-apim-gsa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/iam.serviceAccountUser"
정책으로 GKE 게이트웨이 수정
하나 이상의 정책으로 GKE 게이트웨이를 수정하여 기능을 확장할 수 있습니다. 이 예시 둘러보기에서는 두 개의 Apigee 정책 및 Google 토큰 삽입 정책에 관한 사양이 포함된 yaml
파일을 게이트웨이에 적용합니다.
다음 yaml
파일을 사용하여 게이트웨이에 적용된 각 정책은 게이트웨이로 전송된 요청을 평가할 때 서로 다른 역할을 수행합니다.
- SpikeArrest 정책은 시간 단위당 허용되는 최대 요청 비율을 정의하여 최대 메시지 비율을 제어합니다. 이 예시에서 최대 비율은 분당 5로 설정됩니다. SpikeArrest 정책을 사용하여 트래픽의 급증을 완화하는 방법에 관한 자세한 내용은 SpikeArrest 정책을 참조하세요.
- JavaScript 정책을 사용하면 게이트웨이 요청에 커스텀 JavaScript 코드를 추가할 수 있습니다. 이 예시에서는 정책이 요청에 커스텀 헤더를 추가하는 데 사용됩니다. JavaScript 정책을 사용하여 커스텀 코드를 추가하는 방법에 관한 자세한 내용은 JavaScript 정책을 참조하세요.
- Google 토큰 삽입 정책은 AssignMessage 정책을 사용하여 Google 인증 액세스 토큰을 게이트웨이 요청에 삽입하는 데 사용됩니다. Apigee에서는 Google OAuth 토큰 또는 OpenID Connect 토큰을 사용하여 Google 서비스로 인증할 수 있도록 지원합니다. 인증 토큰에 관한 자세한 내용은 Google 인증 사용을 참조하세요.
게이트웨이에 다음과 같이 정책을 추가합니다.
apim
네임스페이스에apigee-policies.yaml
이라는 새 파일을 만듭니다.- 다음 파일의 콘텐츠를 새로 만든 파일에 복사합니다.
# apigee-policies.yaml apiVersion: apim.googleapis.com/v1 kind: SpikeArrest metadata: name: spike-arrest namespace: apim spec: identifier: ref: request.header.name useEffectiveCount: true peakMessageRate: value: "5pm" --- apiVersion: apim.googleapis.com/v1 kind: Javascript metadata: name: js-add-headers namespace: apim spec: timeLimit: 2000 source: | var sum = 1+1; context.setVariable("request.header.first", 1); context.setVariable("request.header.second", 1); context.setVariable("request.header.sum", sum); --- apiVersion: apim.googleapis.com/v1 kind: AssignMessage metadata: name: google-token-policy namespace: apim spec: setActions: - authentication: googleAccessToken: scopes: - 'https://www.googleapis.com/auth/cloud-platform' AssignTo: createNew: false type: request --- apiVersion: apim.googleapis.com/v1 kind: KVM metadata: name: kvm-1 namespace: apim spec: delete: - keys: - value: mykey description: kvm1 displayName: kvm1 exclusiveCache: true expiryTimeInSecs: 3600 get: - assignTo: response.header.mykvm index: 0 keys: - value: mykey initialEntries: - keys:s - key1 values:s - val1 - keys:s - mykey values: - initvalue isEncrypted: false mapIdentifier: mapIdentifier mapName:s ref: kvm.mapname value: kvmname put: - keys: - value: mykey values: - value: request.header.mykvm scope: environment --- apiVersion: apim.googleapis.com/v1 kind: OASValidation metadata: name: oas-validation-1 spec: openApiSpec: | openapi: 3.0.4 info: title: Sample API description: Optional multi/single line description. version: 0.1.9 servers: - url: http://apigee-apim-operator-test.apigee.net description: Optional server description, our main host in httproute paths: /get: get: summary: just for test description: Optional extended description in CommonMark or HTML. parameters: - name: X-Request-Type in: header description: Must be 'internal' or 'external'. required: true schema: type: string enum: - internal - external responses: '200': # status code description: A JSON object content: application/json: schema: type: object properties: headers: type: object source: request --- apiVersion: apim.googleapis.com/v1 kind: ServiceCallout metadata: name: service-callout-1 namespace: apim spec: request: clearPayload: true variable: myRequest ignoreUnresolvedVariables: true removeActions: - payload: true - queryParams: - name: rq-param1 - name: rq-param2 copyActions: - version: true - verb: true addActions: - headers: - name: X-header1 value: value1 - name: X-header2 value: value2 - queryParams: - name: q-param1 value: value1 - name: q-param2 value: value2 setActions: - verb: PUT - formParams: - name: f-param1 value: value1 - name: f-param2 value: value2 response: calloutResponse timeout: 30000 httpTargetConnection: URL: https://httpbin.org/put properties: - name: success.codes value: 1xx,2xx,3xx,400 - name: supports.http11 value: "true"
- 다음 명령어를 사용하여 게이트웨이에
yaml
파일을 적용합니다.kubectl -n apim apply -f apigee-policies.yaml
TemplateRule을 SharedFlow 템플릿으로 만들기
이 단계에서는 게이트웨이에 추가한 정책을 적용할 TemplateRule
을 만듭니다.
템플릿 규칙은 서비스 개발자가 게이트웨이 트래픽에 승인된 정책만 적용하도록 조직 관리자가 만든 SharedFlows의 규칙입니다. 템플릿 규칙을 사용하면 개발자가 사용할 수 있는 정책, 특정 사용 사례에 필요한 정책, 서비스 개발자가 사용할 수 없는 정책을 파악할 수 있습니다.
템플릿 규칙 만들기
AssignMessage 정책의 사용을 적용하는 템플릿 규칙을 만듭니다.
apim
네임스페이스에template-rule.yaml
이라는 새yaml
파일을 만듭니다.- 다음 파일의 콘텐츠를 새로 만든 파일에 복사합니다.
# template-rule.yaml apiVersion: apim.googleapis.com/v1 kind: ApimTemplateRule metadata: name: template-rule namespace: apim spec: allowList: [SpikeArrest, Javascript, GenerateJWT, KVM, OASValidation, OAuthv2, ServiceCallout] requiredList: [AssignMessage] denyList: []
이 예시에서 템플릿 규칙은 개발자에게 Google 토큰 삽입 정책을 설명하는 AssignMessage 정책이 필요하다고 알려줍니다. 또한 개발자에게 API 관리에서 SpikeArrest, JavaScript, GenerateJWT, KVM, OASValidation, OAuthv2, ServiceCallout 정책을 사용할 수 있다고 안내합니다. 거부 목록에 지정된 정책이 없습니다.
템플릿 규칙 적용
다음 명령어를 사용하여 템플릿 규칙을 적용합니다.
kubectl apply -f template-rule.yaml
템플릿 규칙을 사용할 Apigee 템플릿 만들기
이전 섹션에서 만든 템플릿 규칙을 포함하는 Apigee 템플릿을 만듭니다.
apim
네임스페이스에new-admin-template.yaml
이라는 새yaml
파일을 만듭니다.- 다음 파일의 콘텐츠를 새로 만든 파일에 복사합니다.
# new-admin-template.yaml apiVersion: apim.googleapis.com/v1 kind: ApimTemplate metadata: name: new-admin-template namespace: apim spec: apimTemplateRule: group: apim.googleapis.com kind: ApimTemplateRule name: template-rule namespace: apim templates: - mode: REQUEST flows: - name: preflow policies: - group: apim.googleapis.com kind: OASValidation name: oas-validation-1 namespace: apim - group: apim.googleapis.com kind: SpikeArrest name: spike-arrest namespace: apim - name: ConditionalGetFlow policies: - group: apim.googleapis.com kind: Javascript name: js-add-headers namespace: apim condition: request.verb="GET" - name: postflow policies: - group: apim.googleapis.com kind: AssignMessage name: google-token-policy namespace: apim - group: apim.googleapis.com kind: ServiceCallout name: service-callout-1 namespace: apim - mode: RESPONSE flows: - name: postflow policies: - group: apim.googleapis.com kind: KVM name: kvm-1 namespace: apim
- 다음 명령어를 사용하여 새 템플릿을 적용합니다.
kubectl apply -f new-admin-template.yaml
Apigee 게이트웨이 정책 배포
이 단계에서는 ApigeeGatewayPolicy
사양이 포함된 새 파일을 게이트웨이에 적용합니다.
이 정책은 Apigee 템플릿을 게이트웨이에 배포하는 데 사용됩니다.
Apigee 게이트웨이 정책을 배포합니다.
apim
네임스페이스에apigee-gateway-policy-withSA.yaml
이라는 새yaml
파일을 만듭니다.- 다음 파일의 콘텐츠를 새로 만든 파일에 복사합니다.
# apigee-gateway-policy-withSA.yaml apiVersion: apim.googleapis.com/v1 kind: ApigeeGatewayPolicy metadata: name: apim-template-injection namespace: apim spec: serviceAccount: apigee-apim-gsa@PROJECT_ID.iam.gserviceaccount.com ref: group: apim.googleapis.com kind: ApimTemplate name: new-admin-template namespace: apim targetRef: group: apim.googleapis.com kind: APIMExtensionPolicy name: global-ext-lb1-apim-policy namespace: apim
- 정책을 적용합니다.
kubectl apply -f apigee-gateway-policy-withSA.yaml
- 새 게이트웨이 정책의 배포 상태를 확인합니다.
kubectl -n apim get ApigeeGatewayPolicy
배포하면 정책
STATUS
에CREATED
가 표시됩니다.
새 게이트웨이 정책이 배포되면 2분 정도 기다린 후 게이트웨이에 요청을 전송하여 정책이 클러스터에 전파되도록 합니다.
정책 시행 확인
Apigee 게이트웨이 정책이 예상대로 작동하는지 확인하려면 다음 섹션에 설명된 대로 게이트웨이에 요청을 전송합니다.
AssignMessage 정책 시행
AssignMessage 정책을 사용하여 {company_name} 토큰이 요청에 삽입되었는지 확인하려면 다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다.kubectl get gateway GATEWAY_NAME
HOST_NAME
은 호스트의 이름입니다.API_KEY
는 API 키 값입니다.
성공적인 응답에는 다음과 같이 생성된 Bearer 토큰과 함께 Authorization
헤더가 포함되어야 합니다.
{ "args": {}, "headers": { "Accept": "*/*", "Authorization": "Bearer ya29.c.c0ASRK0Gbw03y9cfvxL11DxaRYBQUU18SmUP4Vu63OckHI5cX7wJ4DmGMG2vbDDS69HXJHqMj-lak4tcqOsJGmE65crn2gNuJLanXidwM8", "First": "1.0", "Host": "apigee-apim-operator-test.apigee.net", "Second": "1.0", "Sum": "2", "User-Agent": "curl/8.7.1", "X-Api-Key": "McYcHGR3PTSGLXExvKADwQ1JJeCjgPDUvAakCl0rJKCFaX0Y", "X-Cloud-Trace-Context": "0fd3dadc2a3c328fa968d5f5f1434c29/18300783092696918345" }, "origin": "34.54.108.129", "url": "apigee-apim-operator-test.apigee.net/get" }
SpikeArrest 정책 시행
1분 이내에 게이트웨이에 요청을 10번 전송하여 SpikeArrest 정책의 적용을 테스트할 수 있습니다.
다음 스크립트를 실행하여 요청을 생성할 수 있습니다.
#!/bin/sh for i in $(seq 1 11); do curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" sleep 1 done
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서GATEWAY_NAME
은 게이트웨이 이름입니다.kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.API_KEY
는 테스트 설정에서 획득한 API 키 값입니다.
다음과 비슷한 응답이 표시됩니다.
"fault":{"faultstring":"Spike arrest violation. Allowed rate : MessageRate{capacity=5, period=Minutes}","detail":{"errorcode":"policies.ratelimit.SpikeArrestViolation"}}}
JavaScript 정책 시행
JavaScript 정책이 예상대로 작동하는지 확인하려면 다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.
curl http://GATEWAY_IP_ADDRESS/get \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -i
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서GATEWAY_NAME
은 게이트웨이 이름입니다.kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.API_KEY
는 테스트 설정에서 획득한 API 키 값입니다.
JavaScript 정책은 응답에 표시된 대로 First
, Second
, Sum
의 3가지 요청 헤더를 설정합니다.
HTTP/1.1 200 OK ... { "args": {}, "headers": { ... "First": "1.0", ... "Second": "1.0", "Sum": "2", ... }, ... }
OASValidation 정책 시행
OASValidation 정책이 예상대로 작동하는지 확인하려면 다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.
curl "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: badvalue"
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서GATEWAY_NAME
은 게이트웨이 이름입니다.kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.API_KEY
는 테스트 설정에서 획득한 API 키 값입니다.
명령어에 잘못된 X-Request-Type
헤더 값이 포함되어 있습니다. 다음과 유사한 응답이 표시되면서 요청이 실패합니다.
{"fault":{"faultstring":"OASValidation oas-validation-1 with resource \"oas:\/\/oas-validation-1.yaml\": failed with reason: \"[ERROR - Instance value (\"badvalue\") not found in enum (possible values: [\"internal\",\"external\"]): []]\"","detail":{"errorcode":"steps.oasvalidation.Failed"}}}
유효한 X-Request-Type
헤더 값을 사용하여 동일한 요청을 전송하면 성공합니다. 예를 들면 다음과 같습니다.
curl "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -i
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서GATEWAY_NAME
은 게이트웨이 이름입니다.kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.API_KEY
는 테스트 설정에서 획득한 API 키 값입니다.
ServiceCallout 정책 시행
디버그 세션을 열고 프록시에 유효한 요청을 몇 개 전송하여 ServiceCallout 정책의 시행을 확인할 수 있습니다.
디버그 세션을 열려면 다음 단계를 따르세요.
- Google Cloud 콘솔에서 API 프록시 페이지로 이동합니다.
- Kubernetes용 Apigee APIM Operator를 위해 생성된 환경에 배포한
global-ext-lb1-apim-policy
프록시를 선택합니다. - 디버그 탭을 클릭합니다.
- 디버그 세션 창에서 디버그 세션 시작을 클릭합니다.
- Debug session 창에서 다음과 같이 선택합니다.
- 환경: 사용 가능한 환경 목록에서 APIM Operator용으로 만든 환경을 선택합니다.
- 필터: 없음(모든 트랜잭션)을 선택합니다.
- 시작을 클릭합니다.
세션이 시작되면 유효한 요청을 프록시에 보낼 수 있습니다.
curl "GATEWAY_IP_ADDRESSget" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -i
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서GATEWAY_NAME
은 게이트웨이 이름입니다.kubectl get gateway GATEWAY_NAME
HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.API_KEY
는 테스트 설정에서 획득한 API 키 값입니다.
요청 및 응답 트랜잭션이 트랜잭션 창에 표시됩니다. 목록에서 성공한 트랜잭션을 선택하여 흐름을 표시합니다. ServiceCallout
정책이 성공적으로 실행되었음을 확인할 수 있습니다.
KVM 정책 시행
KVM 정책이 성공적으로 실행되면 mykey
키의 시작 값으로 KVM을 초기화합니다.
응답 트랜잭션이 있으면 KVM 정책이 mykey
값을 검색하여 응답 헤더 mykvm
에 저장합니다.
KVM 정책이 다시 실행되면 요청 헤더 mykvm
에서 가져온 mykey
의 새 값이 삽입됩니다.
각 트랜잭션의 헤더를 확인하여 정책이 한 트랜잭션에서 KVM에 값을 저장하고 다음 트랜잭션에서 동일한 값을 검색하는지 확인할 수 있습니다(다음 예 참고).
KVM 정책을 테스트합니다.
- 요청을 게이트웨이에 보냅니다.
curl -i "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" \ -H "KVM_NAME: next-value1" -i
각 항목의 의미는 다음과 같습니다.
GATEWAY_IP_ADDRESS
는 게이트웨이의 IP 주소입니다. 다음 명령어를 사용하여 게이트웨이 IP 주소를 검색할 수 있습니다. 여기서GATEWAY_NAME
은 게이트웨이 이름입니다.kubectl get gateway GATEWAY_NAME
HOST_NAME
은 게이트웨이의HTTPRoute
에 정의된 호스트 이름입니다.API_KEY
는 테스트 설정에서 획득한 API 키 값입니다.KVM_NAME
은 KVM의 이름입니다.
- 응답 헤더를 확인하여 KVM 정책이 성공적으로 실행되었고 초기 값이
mykvm
에 저장되었는지 확인합니다. 다음과 비슷한 응답이 표시됩니다.HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * Content-Length: 517 content-type: application/json date: ... server: gunicorn/19.9.0 mykvm: initvalue via: 1.1 google { "args": { ... "url": "http://apigee-apim-operator-test.apigee.net/get" } }
- 게이트웨이에 다른 요청을 보냅니다.
curl -i "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "mykvm: next"X-Request-Type: external" -H "mykvm: next-value2" -i
응답은 다음과 비슷하게 표시됩니다.
HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * Content-Length: 517 content-type: application/json date: ... server: gunicorn/19.9.0 mykvm: next-value2 via: 1.1 google { "args": { ... "url": "http://apigee-apim-operator-test.apigee.net/get?rq-param2=rq-val1&x-param1=xval1" } }
mykvm
헤더 값이 요청 헤더mykvm
값으로 업데이트되었으므로 KVM 정책이 성공적으로 실행되었음을 확인할 수 있습니다. - 요청을 한 번 더 보냅니다.
curl -i "http://GATEWAY_IP_ADDRESS/get" \ -H "Host: HOST_NAME" \ -H "x-api-key: API_KEY" \ -H "X-Request-Type: external" -H "mykvm: next-value3" -i
응답은 다음과 비슷하게 표시됩니다.
HTTP/1.1 200 OK access-control-allow-credentials: true access-control-allow-origin: * Content-Length: 517 content-type: application/json date: ... server: gunicorn/19.9.0 mykvm: next-value2 via: 1.1 google { "args": { ... "url": "http://apigee-apim-operator-test.apigee.net/get?rq-param2=rq-val1&x-param1=xval1" } }
mykvm
헤더의 값이 다시 업데이트되어 응답에 표시된 값이 이전 트랜잭션에 저장된 값임을 보여줍니다.
문제 해결
GKE 게이트웨이에 정책을 추가할 때 문제가 발생하면 APIM Operator 문제 해결에서 일반적인 오류의 해결 방법을 참조하세요.
다음 단계
- SpikeArrest 정책에 대해 자세히 알아보세요.
- JavaScript 정책에 대해 자세히 알아보세요.