このページでは、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 プール プロジェクトの IDREGION
: CA プールのロケーション
下位 CA プールを作成する
証明書発行のシナリオが複数ある場合は、それぞれのシナリオに下位 CA を作成できます。CA プールに下位 CA を作成できます。ルート CA は、その CA プール内のすべての CA に署名します。これらの証明書は、TLS インスペクション用に生成されたサーバー証明書の署名に使用されます。
下位 CA プールを作成するには、次のいずれかの方法を使用します。
Certificate Authority Service 内に保存されている既存のルート CA を使用して下位 CA プールを作成する
下位 CA を生成にするには、次の手順を行います。
外部に保持されている既存のルート CA を使用して下位 CA プールを作成する
下位 CA を生成にするには、次の手順を行います。
ルート CA を作成する
ルート CA が存在しない場合は、CA Service 内に作成できます。
ルート CA を作成するには、次の手順を行います。
サービス アカウントを作成する
サービス アカウントを使用すると、ユーザー アカウントのセキュリティや Secure Web Proxy インスタンス自体のセキュリティを損なうことなく、TLS インスペクションに必要な権限を付与できます。
サービス アカウントがない場合は、サービス アカウントを作成して、そのサービス アカウントに必要な権限を付与する必要があります。
サービス アカウントを作成します。
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)"
作成したサービス アカウントに、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 インスペクション ポリシーの作成
コンソール
Google Cloud コンソールで、[TLS インスペクション ポリシー] ページに移動します。
プロジェクト選択メニューで、プロジェクトを選択します。
[TLS インスペクション ポリシーを作成] をクリックします。
[名前] に名前を入力します。
省略可: [説明] フィールドに説明を入力します。
[リージョン] リストで、TLS インスペクション ポリシーを作成するリージョンを選択します。
[CA プール] リストで、証明書を作成する元となる CA プールを選択します。
CA プールを構成していない場合は、[新しいプール] をクリックし、CA プールを作成するの手順に沿って操作します。
省略可: [TLS の最小バージョン] リストで、ポリシーでサポートされている最小 TLS バージョンを選択します。
[信頼の構成] で、次のオプションのいずれかを選択します。
省略可: [暗号スイート プロファイル] リストで、TLS プロファイル タイプを選択します。次のいずれかの値を選択できます。
- 互換性あり: 古い TLS 機能のみをサポートするクライアントなど、最も幅広いクライアントに TLS のネゴシエーションを許可します。
- 最新: 幅広い TLS 機能をサポートし、最新のクライアントが TLS をネゴシエートできるようにします。
- 制限あり: 厳しいコンプライアンス要件を満たす限定された TLS 機能のみをサポートします。
カスタム: TLS 機能を個別に選択できます。
[暗号スイート] リストで、カスタム プロファイルでサポートされている暗号スイートを選択します。
[作成] をクリックします。
gcloud
TLS_INSPECTION_FILE.yaml
ファイルを作成します。TLS_INSPECTION_FILE
は、必要なファイル名に置き換えます。必要な TlsInspectionPolicy を構成するには、YAML ファイルに次のコードを追加します。
name: projects/PROJECT_ID/locations/REGION/tlsInspectionPolicies/TLS_INSPECTION_NAME caPool: projects/PROJECT_ID/locations/REGION/caPools/CA_POOL
次のように置き換えます。
PROJECT_ID
: プロジェクトの IDREGION
: ポリシーを作成するリージョン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
ウェブプロキシ ポリシーを作成する
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[Secure Web Proxy] をクリックします。
[ポリシー] タブをクリックします。
[Create a policy] をクリックします。
作成するポリシーの名前を入力します(例:
myswppolicy
)。レスポンス ポリシーの説明(
My new swp policy
など)を入力します。[リージョン] リストで、Secure Web Proxy ポリシーを作成するリージョンを選択します。
TLS インスペクションを構成するには、[TLS インスペクションを構成する] を選択します。
[TLS インスペクション ポリシー] リストで、作成した TLS インスペクション ポリシーを選択します。
ポリシーのルールを作成する場合は、[続行] をクリックしてから、[ルールを追加] をクリックします。詳しくは、Secure Web Proxy ルールを作成するをご覧ください。
[作成] をクリックします。
Secure Web Proxy ルールを作成する
Google Cloud コンソールで、[ネットワーク セキュリティ] ページに移動します。
[Secure Web Proxy] をクリックします。
プロジェクト セレクタ メニューで、組織 ID またはポリシーを含むフォルダを選択します。
ポリシーの名前をクリックします。
[ルールを追加] をクリックします。
ルール フィールドに、次の内容を入力します。
- 名前
- 説明
- ステータス
- 優先度: ルールの数値評価順序。ルールは、最も高い優先度から順番に評価されます(最も高い優先度は
0
)。 - [アクション] セクションで、ルールに一致する接続を許可する(許可)か、拒否する(拒否)かを指定します。
- [セッションの一致] セクションで、セッションの一致条件を指定します。
SessionMatcher
の構文の詳細については、CEL マッチャーの言語リファレンスをご覧ください。 - TLS インスペクションを有効にするには、[TLS インスペクションを有効にする] を選択します。
- [アプリケーションの一致] セクションで、リクエストの一致条件を指定します。TLS インスペクションのルールを有効にしないと、リクエストは HTTP トラフィックのみと一致します。
- [作成] をクリックします。
[ルールを追加] をクリックして別のルールを追加します。
[Create] をクリックしてポリシーを作成します。
ウェブプロキシを設定
Google Cloud コンソールで [ネットワーク セキュリティ] ページに移動します。
[Secure Web Proxy] をクリックします。
[ウェブプロキシ] タブをクリックします。
[ウェブプロキシを設定] をクリックします。
作成するウェブプロキシの名前を入力します(例:
myswp
)。ウェブプロキシの説明を入力します(例:
My new swp
)。[リージョン] リストで、ウェブプロキシを作成するリージョンを選択します。
[ネットワーク] リストで、ウェブプロキシを作成するネットワークを選択します。
[サブネットワーク] リストで、ウェブプロキシを作成するサブネットワークを選択します。
ウェブプロキシの IP アドレスを入力します。
[証明書] リストで、ウェブプロキシの作成に使用する証明書を選択します。
[ポリシー] リストで、ウェブプロキシに関連付けるために作成したポリシーを選択します。
[作成] をクリックします。
Cloud Shell
ファイル
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
Secure Web Proxy ポリシーを作成します。
gcloud network-security gateway-security-policies import policy1 \ --source=policy.yaml --location=REGION
ファイル
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
セキュリティ ポリシー ルールを作成します。
gcloud network-security gateway-security-policies rules import allow-example-com \ --source=rule.yaml \ --location=REGION \ --gateway-security-policy=policy1
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