APIMExtensionPolicy を作成する

このページは ApigeeApigee ハイブリッドに適用されます。

Apigee Edge のドキュメントを表示する。

このページでは、APIMExtensionPolicy カスタム リソースを作成して、Kubernetes Gateway を通過するトラフィックに Apigee ポリシーを適用する方法について説明します。Apigee Operator for Kubernetes は APIMExtensionPolicy リソースを監視し、ゲートウェイを適切に構成します。

Apigee

Apigee を使用している場合は、次の手順に沿って操作します。

始める前に

このタスクを始める前に、次のことを行ってください。

APIMExtensionPolicy を作成する

このステップでは、APIMExtensionPolicy を作成し、クラスタで実行されている GKE Gateway に適用します。このポリシーは、Gateway とそれに関連する HTTPRoutes を通過するすべてのトラフィックを管理します。これは、現在の Apigee の環境レベルで flowhook と同様に機能します。

APIMExtensionPolicy を作成するには:

  1. 次の内容で global-ext-lb1-apim-policy.yaml という名前のファイルを作成します。
    # global-ext-lb1-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: global-ext-lb1-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME # optional
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        name: global-ext-lb1
        kind: Gateway
        namespace: default
        
  2. ENV_NAME は、インストール ステップの Apigee 環境を作成するで作成した Apigee 環境の名前に置き換えます。

    注: generateEnv=TRUE フラグを使用して Apigee Operator for Kubernetes をインストールした場合、apigeeEnv フィールドは必要ありません。

    使用可能なすべての環境は、 Google Cloud コンソールの環境ページで確認できます

  3. ポリシーを適用します。
    kubectl -n apim apply -f global-ext-lb1-apim-policy.yaml
        

    ポリシーが適用されると、Apigee Operator for Kubernetes がバックグラウンドでネットワーキング リソースを作成します。

  4. 次のコマンドを使用して、APIMExtensionPolicy のステータスを確認します。
    kubectl -n apim get APIMExtensionPolicy
        

    出力は次のようになります。STATERUNNING です。

    NAME                         STATE      ERRORMESSAGE
    global-ext-lb1-apim-policy   RUNNING
        

ポリシーをテストする

次のコマンドを使用して、Gateway にリクエストを送信します。

  1. Gateway の IP アドレスを取得します。
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io GATEWAY_NAME -n default -o=jsonpath='{.status.addresses[0].value}')
          
    echo $GATEWAY_IP
          

    GATEWAY_NAME は、Gateway の名前(global-ext-lb1 など)に置き換えます。

  2. HTTPRoute で構成されたエンドポイントにリクエストを送信します。
    curl http://$GATEWAY_IP/get -H "Host: HOST_NAME"
          

    HOST_NAME は、Gateway の HTTPRoute で定義されたホスト名(example.httpbin.com など)に置き換えます。

  3. APIMExtensionPolicy リソースで defaultSecurityEnabled: true が設定されているため、リクエストは失敗します。これにより、API キーとアクセス トークンの検証が有効になります。次のようなレスポンスが表示されます。
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    これは、Apigee 拡張機能ポリシーが有効であり、API キーの適用とアクセス トークンの検証が有効であることを示します。

次のステップ

Apigee ハイブリッド

Apigee ハイブリッドを使用している場合は、次の手順に沿って操作します。

始める前に

この手順では、Apigee ハイブリッド用の Apigee Operator for Kubernetes をインストールするの手順に沿って Apigee Operator for Kubernetes をインストールしていることを前提としています。

TLS 証明書のシークレットを作成する

APIMExtensionPolicy には、環境グループのホスト名に関連付けられた base64 でエンコードされた公開証明書が必要です。この証明書は、Helm を使用して Apigee ハイブリッド環境をインストールするで作成したものです。apim 名前空間に Kubernetes Secret を作成して、この証明書をオペレーターに提供します。

  1. インストール時に作成したファイルから、base64 でエンコードされた証明書文字列を取得します。
    cat $APIGEE_HELM_CHARTS_HOME/apigee-virtualhost/certs/keystore_ENV_GROUP.pem.base64
        
  2. 次の内容で secret-cert.yaml という名前のファイルを作成します。
    # secret-cert.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: apigee-conf
      namespace: apim
    data:
      ca.crt: BASE64_ENCODED_CERT_STRING
        
  3. BASE64_ENCODED_CERT_STRING は、ステップ 1 の cat コマンドの出力に置き換えます。
  4. シークレットをクラスタに適用します。
    kubectl apply -f secret-cert.yaml
        

APIMExtensionPolicy を定義して適用する

APIMExtensionPolicy リソースを定義し、クラスタで動作している Istio Gateway に適用します。このポリシー拡張機能は、Gateway とそれに関連する HTTPRoutes によって管理されるトラフィックを遮断し、リクエストをバックエンド ターゲットに転送する前に Apigee ポリシーを適用します。

  1. 次の内容で istio-gateway-apim-policy.yaml という名前のファイルを作成します。
    # istio-gateway-apim-policy.yaml
    apiVersion: apim.googleapis.com/v1
    kind: APIMExtensionPolicy
    metadata:
      name: istio-gateway-apim-policy
      namespace: apim
    spec:
      apigeeEnv: ENV_NAME
      ingressCertSecret: apigee-conf
      apigeeAuthority: HOST_NAME
      apigeeIngressIP: INGRESS_IP_ADDRESS
      location: global
      failOpen: false
      timeout: 1000ms
      defaultSecurityEnabled: true
      targetRef: # identifies the Gateway where the extension should be applied
        group: gateway.networking.k8s.io
        kind: Gateway
        name: istio-gateway
        namespace: default
        
  2. 次の変数を置き換えます。
    • ENV_NAME: サービス拡張機能が有効になっている状態で作成した Apigee ハイブリッド環境の名前(my-hybrid-env など)。
    • HOST_NAME: 環境グループに使用されるドメイン名(my-proxies.example.com など)。
    • INGRESS_IP_ADDRESS: Apigee ハイブリッド ランタイム Ingress の Ingress IP アドレス。この IP の取得方法については、Apigee Ingress を公開するをご覧ください。
  3. ポリシーをクラスタに適用します。
    kubectl -n apim apply -f istio-gateway-apim-policy.yaml
        
  4. リソースが適用されると、Apigee Operator for Kubernetes はゲートウェイ ネットワーキング リソースの構成を開始します。APIMExtensionPolicy のステータスを確認します。
    kubectl -n apim get APIMExtensionPolicy
        
  5. STATERUNNING になるまで待ちます。出力は次のようになります。
    NAME                         STATE      ERRORMESSAGE
    istio-gateway-apim-policy    RUNNING
        

ポリシーをテストする

前の手順で作成した APIMExtensionPolicy では、defaultSecurityEnabledtrue に設定されています。これにより、このゲートウェイに一致するトラフィックに対して API キーと OAuth2 トークンの検証ポリシーが自動的に有効になります。これをテストするには、Istio Gateway の設定を確認するで Istio Gateway の設定を確認したときに構成したサンプル httpbin サービスに、認証されていないリクエストを送信します。

  1. Gateway の IP アドレスを取得します。
    export GATEWAY_IP=$(kubectl get gateways.gateway.networking.k8s.io istio-gateway -n default -o=jsonpath='{.status.addresses[0].value}')
        
    echo $GATEWAY_IP
        
  2. HTTPRoute で構成された /get エンドポイントにリクエストを送信します。
    curl http://$GATEWAY_IP/get -H "Host: example.httpbin.com" -v
        
  3. defaultSecurityEnabled: true には認証(有効な API キーなど)が必要なため、Apigee は認証エラーでリクエストを拒否する必要があります。レスポンスの例を以下に示します。
    {"fault":{"faultstring":"Raising fault. Fault name : RF-insufficient-request-raise-fault","detail":{"errorcode":"steps.raisefault.RaiseFault"}}}
        

    この出力は、APIMExtensionPolicy が有効であり、Apigee ポリシーが Istio Gateway によって適用されていることを確認します。

次のステップ

認証済みリクエストの API キーを取得するために、次に示す API プロダクト、デベロッパー、アプリを作成する方法を確認する。