このページは Apigee と Apigee ハイブリッドに適用されます。
Apigee Edge のドキュメントを表示する。
このページでは、Apigee Operator for Kubernetes で使用可能なデフォルトのセキュリティと割り当ての適用オプションを有効にする方法について説明します。
始める前に
このタスクを開始する前に、次の手順を完了してください。
- Kubernetes 用の Apigee Operator をインストールします。インストール手順については、Apigee Operator for Kubernetes をインストールするをご覧ください。
- トラフィック サービス拡張機能を作成します。この手順を完了するには、
ApigeeBackendService
またはAPIMExtensionPolicy
を使用します。APIMExtensionPolicy
を使用してトラフィック拡張機能を作成する方法については、APIMExtensionPolicy を作成するをご覧ください。ApigeeBackendService
を使用してトラフィック拡張機能を作成する方法については、ApigeeBackendService を作成するをご覧ください。
ApigeeBackendService
または APIMExtensionPolicy
を使用して GKE Gateway のトラフィック サービス拡張機能を作成したかどうかにかかわらず、このチュートリアルの手順を完了して、バッキング APIMExtensionPolicy
に追加されたデフォルトの API キーと割り当てポリシーを有効にする必要があります。
必要なロール
Apigee Operator for Kubernetes をインストールするで説明されているように、必要なロールをサービス アカウントに割り当てた場合は、これらのタスクを完了するために追加の IAM ロールや権限は必要ありません。
Kubernetes に組み込まれたロールベース アクセス制御(RBAC)メカニズムを使用して、Google Kubernetes Engine クラスタ内のリソースに対するアクションを認可できます。詳細については、ロールベース アクセス制御を使用してクラスタ内でのアクションを認可するをご覧ください。
概要
以降のセクションでは、Apigee Operator for Kubernetes で使用可能なデフォルトのセキュリティと割り当ての適用オプションを有効にする方法について説明します。このチュートリアルでは、次のことを行います。
- API プロダクトを定義する。
- API オペレーション セットを定義する。
- Apigee サービス拡張機能をテストする。
- Google Cloud コンソールで Apigee API Analytics を表示する。
API プロダクトと API オペレーション セットの定義に必要な手順は、ApigeeBackendService
または APIMExtensionPolicy
を使用して GKE Gateway のトラフィック拡張機能を作成したかどうかによって若干異なります。
API プロダクトを定義する
このステップでは、API キーの適用と割り当てポリシーの管理に使用される API プロダクトを定義します。
APIMExtensionPolicy
を使用する
API プロダクトを定義します。
apim
名前空間にapi-product.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# api-product.yaml apiVersion: apim.googleapis.com/v1 kind: APIProduct metadata: name: api-product namespace: apim spec: approvalType: auto description: Http bin GET calls displayName: api-product enforcementRefs: - name: global-ext-lb1-apim-policy kind: APIMExtensionPolicy group: apim.googleapis.com namespace: apim attributes: - name: access value: private
- 次のコマンドを使用して、ファイルを Gateway に適用します。
kubectl -n apim apply -f api-product.yaml
ApigeeBackendService
を使用する
API プロダクトを定義します。
apim
名前空間にapi-product.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。
# api-product.yaml apiVersion: apim.googleapis.com/v1 kind: APIProduct metadata: name: api-product namespace: apim spec: approvalType: auto description: Http bin GET calls displayName: api-product enforcementRefs: - name: global-ext-lb1-apim-policy kind: ApigeeBackendService group: apim.googleapis.com namespace: default attributes: - name: access value: private
- 次のコマンドを使用して、ファイルを Gateway に適用します。
kubectl -n default apply -f api-product.yaml
API オペレーション セットを定義する
このステップでは、REST オペレーションの適用を管理するために使用する API オペレーション セットを定義します。
APIMExtensionPolicy
を使用する
前のステップで作成した API プロダクトの API オペレーション セットを定義します。
apim
名前空間にapim-policies.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。このファイルでは、前のステップで定義した API プロダクトの割り当てポリシーと使用可能な REST オペレーションを定義します。
# apim-policies.yaml apiVersion: apim.googleapis.com/v1 kind: APIOperationSet metadata: name: item-set namespace: apim spec: apiProductRefs: - name: api-product kind: APIProduct group: apim.googleapis.com namespace: apim quota: limit: 10 interval: 1 timeUnit: minute restOperations: - name: GetItems path: /get methods: - GET
- ファイルを Gateway に適用します。
kubectl -n apim apply -f apim-policies.yaml
ApigeeBackendService
を使用する
前のステップで作成した API プロダクトの API オペレーション セットを定義します。
default
名前空間にapim-policies.yaml
という名前の新しいファイルを作成します。- 次の内容を新しいファイルにコピーします。このファイルでは、前のステップで定義した API プロダクトの割り当てポリシーと使用可能な REST オペレーションを定義します。
# apim-policies.yaml apiVersion: apim.googleapis.com/v1 kind: APIOperationSet metadata: name: item-set namespace: default spec: apiProductRefs: - name: api-product kind: APIProduct group: apim.googleapis.com namespace: default quota: limit: 10 interval: 1 timeUnit: minute restOperations: - name: GetItems path: /get methods: - GET
- ファイルを Gateway に適用します。
kubectl -n default apply -f apim-policies.yaml
Apigee サービス拡張機能をテストする
このステップでは、 Google Cloud コンソールの Apigee UI を使用して、Apigee サービス拡張機能と、Gateway に適用された Apigee 拡張機能ポリシーをテストします。
テストのセットアップ
テストに必要な API リソースを設定します。
Google Cloud コンソールで、[Apigee API 管理] ページに移動します。
- Apigee Operator for Kubernetes をインストールした Apigee 組織を選択します。
- デベロッパーを作成します。
- [配布] > [デベロッパー] を選択します。
- [デベロッパー] ページで、[+ 作成] をクリックします。
- [デベロッパーを追加] ページで、任意の値を使用して必須項目に入力します。
- [追加] をクリックします。
- アプリを作成します。
- [配布] > [アプリ] を選択します。
- [アプリ] ページで、[+ 作成] をクリックします。
- [アプリを作成] ページの [アプリの詳細] セクションで、次の値を使用して必須項目に入力します。
- アプリ名: demo-app
- デベロッパー: 前のステップで作成したデベロッパーを選択するか、リストから別のデベロッパーを選択します。
- [アプリの認証情報] セクションで、[+ 認証情報を追加] をクリックします。
- [認証情報] セクションで、[認証情報の詳細] セクションの必須項目に次の値を入力します。
- 認証情報名: demo-credential
- 認証情報の種類: [API キー] を選択します。
- [作成] をクリックします。
- [商品] セクションで、[+ 商品を追加] をクリックします。
- 前のステップで作成した
api-product-1
を選択します。 - [追加] をクリックします。
- [作成] をクリックします。
- [アプリの詳細] ページの [認証情報] セクションで、[
visibility_off] をクリックして [キー] の値を表示します。
Key
の値をコピーします。このキーは、後の手順でサービスに対して API 呼び出しを行うために使用します。 - [アプリの詳細] ページの [認証情報] セクションで、[visibility_off] をクリックして [アプリ シークレット] の値を表示します。
[アプリ シークレット] の値をコピーします。この値は、後のステップでアクセス トークンを生成するために使用します。
API キーの適用をテストする
先ほどのステップで取得した API キーを使用して Gateway にリクエストを送信するには、次のコマンドを使用します。
curl http://GATEWAY_IP_ADDRESS/get -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
ここで:
GATEWAY_IP_ADDRESS
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。API_KEY
は、テストの設定で取得した API キー値です。
リクエストが成功すると、次のようなレスポンスが返されます。
{ "args": {}, "headers": { "Accept": "*/*", "Host": "apigee-apim-operator-test.apigee.net", "User-Agent": "curl/8.7.1", "X-Api-Key": "f0N6sYYYclGYYYe0oP5YYYdA20PjgrP2x8YYYh7z4YYYKiYt", "X-Cloud-Trace-Context": "bb3a768787099bda628781188bfb318b/15554891713516675739" }, "origin": "34.54.193.72", "url": "https://34.54.193.72/get" }
割り当ての適用をテストする
APIMExtensionPolicy
で定義された割り当ての適用をテストするには、前の手順で取得したリクエストを 1 分以内に 10 回 Gateway に送信します。
次のスクリプトを実行してリクエストを生成できます。
#!/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
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。API_KEY
は、テストの設定で取得した API キー値です。
このアクションにより、割り当て違反がトリガーされ、次のような障害が発生します。
{"fault":{"faultstring":"Rate limit quota violation. Quota limit exceeded. Identifier : _default","detail":{"errorcode":"policies.ratelimit.QuotaViolation"}}}
REST オペレーションの適用をテストする
REST オペレーションの適用をテストするには、次のコマンドを使用して、API オペレーション セットにない URL を使用して Gateway にリクエストを送信します。
curl http://GATEWAY_IP_ADDRESS/post -H "Host: HOST_NAME" -H "x-api-key: API_KEY"
ここで:
GATEWAY_IP_ADDRESS
は Gateway の IP アドレスです。Gateway の IP アドレスは、次のコマンドを使用して取得できます。ここで、GATEWAY_NAME
は Gateway の名前です。kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -o=jsonpath="{.status.addresses[0].value}"
HOST_NAME
は、Gateway のHTTPRoute
で定義されたホスト名です。API_KEY
は、テストの設定で取得した API キー値です。
リクエストは失敗し、次のようなレスポンスが返されます。
{"fault":{"faultstring":"Invalid ApiKey for given resource","detail":{"errorcode":"oauth.v2.InvalidApiKeyForGivenResource"}}}
Google Cloud コンソールで Apigee API Analytics を表示する
GKE Gateway と APIMExtensionPolicy
によって処理される API トラフィックを表示するには、 Google Cloud コンソールで Apigee API Analytics を使用します。
- Google Cloud コンソールで、[Apigee API 管理] ページに移動します。
- Apigee Operator for Kubernetes をインストールした Apigee 組織を選択します。
- サイド ナビゲーション メニューで、[アナリティクス] > [API 指標] を選択します。
- [API プロキシ パフォーマンス] タブで、オプションのインストール ステップ
Apigee 環境を作成するで作成した環境、またはインストール時に Apigee Operator for Kubernetes によって作成された環境を選択します。環境の名前は接頭辞
apigee-ext-proc-enabled-env
で始まります。 - 記録された API トラフィックをモニタリングします。
トラブルシューティング
Apigee Operator for Kubernetes で API 管理ポリシーを使用する際に問題が発生した場合は、Apigee Operator for Kubernetes のトラブルシューティングで一般的なエラーの解決策をご覧ください。
次のステップ
ポリシーを追加するには、GKE Gateway にポリシーを追加するをご覧ください。