内部アプリケーション ロードバランサに相互 TLS を設定する

このページでは、クロスリージョン内部アプリケーション ロードバランサまたはリージョン内部アプリケーション ロードバランサに相互 TLS(mTLS)を構成する例を示します。

始める前に

ロードバランサに mTLS を設定する

相互 TLS 認証を機能させるには、ロードバランサを設定した後、ServerTLSPolicy リソースを使用してターゲット HTTPS プロキシを更新する必要があります。

  1. ServerTLSPolicy リソースが作成されていることを確認します。手順については、ネットワーク セキュリティ リソースを作成するをご覧ください。

  2. プロジェクト内のすべてのターゲット HTTPS プロキシを一覧表示するには、gcloud compute target-https-proxies list コマンドを使用します。

    gcloud compute target-https-proxies list
    

    ServerTLSPolicy リソースを接続するターゲット HTTPS プロキシの名前をメモします。以降のステップでは、この名前を TARGET_HTTPS_PROXY_NAME として表しています。

  3. ターゲット HTTPS プロキシの構成をファイルにエクスポートするには、gcloud beta compute target-https-proxies export コマンドを使用します。

    グローバル

      gcloud beta compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
          --destination=TARGET_PROXY_FILENAME \
          --global
      

    次のように置き換えます。

    • TARGET_HTTPS_PROXY_NAME: ターゲット プロキシの名前。
    • TARGET_PROXY_FILENAME: yaml ファイルの名前。例: mtls_target_proxy.yaml

    リージョン

     gcloud beta compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
         --destination=TARGET_PROXY_FILENAME \
         --region=REGION
     

    次のように置き換えます。

    • TARGET_HTTPS_PROXY_NAME: ターゲット プロキシの名前。
    • TARGET_PROXY_FILENAME: yaml ファイルの名前。例: mtls_target_proxy.yaml
    • REGION: ロードバランサを構成したリージョン。
  4. 現在のプロジェクトの指定されたロケーションにある ServerTlsPolicies リソースを一覧表示します。

    コンソール

    1. Google Cloud コンソールで、[クライアント認証] ページに移動します。

      [クライアント認証] に移動

    2. すべての ServerTlsPolicies リソースが表示されます。

    gcloud

    すべてのクライアント認証(ServerTlsPolicies)リソースを一覧表示するには、gcloud network-security server-tls-policies list コマンドを使用します。

    gcloud network-security server-tls-policies list \
      --location=REGION
    

    次のように置き換えます。

    REGION: ロードバランサを構成したリージョン。クロスリージョン内部アプリケーション ロードバランサの場合は、global を使用します。

    mTLS を構成する ServerTlsPolicies リソースの名前をメモします。この名前は、次のステップで SERVER_TLS_POLICY_NAME として参照しています。

  5. ServerTlsPolicy リソース ファイル TARGET_PROXY_FILENAME を追加するには、次のコマンドを使用します。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
    
  6. ターゲット HTTPS プロキシの構成をファイルからインポートするには、gcloud beta compute target-https-proxies import コマンドを使用します。

    グローバル

       gcloud beta compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
           --source=TARGET_PROXY_FILENAME \
           --global
       

    次のように置き換えます。

    • TARGET_HTTPS_PROXY_NAME: ターゲット プロキシの名前。
    • TARGET_PROXY_FILENAME: yaml ファイルの名前。例: mtls_target_proxy.yaml

    リージョン

       gcloud beta compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
           --source=TARGET_PROXY_FILENAME \
           --region=REGION
       

    次のように置き換えます。

    • TARGET_HTTPS_PROXY_NAME: ターゲット プロキシの名前。
    • TARGET_PROXY_FILENAME: yaml ファイルの名前。例: mtls_target_proxy.yaml
    • REGION: ロードバランサを構成したリージョン。

mTLS カスタム ヘッダーを追加する

mTLS を有効にすると、カスタム ヘッダーを使用して mTLS 接続に関する情報を URL マップに渡すことができます。また、ロギングを有効にして、mTLS 接続エラーをログにキャプチャすることもできます。

プロジェクト内のすべての URL マップを一覧表示するには、gcloud beta compute url-maps list コマンドを使用します。

   gcloud beta compute url-maps list
   

カスタム ヘッダーとロギングを有効にするために、URL マップの名前をメモします。次のステップでは、この名前を URL_MAP_NAME と表しています。

グローバル

   gcloud compute url-maps edit URL_MAP_NAME --global
   

以下に、カスタム リクエスト ヘッダー(requestHeadersToAdd)で変数を使用する方法を示す YAML ファイルの例を示します。同じ変数を使用して、カスタム レスポンス ヘッダー(responseHeadersToAdd)を送信できます。

   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

リージョン

   gcloud compute url-maps edit URL_MAP_NAME --region=REGION
   

以下に、カスタム リクエスト ヘッダー(requestHeadersToAdd)で変数を使用する方法を示す YAML ファイルの例を示します。同じ変数を使用してカスタム レスポンス ヘッダー(responseHeadersToAdd)を送信できます。

   defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
      name: regional-lb-map
      region: region/REGION
   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

次のステップ