TLS インスペクションを有効にする

このページでは、Secure Web Proxy インスタンスに対して Transport Layer Security(TLS)検査を有効にする方法について説明します。Secure Web Proxy には、TLS トラフィックを傍受し、暗号化されたリクエストを検査し、セキュリティ ポリシーを適用できる TLS 検査サービスが用意されています。TLS インスペクションの詳細については、TLS インスペクションの概要をご覧ください。

始める前に

TLS 検査用に Secure Web Proxy インスタンスを構成する前に、次のセクションのタスクを完了してください。

Certificate Authority Service を有効にする

Secure Web Proxy は、認証局サービスを使用して、TLS インスペクションに使用される証明書を生成します。

CA Service を有効にするには、次のコマンドを使用します。

  gcloud services enable privateca.googleapis.com
  

CA プールを作成します

認証局(CA)プールは、共通の証明書発行ポリシーと Identity and Access Management(IAM)ポリシーを持つ複数の CA の集合です。CA プールには、ペイロードの停止やダウンタイムを発生させることなく信頼チェーンをローテーションする機能があります。

CA Service を使用して CA を作成する前に、CA プールを作成する必要があります。このセクションでは、このタスクを完了するために必要な権限について説明してから、CA プールの作成方法について説明します。

TLS インスペクションでは、証明書を生成するために、プロジェクトごとに service-[PROJECT_NUMBER]@gcp-sa-certmanager.iam.gserviceaccount.com という個別のサービス アカウントを使用します。このサービス アカウントに CA プールを使用する権限が付与されていることを確認します。このアクセス権が取り消されると、TLS インスペクションは機能しなくなります。

CA プール プロジェクトの PROJECT_ID を使用して PROJECT_NUMBER を取得するには、次のコマンドを使用します。

    gcloud projects describe PROJECT_ID
        --format="value(projectNumber)"

プールを作成するには、gcloud privateca pools create コマンドを使用して、下位プール ID、階層、プロジェクト ID、ロケーションを指定します。

gcloud privateca pools create SUBORDINATE_POOL_ID \
    --tier=TIER \
    --project=PROJECT_ID \
    --location=REGION

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

  • SUBORDINATE_POOL_ID: CA プールの名前
  • TIER: CA 階層(devops または enterprise

    個別に発行された証明書を追跡する必要がないため、devops ティアに CA プールを作成することをおすすめします。

  • PROJECT_ID: CA プール プロジェクトの ID

  • REGION: CA プールのロケーション

下位 CA プールを作成する

証明書発行のシナリオが複数ある場合は、それぞれのシナリオに下位 CA を作成できます。CA プールに下位 CA を作成できます。ルート CA は、その CA プール内のすべての CA に署名します。これらの証明書は、TLS インスペクション用に生成されたサーバー証明書の署名に使用されます。

下位 CA プールを作成するには、次のいずれかの方法を使用します。

Certificate Authority Service 内に保存されている既存のルート CA を使用して下位 CA プールを作成する

下位 CA を生成にするには、次の手順を行います。

  1. CA プールを作成する
  2. CA プール内に下位 CA を作成する

外部に保持されている既存のルート CA を使用して下位 CA プールを作成する

下位 CA を生成にするには、次の手順を行います。

  1. CA プールを作成する
  2. 外部ルート CA によって署名された下位 CA を作成する

ルート CA を作成する

ルート CA が存在しない場合は、CA Service 内に作成できます。

ルート CA を作成するには、次の手順を行います。

  1. ルート CA を作成する
  2. CA Service 内に保存されている既存のルート CA を使用して下位 CA プールを作成する

サービス アカウントを作成する

サービス アカウントを使用すると、ユーザー アカウントのセキュリティや Secure Web Proxy インスタンス自体のセキュリティを損なうことなく、TLS インスペクションに必要な権限を付与できます。

サービス アカウントがない場合は、サービス アカウントを作成して、そのサービス アカウントに必要な権限を付与する必要があります。

  1. サービス アカウントを作成します。

    gcloud beta services identity create \
        --service=networksecurity.googleapis.com \
        --project=PROJECT_ID
    

    レスポンスとして、Google Cloud CLI によって service-[PROJECT_NUMBER]@gcp-sa-networksecurity.iam.gserviceaccount.com という名前のサービス アカウントが作成されます。

    CA プール プロジェクトの PROJECT_ID を使用して PROJECT_NUMBER を取得するには、次のコマンドを使用します。

        gcloud projects describe PROJECT_ID
            --format="value(projectNumber)"
      

  2. 作成したサービス アカウントに、CA プールで証明書を生成する権限を付与します。

    gcloud privateca pools add-iam-policy-binding CA_POOL \
        --member='serviceAccount:SERVICE_ACCOUNT' \
        --role='roles/privateca.certificateManager' \
        --location='REGION'
    

TLS 検査用に Secure Web Proxy を構成する

このセクションのタスクを進めるには、始める前にセクションに記載されている前提条件となるタスクを完了している必要があります。

TLS インスペクションを構成するには、次のセクションの作業を完了します。

TLS インスペクション ポリシーの作成

コンソール

  1. Google Cloud コンソールで、[TLS インスペクション ポリシー] ページに移動します。

    [TLS インスペクション ポリシー] に移動

  2. プロジェクト選択メニューで、プロジェクトを選択します。

  3. [TLS インスペクション ポリシーを作成] をクリックします。

  4. [名前] に名前を入力します。

  5. 省略可: [説明] フィールドに説明を入力します。

  6. [リージョン] リストで、TLS インスペクション ポリシーを作成するリージョンを選択します。

  7. [CA プール] リストで、証明書を作成する元となる CA プールを選択します。

    CA プールを構成していない場合は、[新しいプール] をクリックし、CA プールを作成するの手順に沿って操作します。

  8. 省略可: [TLS の最小バージョン] リストで、ポリシーでサポートされている最小 TLS バージョンを選択します。

  9. [信頼の構成] で、次のオプションのいずれかを選択します。

    • パブリック CA のみ: 公開署名された証明書を持つサーバーを信頼する場合は、このオプションを選択します。
    • プライベート CA のみ: 非公開で署名された証明書を持つサーバーを信頼する場合は、このオプションを選択します。

      [プライベートの信頼の構成] リストで、アップストリーム サーバー証明書の信頼に使用するトラストストアが構成されている信頼構成を選択します。信頼構成の作成方法については、信頼構成を作成するをご覧ください。

    • パブリック CA とプライベート CA: パブリック CA とプライベート CA の両方を使用する場合は、このオプションを選択します。

  10. 省略可: [暗号スイート プロファイル] リストで、TLS プロファイル タイプを選択します。次のいずれかの値を選択できます。

    • 互換性あり: 古い TLS 機能のみをサポートするクライアントなど、最も幅広いクライアントに TLS のネゴシエーションを許可します。
    • 最新: 幅広い TLS 機能をサポートし、最新のクライアントが TLS をネゴシエートできるようにします。
    • 制限あり: 厳しいコンプライアンス要件を満たす限定された TLS 機能のみをサポートします。
    • カスタム: TLS 機能を個別に選択できます。

      [暗号スイート] リストで、カスタム プロファイルでサポートされている暗号スイートを選択します。

  11. [作成] をクリックします。

gcloud

  1. TLS_INSPECTION_FILE.yaml ファイルを作成します。TLS_INSPECTION_FILE は、必要なファイル名に置き換えます。

  2. 必要な TlsInspectionPolicy を構成するには、YAML ファイルに次のコードを追加します。

    name: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME
    caPool: projects/PROJECT_ID/locations/REGION/caPools/CA_POOL
    

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

    • PROJECT_ID: プロジェクトの ID
    • REGION: ポリシーを作成するリージョン
    • TLS_INSPECTION_NAME: Secure Web Proxy の TLS 検査ポリシーの名前
    • CA_POOL: 証明書を作成する CA プールの名前

    CA プールは同じリージョン内に存在する必要があります。

TLS インスペクション ポリシーをインポートする

前の手順で作成した TLS インスペクション ポリシーをインポートします。

gcloud network-security tls-inspection-policies import TLS_INSPECTION_NAME \
    --source=TLS_INSPECTION_FILE.yaml \
    --location=REGION

TLS インスペクション ポリシーをセキュリティ ポリシーに追加する

Console

ウェブプロキシ ポリシーを作成する

  1. Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。

    [ネットワーク セキュリティ] に移動

  2. [Secure Web Proxy] をクリックします。

  3. [ポリシー] タブをクリックします。

  4. [Create a policy] をクリックします。

  5. 作成するポリシーの名前を入力します(例: myswppolicy)。

  6. レスポンス ポリシーの説明(My new swp policy など)を入力します。

  7. [リージョン] リストで、Secure Web Proxy ポリシーを作成するリージョンを選択します。

  8. TLS インスペクションを構成するには、[TLS インスペクションを構成する] を選択します。

  9. [TLS インスペクション ポリシー] リストで、作成した TLS インスペクション ポリシーを選択します。

  10. ポリシーのルールを作成する場合は、[続行] をクリックしてから、[ルールを追加] をクリックします。詳しくは、Secure Web Proxy ルールを作成するをご覧ください。

  11. [作成] をクリックします。

Secure Web Proxy ルールを作成する

  1. Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。

    [ネットワーク セキュリティ] に移動

  2. [Secure Web Proxy] をクリックします。

  3. プロジェクト セレクタ メニューで、組織 ID またはポリシーを含むフォルダを選択します。

  4. ポリシーの名前をクリックします。

  5. [ルールを追加] をクリックします。

  6. ルール フィールドに、次の内容を入力します。

    1. 名前
    2. 説明
    3. ステータス
    4. 優先度: ルールの数値評価順序。ルールは、最も高い優先度から順番に評価されます(最も高い優先度は 0)。
    5. [アクション] セクションで、ルールに一致する接続を許可する(許可)か、拒否する(拒否)かを指定します。
    6. [セッションの一致] セクションで、セッションの一致条件を指定します。SessionMatcher の構文の詳細については、CEL マッチャーの言語リファレンスをご覧ください。
    7. TLS インスペクションを有効にするには、[TLS インスペクションを有効にする] を選択します。
    8. [アプリケーションの一致] セクションで、リクエストの一致条件を指定します。TLS インスペクションのルールを有効にしないと、リクエストは HTTP トラフィックのみと一致します。
    9. [作成] をクリックします。
  7. [ルールを追加] をクリックして別のルールを追加します。

  8. [Create] をクリックしてポリシーを作成します。

ウェブプロキシを設定

  1. Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。

    [ネットワーク セキュリティ] に移動

  2. [Secure Web Proxy] をクリックします。

  3. [ウェブプロキシ] タブをクリックします。

  4. [ウェブプロキシを設定] をクリックします。

  5. 作成するウェブプロキシの名前を入力します(例: myswp)。

  6. ウェブプロキシの説明を入力します(例: My new swp)。

  7. [リージョン] リストで、ウェブプロキシを作成するリージョンを選択します。

  8. [ネットワーク] リストで、ウェブプロキシを作成するネットワークを選択します。

  9. [サブネットワーク] リストで、ウェブプロキシを作成するサブネットワークを選択します。

  10. ウェブプロキシの IP アドレスを入力します。

  11. [証明書] リストで、ウェブプロキシの作成に使用する証明書を選択します。

  12. [ポリシー] リストで、ウェブプロキシに関連付けるために作成したポリシーを選択します。

  13. [作成] をクリックします。

Cloud Shell

  1. ファイルpolicy.yamlを作成する

      description: basic Secure Web Proxy policy
      name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1
      tlsInspectionPolicy: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME
    
  2. Secure Web Proxy ポリシーを作成します。

      gcloud network-security gateway-security-policies import policy1 \
          --source=policy.yaml --location=REGION
    
  3. ファイルrule.yamlを作成する

      name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/policy1/rules/allow-example-com
      description: Allow example.com
      enabled: true
      priority: 1
      basicProfile: ALLOW
      sessionMatcher: host() == 'example.com'
      applicationMatcher: request.path.contains('index.html')
      tlsInspectionEnabled: true
    
  4. セキュリティ ポリシー ルールを作成します。

      gcloud network-security gateway-security-policies rules import allow-example-com \
          --source=rule.yaml \
          --location=REGION \
          --gateway-security-policy=policy1
    
  5. TLS インスペクション ポリシーを既存のセキュリティ ポリシーに適用するには、POLICY_FILE.yaml ファイルを作成します。POLICY_FILE は、ファイル名に置き換えます。

      description: My Secure Web Proxy policy
      name: projects/PROJECT_ID/locations/REGION/gatewaySecurityPolicies/POLICY_NAME
      tlsInspectionPolicy: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME
    

次のステップ