Service Extensions を使用すると、アプリケーション ロードバランサはバックエンド サービスにコールアウトを送信して、処理パスにカスタム処理を挿入できます。 認可拡張機能は、ロードバランサがリクエスト ヘッダーを受信し、 URL マップがバックエンド サービスを選択したときに、リクエスト処理パスで実行されます。このページでは、認可ポリシーで定義されたカスタム認可エンジンを使用するように認可拡張機能を構成する方法について説明します。
アプリケーション ロードバランサの拡張機能の概要については、 Cloud Load Balancing の拡張機能の概要をご覧ください。
はじめに
Cloud Load Balancing を使用すると、ロードバランサに送信されるトラフィックにアクセス制御を適用する認可ポリシーを構成できます。複雑な認可の決定は、認可ポリシーを使用して簡単に表現できない場合があります。
認可拡張機能を使用して認可ポリシーを構成すると、認可の決定をカスタム認可エンジンに委任できます。データパスでは、認可拡張機能はルート拡張機能の後に実行され、トラフィック拡張機能の前に実行されます。認可ポリシーの詳細については、 認可ポリシーの概要をご覧ください。
認可リクエストごとに、プロキシはリクエスト ヘッダーを拡張機能に転送します。プロバイダからのレスポンスに応じて、プロキシはリクエストを転送または拒否します。
プレビュー版では、 リージョン外部アプリケーション ロードバランサとリージョン内部アプリケーション ロードバランサの場合、 リクエスト認可 ポリシーとコンテンツ認可ポリシーに対して認可拡張機能を個別に構成できます。リクエスト認可ポリシーに基づく拡張機能は、コンテンツ認可ポリシーに基づく拡張機能よりも前に実行されるように構成されます。
アプリケーション ロードバランサの拡張機能に関連する上限については、 割り当てと上限のページをご覧ください。
基本的な認可拡張機能を構成する
次の例は、認可ポリシーを使用して、グローバル外部アプリケーション ロードバランサの認可の決定を委任する認可拡張機能 my-authz-ext を構成する方法を示しています。
gcloud
コールアウト バックエンド サービスを構成する の説明に沿って、必要なリソースを作成します。
この演習では、グローバル外部アプリケーション ロードバランサを作成します。サービスに
authz-service、転送ルールにfr1という名前を付けます。認可拡張機能を構成します。
バックエンド サービス
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 EOFPROJECT_IDを プロジェクト ID に置き換えます。YAML ファイルのフィールドの詳細については、API ドキュメントの ExtensionChain をご覧ください。サポートされている属性については、 サポートされている属性をご覧ください。
認可拡張機能をインポートします。次のサンプル値を使用して、
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コマンドを使用します。
拡張機能を使用して認可ポリシーを構成します。
拡張機能
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認可ポリシーをプロジェクトにインポートします。次のサンプル値を使用して、
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
コールアウト バックエンド サービス の名前を
lb-request-authz-serviceに設定し、us-west1にある転送ルール の名前をfr2に設定します。このサービスでは、VM インスタンス グループのバックエンドを使用してリージョン外部アプリケーション ロードバランサを設定します。
認可拡張機能を構成します。
拡張機能をバックエンド サービス
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 EOFPROJECT_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に設定できます。デフォルトでは、
failOpenはfalseに設定されています。拡張機能がタイムアウトまたは失敗すると、リクエスト処理が停止します。このデフォルト オプションは、可用性よりもセキュリティまたは整合性を優先する場合に適しています。認可拡張機能をインポートします。次のサンプル値を使用して、
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
同じプロジェクトで、拡張機能を使用して認可ポリシーを構成します。
example.com/mcpへのリクエストの場合、このポリシーでは特定のプリンシパルからの相互 TLS 認証が必要となり、認可の決定を認可拡張機能my-lb-authz-request-extに委任します。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リファレンス ドキュメントをご覧ください。認可ポリシーをプロジェクトにインポートします。次のサンプル値を使用して、
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
コールアウト バックエンド サービス の名前を
lb-content-authz-serviceに、us-west1に、転送ルール の名前をfr3に構成します。このサービスでは、VM インスタンス グループのバックエンドを使用してリージョン外部アプリケーション ロードバランサを設定します。
拡張機能サーバーを
ext_procプロトコルを使用してFULL_DUPLEX_STREAMED本文処理モード で構成し、すべてのイベントをサポートします。認可拡張機能を構成します。
拡張機能をバックエンド サービス
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プロトコルを使用します。認可拡張機能をインポートします。次のサンプル値を使用して、
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
拡張機能を使用して認可ポリシーを構成します。
拡張機能
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" EOFpolicyProfileの値はCONTENT_AUTHZである必要があります。認可ポリシーをプロジェクトにインポートします。次のサンプル値を使用して、
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 つだけです。
すべての拡張機能に適用される制限については、 拡張機能の制限事項をご覧ください。
次のステップ
- Service Extensions GitHub リポジトリで、
ext_authzサーバーとext_procサーバーの Python サンプルと Go サンプルを確認する。 - ルート拡張機能を構成する
- トラフィック拡張機能を構成する
- 拡張機能を管理する