このページでは、グローバル外部アプリケーション ロードバランサにセルフマネージド証明書を使用して、バックエンド認証 TLS(バックエンド認証)を設定する手順について説明します。
バックエンド認証 TLS を構成するには、次の操作を行う必要があります。
- ルート証明書と中間証明書で構成される信頼構成リソースを作成します。
- 信頼構成を参照する Backend Authentication Config リソースを作成します。
- Backend Authentication Config リソースをロードバランサのバックエンド サービスに接続します。
始める前に
- バックエンド認証 TLS とバックエンド mTLS の概要を確認します。
- 信頼構成を管理するを確認します。
このガイドの手順で Google Cloud CLI を使用する場合は、インストールする必要があります。ロード バランシングに関連するコマンドについては、API と gcloud CLI のリファレンスをご覧ください。
gcloud CLI を初めて実行する場合は、最初に
gcloud init
コマンドを実行して、認証を行います。Compute Engine API、Certificate Manager API、ネットワーク セキュリティ、Network Services API の API を有効にします。詳細については、API を有効にするをご覧ください。
次のサポート対象のバックエンドのいずれかで、グローバル外部アプリケーション ロードバランサを構成します。
- VM インスタンス グループのバックエンド
- ハイブリッド接続 NEG
- ゾーン NEG
権限
このセクションでは、バックエンド認証 TLS を構成するために必要な権限について説明します。オペレーション | 権限 |
---|---|
信頼構成を作成する | ターゲットの Google Cloud プロジェクトに対する certificatemanager.trustconfigs.create |
バックエンド認証構成リソースを作成する |
certificatemanager.certs.use certificatemanager.trustconfigs.use networksecurity.backendauthenticationconfigs.create |
バックエンド認証構成リソースをロードバランサのバックエンド サービスに接続する |
compute.backendservice.update networksecurity.backendauthenticationconfigs.use |
設定の概要
以降のセクションでは、次の図に示すアーキテクチャに基づいてバックエンド認証 TLS を構成する手順について説明します。
ルート証明書と中間証明書を作成する
このセクションでは、OpenSSL ライブラリを使用して、ルート証明書(信頼アンカー)と中間証明書を作成します。
ルート証明書は証明書チェーンの最上位にあります。中間証明書は、ルート証明書まで遡る信頼チェーンの一部です。中間証明書は、ルート証明書によって暗号署名されます。ロードバランサは、サーバー証明書を受信すると、サーバー証明書から構成済みのトラスト アンカーまでの信頼チェーンを確立して、証明書を検証します。
次のコマンドを使用して、ルート証明書と中間証明書を作成します。
OpenSSL 構成ファイルを作成します。
次の例では、構成ファイル(
example.cnf
)に[ca_exts]
セクションが含まれています。このセクションには、証明書を CA に適したものとしてマークする X.509 拡張機能が指定されています。ルート証明書と中間証明書の要件の詳細については、証明書の要件をご覧ください。cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command-line argument. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=serverAuth EOF
自己署名 X.509 ルート証明書(
root.cert
)を作成します。ルート証明書は、独自の秘密鍵(root.key
)で自己署名されます。openssl req -x509 \ -new -sha256 -newkey rsa:2048 -nodes \ -days 3650 -subj '/CN=root' \ -config example.cnf \ -extensions ca_exts \ -keyout root.key -out root.cert
中間証明書の証明書署名リクエスト(CSR)
int.req
を作成します。openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
CSR に署名して X.509 中間証明書(
int.cert
)を作成します。CSR はルート証明書を使用して署名されます。openssl x509 -req \ -CAkey root.key -CA root.cert \ -set_serial 1 \ -days 3650 \ -extfile example.cnf \ -extensions ca_exts \ -in int.req -out int.cert
証明書をフォーマットする
新規または既存の証明書をトラストストアに含めるには、証明書を 1 行にフォーマットし、環境変数に格納して、信頼構成 YAML ファイルで参照できるようにします。
export ROOT_CERT=$(cat root.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
export INTERMEDIATE_CERT=$(cat int.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
信頼構成リソースを作成する
信頼構成は、Certificate Manager の公開鍵基盤(PKI)構成を表すリソースです。
信頼構成リソースを作成するには、次の手順を行います。
コンソール
Google Cloud コンソールで、[Certificate Manager] ページに移動します。
[信頼構成] タブで、[信頼構成を追加] をクリックします。
構成の名前を入力します。
[ロケーション] で [グローバル] を選択します。ロケーションは、信頼構成リソースが保存される場所を示します。グローバル外部アプリケーション ロードバランサの場合は、グローバル信頼構成リソースを作成する必要があります。
[トラストストア] セクションで、[トラスト アンカーを追加] をクリックし、PEM エンコードの証明書ファイルをアップロードするか、証明書の内容をコピーします。
[追加] をクリックします。
[トラストストア] セクションで、[中間 CA の追加] をクリックし、PEM エンコードの証明書ファイルをアップロードするか、証明書の内容をコピーします。この手順により、ルート証明書とサーバー証明書の間に別の信頼レベルを追加できます。
[追加] をクリックして、中間 CA を追加します。
許可リストに追加した証明書を追加するには、[追加] をクリックします。
[作成] をクリックします。
新しい信頼構成リソースが構成のリストに表示されていることを確認します。
gcloud
信頼構成パラメータを指定する信頼構成 YAML ファイル(
trust_config.yaml
)を作成します。この信頼構成リソースの例には、トラスト アンカーと中間証明書を含むトラストストアが含まれています。この信頼構成リソースの例では、前の証明書をフォーマットするの手順で作成した環境変数から証明書の内容を読み取ります。cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT}" EOF
追加のトラスト アンカーまたは中間証明書を使用してトラストストアを作成するには、適切なセクションに
pemCertificate
行を追加します。信頼構成 YAML ファイルをインポートするには、
gcloud certificate-manager trust-configs import
コマンドを使用します。グローバル外部アプリケーション ロードバランサの場合は、信頼構成リソースの保存場所として
global
を指定します。gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=global
次のように置き換えます。
TRUST_CONFIG_NAME
: 信頼構成リソースの名前
バックエンド認証構成リソースを作成する
バックエンド認証構成(BackendAuthenticationConfig
)リソースを作成するには、次の操作を行います。
コンソール
- Google Cloud コンソールで、[認証構成] ページに移動します。
- [バックエンド認証] タブで [作成] をクリックします。
- バックエンド認証構成リソースの名前を入力します。
- 省略可: 公開ルート証明書を選択します。
- 前に作成した信頼構成リソースを選択します。
- [作成] をクリックします。
Backend Authentication Config リソースが表示されていることを確認します。
gcloud
Backend Authentication Config リソースのさまざまな属性を宣言的に指定する YAML ファイルを作成します。
cat << EOF > BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml name: projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME trustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME wellKnownRoots: PUBLIC_ROOTS EOF
次のように置き換えます。
BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: Backend Authentication Config リソースが定義されている YAML ファイルの名前。PROJECT_ID
: Google Cloud プロジェクトの IDBACKEND_AUTH_CONFIG_NAME
: バックエンド認証構成リソースの名前TRUST_CONFIG_NAME
: 前に作成した信頼構成リソースの名前。
Backend Authentication Config リソースをインポートするには、
gcloud beta network-security backend-authentication-configs import
コマンドを使用します。gcloud beta network-security backend-authentication-configs import BACKEND_AUTH_CONFIG_NAME \ --source=BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME.yaml \ --location=global
次のように置き換えます。
BACKEND_AUTH_CONFIG_NAME
: Backend Authentication Config リソースの名前BACKEND_AUTHENTICATION_CONFIG_RESOURCE_FILENAME
: Backend Authentication Config リソースが定義されている YAML ファイルの名前。
バックエンド認証構成リソースをロードバランサのバックエンド サービスに接続する
バックエンド認証構成(BackendAuthenticationConfig
)リソースをロードバランサのバックエンド サービスに接続するには、次の操作を行います。
コンソール
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
[バックエンド] タブで、バックエンド認証 TLS とバックエンド mTLS を有効にするバックエンド サービスを選択します。
[編集] をクリックします。
[高度な構成] セクションを開きます。
[バックエンド認証] セクションで、[有効にする] チェックボックスをオンにします。
省略可: SNI ホスト名と承認された SAN を指定して、バックエンド証明書を検証します。
Backend Authentication Config リソースをバックエンド サービスに接続するには、[Backend Authentication Config] リストで Backend Authentication Config リソースを選択します。
[続行] をクリックします。
バックエンド サービスの設定を更新するには、[更新] をクリックします。
gcloud
プロジェクト内のすべてのバックエンド サービス リソースを一覧表示するには、
gcloud compute backend-services list
コマンドを使用します。gcloud compute backend-services list
BackendAuthenticationConfig
リソースを接続するバックエンド サービスの名前をメモします。以降のステップでは、この名前をBACKEND_SERVICE_NAME
として表しています。バックエンド サービスの構成をファイルにエクスポートするには、
gcloud beta compute backend-services export
コマンドを使用します。gcloud beta compute backend-services export BACKEND_SERVICE_NAME \ --destination=BACKEND_SERVICE_FILENAME.yaml \ --global
次のように置き換えます。
BACKEND_SERVICE_NAME
: バックエンド サービスの名前BACKEND_SERVICE_FILENAME
: バックエンド サービス構成がエクスポートされる YAML ファイルの名前とパス
バックエンド サービスの
tlsSettings
属性を更新して、バックエンド認証構成リソースを参照するようにします。また、バックエンド サービスで SNI ホスト名と承認された SAN を構成して、バックエンド証明書を検証することもできます。cat << EOF >> BACKEND_SERVICE_FILENAME.yaml tlsSettings: authenticationConfig: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/backendAuthenticationConfigs/BACKEND_AUTH_CONFIG_NAME sni: examplepetstore.com subjectAltNames: - dnsName: examplepetstore.com - dnsName: api.examplepetstore.com EOF
上記の YAML 宣言の SNI 値と SAN 値は例にすぎません。これらの値は、設定に関連する実際の値に置き換えることができます。
次のように置き換えます。
BACKEND_SERVICE_FILENAME
: バックエンド サービス構成がエクスポートされる YAML ファイルの名前PROJECT_ID
: Google Cloud プロジェクトの IDBACKEND_AUTH_CONFIG_NAME
: Backend Authentication Config リソースの名前
更新されたバックエンド サービス構成をファイルからインポートするには、
gcloud beta compute backend-services import
コマンドを使用します。gcloud beta compute backend-services import BACKEND_SERVICE_NAME \ --source=BACKEND_SERVICE_FILENAME.yaml \ --global
次のように置き換えます。
BACKEND_SERVICE_NAME
: バックエンド サービスの名前BACKEND_SERVICE_FILENAME
: バックエンド サービス構成 YAML ファイルの名前
バックエンド サーバー証明書を作成する
このセクションでは、信頼構成の一部である中間証明書によって署名されたサーバー(リーフ)証明書を作成する追加の構成オプションについて説明します。これにより、サーバー証明書からトラスト アンカーまでの信頼チェーンを確立できます。
中間証明書を含む信頼構成リソースをすでに作成している場合は、次の操作を行います。
構成ファイルを作成して、サーバー証明書の CSR を生成します。
次の構成ファイル(
server.config
)には、CSR に含める X.509 拡張機能を指定する[extension_requirements]
セクションが含まれています。サーバー証明書の要件の詳細については、証明書の要件をご覧ください。cat > server.config << EOF [req] default_bits = 2048 req_extensions = extension_requirements distinguished_name = dn_requirements prompt = no [extension_requirements] basicConstraints = critical, CA:FALSE keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1 = examplepetstore.com DNS.2 = api.examplepetstore.com [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = examplepetstore.com emailAddress = test@examplepetstore.com EOF
サーバー証明書の CSR(
server.csr
)を作成します。openssl req -new \ -sha256 -newkey rsa:2048 -nodes \ -config server.config \ -keyout server.key -out server.csr
CSR に署名して X.509 サーバー証明書(
server.cert
)を発行します。CSR は中間証明書によって署名されます。openssl x509 -req \ -CAkey int.key -CA int.cert \ -days 365 \ -extfile server.config \ -extensions extension_requirements \ -in server.csr -out server.cert
ロードバランサがバックエンド サーバーに接続すると、バックエンド サーバーは証明書(
server.cert
)を提示してロードバランサに対して自己認証を行い、バックエンド認証プロセスを完了します。
Apache ウェブサーバーの追加の SSL 構成オプション
このセクションでは、前のセクションで作成したサーバー証明書に基づいて、Apache サーバーの SSL 構成オプションを更新する手順について説明します。-
サーバー秘密鍵(
server.key
)とサーバー証明書(server.cert
)を Apache ウェブサーバーにコピーします。cat > server.key << EOF -----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- EOF sudo cp ./server.key /etc/ssl/private/server.key
[...]
は、前に作成した PEM でエンコードされたサーバー秘密鍵に置き換えます。cat > server.cert << EOF -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- EOF sudo cp ./server.cert /etc/ssl/certs/server.cert
[...]
は、前に作成した PEM エンコードされたサーバー証明書に置き換えます。 -
Apache ウェブサーバーの SSL 構成を更新します。
指定した SSL 証明書と秘密鍵を使用して HTTPS トラフィックを有効にするように、Apache の SSL 構成を更新します。
sudo vi /etc/apache2/sites-available/default-ssl.conf ---- SSLCertificateFile /etc/ssl/certs/server.cert SSLCertificateKeyFile /etc/ssl/private/server.key ----
-
CA 証明書を再ハッシュします。
sudo c_rehash /etc/ssl/certs/
-
Apache ウェブサーバーを再起動して変更を適用します。
sudo systemctl restart apache2.service