이 페이지는 Apigee에 적용되지만 Apigee Hybrid에는 적용되지 않습니다.
Apigee Edge 문서 보기
이 페이지에서는 Kubernetes용 Apigee APIM Operator(미리보기)를 사용하여 Google Kubernetes Engine(GKE) 게이트웨이에 Apigee 런타임 정책 및 Google 토큰 삽입 정책을 추가하는 방법을 설명합니다. 게이트웨이에 사용 가능한 정책 집합을 추가하면 API 제품 시행을 넘어 보안 및 비즈니스 규칙을 추가하여 게이트웨이의 기능을 확장할 수 있습니다.
Kubernetes용 Apigee APIM Operator를 사용하여 게이트웨이에 다음 정책을 추가할 수 있습니다.
개요
다음 섹션에서는 아래 작업을 수행하는 방법을 설명합니다.
- 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/v1alpha1 kind: SpikeArrest metadata: name: spike-arrest namespace: apim spec: identifier: ref: request.header.name useEffectiveCount: true peakMessageRate: value: "5pm" --- apiVersion: apim.googleapis.com/v1alpha1 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/v1alpha1 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
- 다음 명령어를 사용하여 게이트웨이에
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/v1alpha1 kind: ApimTemplateRule metadata: name: template-rule namespace: apim spec: allowList: [SpikeArrest, Javascript] requiredList: [AssignMessage] denyList: []
이 예시에서 템플릿 규칙은 개발자에게 Google 토큰 삽입 정책을 설명하는 AssignMessage 정책이 필요하다고 알려줍니다. 또한 개발자에게 API 관리에서 SpikeArrest 및 JavaScript 정책을 사용할 수 있다고 안내합니다. 거부 목록에 지정된 정책이 없습니다.
템플릿 규칙 적용
다음 명령어를 사용하여 템플릿 규칙을 적용합니다.
kubectl apply -f template-rule.yaml
템플릿 규칙을 포함하도록 Apigee 템플릿 업데이트
이전 섹션에서 만든 템플릿 규칙을 포함하도록 Apigee 템플릿을 업데이트합니다.
apim
네임스페이스에new-admin-template.yaml
이라는 새yaml
파일을 만듭니다.- 다음 파일의 콘텐츠를 새로 만든 파일에 복사합니다.
# new-admin-template.yaml apiVersion: apim.googleapis.com/v1alpha1 kind: ApimTemplate metadata: name: new-admin-template namespace: apim spec: apimTemplateRule: group: apim.googleapis.com kind: ApimTemplateRule name: template-rule namespace: apim templates: - policies: - group: apim.googleapis.com kind: SpikeArrest name: spike-arrest namespace: apim - group: apim.googleapis.com kind: Javascript name: js-add-headers namespace: apim - group: apim.googleapis.com kind: AssignMessage name: google-token-policy 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/v1alpha1 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 게이트웨이 정책이 예상대로 작동하는지 확인하려면 게이트웨이에 요청을 전송하고 Google 토큰이 요청에 삽입되는지 확인합니다.
다음 명령어를 사용하여 게이트웨이에 요청을 전송합니다.
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY" -k
각 항목의 의미는 다음과 같습니다.
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" }
문제 해결
GKE 게이트웨이에 정책을 추가할 때 문제가 발생하면 APIM Operator 문제 해결에서 일반적인 오류의 해결 방법을 참조하세요.
다음 단계
- SpikeArrest 정책에 대해 자세히 알아보세요.
- JavaScript 정책에 대해 자세히 알아보세요.