認可拡張機能を構成する

Service Extensions を使用すると、アプリケーション ロードバランサはバックエンド サービスにコールアウトを送信して、処理パスにカスタム処理を挿入できます。 認可拡張機能は、ロードバランサがリクエスト ヘッダーを受信し、 URL マップがバックエンド サービスを選択したときに、リクエスト処理パスで実行されます。このページでは、認可ポリシーで定義されたカスタム認可エンジンを使用するように認可拡張機能を構成する方法について説明します。

アプリケーション ロードバランサの拡張機能の概要については、 Cloud Load Balancing の拡張機能の概要をご覧ください。

はじめに

Cloud Load Balancing を使用すると、ロードバランサに送信されるトラフィックにアクセス制御を適用する認可ポリシーを構成できます。複雑な認可の決定は、認可ポリシーを使用して簡単に表現できない場合があります。

認可拡張機能を使用して認可ポリシーを構成すると、認可の決定をカスタム認可エンジンに委任できます。データパスでは、認可拡張機能はルート拡張機能の後に実行され、トラフィック拡張機能の前に実行されます。認可ポリシーの詳細については、 認可ポリシーの概要をご覧ください。

認可リクエストごとに、プロキシはリクエスト ヘッダーを拡張機能に転送します。プロバイダからのレスポンスに応じて、プロキシはリクエストを転送または拒否します。

プレビュー版では、 リージョン外部アプリケーション ロードバランサとリージョン内部アプリケーション ロードバランサの場合、 リクエスト認可 ポリシーとコンテンツ認可ポリシーに対して認可拡張機能を個別に構成できます。リクエスト認可ポリシーに基づく拡張機能は、コンテンツ認可ポリシーに基づく拡張機能よりも前に実行されるように構成されます。

アプリケーション ロードバランサの拡張機能に関連する上限については、 割り当てと上限のページをご覧ください。

基本的な認可拡張機能を構成する

次の例は、認可ポリシーを使用して、グローバル外部アプリケーション ロードバランサの認可の決定を委任する認可拡張機能 my-authz-ext を構成する方法を示しています。

gcloud

  1. コールアウト バックエンド サービスを構成する の説明に沿って、必要なリソースを作成します。

    この演習では、グローバル外部アプリケーション ロードバランサを作成します。サービスに authz-service、転送ルールに fr1 という名前を付けます。

  2. 認可拡張機能を構成します。

    1. バックエンド サービス authz-service に関連付ける YAML ファイルで拡張機能を定義します。指定されたサンプル値を使用します。

      cat >authz-extension.yaml <<EOF
          name: my-authz-ext
          authority: ext11.com
          loadBalancingScheme: EXTERNAL_MANAGED
          service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service
          forwardHeaders:
            - Authorization
          failOpen: false
          timeout: "0.1s"
          forwardAttributes:
          - request.mcp_param
          - connection.client_cert_leaf
      EOF
      

      PROJECT_IDプロジェクト ID に置き換えます。

      YAML ファイルのフィールドの詳細については、API ドキュメントの ExtensionChain をご覧ください。サポートされている属性については、 サポートされている属性をご覧ください。

    2. 認可拡張機能をインポートします。次のサンプル値を使用して、 gcloud service-extensions authz-extensions import コマンドを実行します。

      gcloud service-extensions authz-extensions import my-authz-ext \
          --source=authz-extension.yaml \
          --location=global
      

      プロトコルを ext_authz に設定する場合は、代わりに gcloud beta service-extensions authz-extensions import コマンドを使用します。

  3. 拡張機能を使用して認可ポリシーを構成します。

    1. 拡張機能 my-authz-ext を転送ルール fr1 に関連付ける認可ポリシーを定義します。指定されたサンプル値を使用します。CUSTOM アクションは、拡張機能が使用されていることを示します。

      cat >authz-policy.yaml <<EOF
          name: my-authz-policy
          target:
            loadBalancingScheme: EXTERNAL_MANAGED
            resources:
              - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/fr1"
          action: CUSTOM
          customProvider:
            authzExtension:
              resources:
                - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext"
      EOF
      
    2. 認可ポリシーをプロジェクトにインポートします。次のサンプル値を使用して、 gcloud network-security authz-policies import コマンド を実行します。

      gcloud network-security authz-policies import my-authz-policy \
          --source=authz-policy.yaml \
          --location=global
      

プロファイルに基づいて認可拡張機能を構成する

リクエスト認可ポリシーとコンテンツ認可ポリシーに対して、認可拡張機能を個別に構成できます。

リクエスト認可ポリシーの場合

次の例は、us-west1 の転送ルールにリクエスト認可ポリシーを適用する認可拡張機能を構成する方法を示しています。このポリシーでは、トラフィックが宛先 example.com/mcp に到達する前に、特定のプリンシパルからの相互 TLS 認証に合格する必要があります。

gcloud

  1. コールアウト バックエンド サービス の名前を lb-request-authz-service に設定し、us-west1 にある転送ルール の名前を fr2 に設定します。

    このサービスでは、VM インスタンス グループのバックエンドを使用してリージョン外部アプリケーション ロードバランサを設定します

  2. 認可拡張機能を構成します。

    1. 拡張機能をバックエンド サービス lb-request-authz-service に関連付ける YAML ファイルで拡張機能を定義します。指定されたサンプル値を使用します。

      cat >lb-request-authz-extension.yaml <<EOF
      name: my-lb-request-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-request-service
      forwardHeaders:
        - Authorization
      failOpen: false
      timeout: "0.1s"
      wireFormat: EXT_AUTHZ_GRPC
      EOF
      

      PROJECT_IDプロジェクト ID に置き換えます。

      拡張機能は、バックエンド サービスと同じリージョンに存在する必要があります。

      デフォルトでは、すべての Service Extensions コールアウトで Envoy 外部処理または ext_proc プロトコルが使用されます。 認可コールアウトの場合、外部認可または ext_authz プロトコルも プレビューでサポートされています。 wireFormat オプションが EXT_AUTHZ_GRPC に設定されている場合、コールアウトは ext_authz プロトコルを使用します。このオプションが指定されていない場合、コールアウトは ext_proc プロトコルを使用します。

      リクエスト認可ポリシーの場合、ext_proc プロトコルもサポートされていますが、コールアウトが ext_authz プロトコルを使用するように wireFormat 値を EXT_AUTHZ_GRPC に設定できます。

      デフォルトでは、failOpenfalse に設定されています。拡張機能がタイムアウトまたは失敗すると、リクエスト処理が停止します。このデフォルト オプションは、可用性よりもセキュリティまたは整合性を優先する場合に適しています。

    2. 認可拡張機能をインポートします。次のサンプル値を使用して、 gcloud beta service-extensions authz-extensions import コマンドを実行します。

      gcloud beta service-extensions authz-extensions import my-lb-request-authz-ext \
          --source=lb-request-authz-extension.yaml \
          --location=us-west1
      
  3. 同じプロジェクトで、拡張機能を使用して認可ポリシーを構成します。

    example.com/mcp へのリクエストの場合、このポリシーでは特定のプリンシパルからの相互 TLS 認証が必要となり、認可の決定を認可拡張機能 my-lb-authz-request-ext に委任します。

    1. my-lb-request-authz-ext 拡張機能を転送ルール fr2 に関連付ける認可ポリシーを定義します。指定されたサンプル値を使用します。

      cat >lb-request-authz-policy.yaml <<EOF
      name: my-lb-request-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr2"
      policyProfile: REQUEST_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/mcp"
        from:
          sources:
          - principals:
            - principal_selector: CLIENT_CERT_DNS_NAME_SANS
              principal:
                exact: "spiffe://p.global.123.workload.id.goog/ns/ns1/sa/hellomcp"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-request-authz-ext"
      EOF
      

      リクエスト認可ポリシーの場合、policyProfile の値は REQUEST_AUTHZ である必要があります。この値は、カスタム ポリシー プロバイダがリクエストに対してトラフィックを許可または拒否するアクションを実行することを示します。

      CUSTOM アクションは、拡張機能がプロキシに関連付けられていることを示します。

      認可ポリシー リソースの詳細については、 authzPolicy リファレンス ドキュメントをご覧ください。

    2. 認可ポリシーをプロジェクトにインポートします。次のサンプル値を使用して、 gcloud beta network-security authz-policies import コマンド を実行します。

      gcloud beta network-security authz-policies import my-lb-request-authz-policy \
          --source=lb-request-authz-policy.yaml \
          --location=us-west1
      

コンテンツ認可ポリシーの場合

次の例は、us-west1 の転送ルールにコンテンツ認可ポリシーを適用する認可拡張機能を構成する方法を示しています。このポリシーでは、コンテンツ サニタイズ サービスがアプリケーション ペイロードの詳細な検査を行い、必要に応じてリクエストを許可または拒否するか、リクエストとレスポンスを変更する必要があります。

gcloud

  1. コールアウト バックエンド サービス の名前を lb-content-authz-service に、us-west1 に、転送ルール の名前を fr3 に構成します。

    このサービスでは、VM インスタンス グループのバックエンドを使用してリージョン外部アプリケーション ロードバランサを設定します

    拡張機能サーバーを ext_proc プロトコルを使用して FULL_DUPLEX_STREAMED 本文処理モード で構成し、すべてのイベントをサポートします。

  2. 認可拡張機能を構成します。

    1. 拡張機能をバックエンド サービス lb-content-authz-service に関連付ける YAML ファイルで拡張機能を定義します。指定されたサンプル値を使用します。

      cat >lb-content-authz-extension.yaml <<EOF
      name: my-lb-content-authz-ext
      authority: ext11.com
      loadBalancingScheme: INTERNAL_MANAGED
      service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/lb-authz-sdp-service
      failOpen: false
      timeout: "0.1s"
      EOF
      

      コンテンツ認可ポリシーの場合、policyProfile の値は CONTENT_AUTHZ である必要があります。

      CONTENT_AUTHZ ポリシーの場合、wireFormat 値を EXT_PROC_GRPC として明示的に設定する必要はありません。デフォルトでは、コールアウトは ext_proc プロトコルを使用します。

    2. 認可拡張機能をインポートします。次のサンプル値を使用して、 gcloud beta service-extensions authz-extensions import コマンド を実行します。

      gcloud beta service-extensions authz-extensions import my-lb-content-authz-ext \
          --source=lb-content-authz-extension.yaml \
          --location=us-west1
      
  3. 拡張機能を使用して認可ポリシーを構成します。

    1. 拡張機能 my-lb-content-authz-ext を転送ルール fr3 に関連付ける認可ポリシーを定義します。指定されたサンプル値を使用します。

      cat >lb-content-authz-policy.yaml <<EOF
      name: lb-content-authz-policy
      target:
        resources:
          - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr3"
      policyProfile: CONTENT_AUTHZ
      httpRules:
      - to:
          operations:
          - hosts:
            - exact: "example.com"
          - paths:
            - prefix: "/sensitive-stuff"
      action: CUSTOM
      customProvider:
        authzExtension:
          resources:
            - "projects/PROJECT_ID/locations/us-west1/authzExtensions/my-lb-authz-content-ext"
      EOF
      

      policyProfile の値は CONTENT_AUTHZ である必要があります。

    2. 認可ポリシーをプロジェクトにインポートします。次のサンプル値を使用して、 gcloud beta network-security authz-policies import コマンド を実行します。

      gcloud beta network-security authz-policies import my-lb-content-authz-policy \
          --source=lb-content-authz-policy.yaml \
          --location=us-west1
      

認可拡張機能の制限事項

認可拡張機能には、次のような制限があります。

  • 認可ポリシーに設定できる認可拡張機能は 1 つだけです。
  • 転送ルールは複数の認可ポリシーで使用できますが、カスタム認可ポリシーにできるのは 1 つだけです。

すべての拡張機能に適用される制限については、 拡張機能の制限事項をご覧ください。

次のステップ