Halaman ini memberikan petunjuk untuk membuat root certificate dan
intermediate certificate yang ditandatangani, lalu mengupload sertifikat tersebut
ke resource TrustConfig
Pengelola Sertifikat. Jika Anda memiliki sertifikat yang akan diupload, lewati langkah-langkah untuk membuat sertifikat baru.
Anda juga membuat resource keamanan jaringan yang diperlukan untuk mengonfigurasi TLS bersama (mTLS) untuk Load Balancer Aplikasi. Petunjuknya menggunakan OpenSSL untuk membuat root certificate dan intermediate certificate.
Sebelum memulai
- Tinjau Ringkasan TLS bersama.
- Tinjau Mengelola konfigurasi kepercayaan.
Instal Google Cloud CLI. Untuk ringkasan lengkap tentang alat ini, baca ringkasan gcloud CLI. Anda dapat menemukan perintah yang terkait dengan load balancing di referensi API dan gcloud CLI.
Jika Anda belum pernah menjalankan gcloud CLI, jalankan perintah
gcloud init
terlebih dahulu untuk melakukan autentikasi.Aktifkan API: Compute Engine API, Certificate Manager API, Keamanan Jaringan, dan Network Services API.
Tetapkan project Anda.
gcloud
gcloud config set project PROJECT_ID
Izin
Untuk mendapatkan izin yang Anda perlukan guna menyelesaikan panduan ini, minta administrator Anda untuk memberi Anda peran IAM berikut pada project:
-
Untuk membuat resource load balancer seperti
TargetHTTPSProxy
: Admin Load Balancer Compute (roles/compute.loadBalancerAdmin
) -
Untuk menggunakan resource Certificate Manager:
Certificate Manager Owner (
roles/certificatemanager.owner
) -
Untuk membuat komponen keamanan dan jaringan:
Admin Jaringan Compute (
roles/compute.networkAdmin
) dan Admin Keamanan Compute (roles/compute.securityAdmin
) -
Untuk membuat project (opsional):
Project Creator (
roles/resourcemanager.projectCreator
)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Membuat kunci dan sertifikat yang ditandatangani
Bagian ini menggunakan perintah openssl
untuk membuat sertifikat root dan
intermediate.
Gunakan perintah berikut untuk membuat root certificate dan intermediate certificate
yang ditandatangani dengan kolom keyUsage
dan extendedKeyUsage
yang valid.
Buat contoh file
example.cnf
dengan konfigurasi minimum yang diperlukan untuk membuat sertifikat penandatanganan yang valid. Anda dapat mengedit file ini jika ingin menetapkan kolom tambahan pada sertifikat ini.cat > example.cnf << EOF [req] distinguished_name = empty_distinguished_name [empty_distinguished_name] # Kept empty to allow setting via -subj command line arg. [ca_exts] basicConstraints=critical,CA:TRUE keyUsage=keyCertSign extendedKeyUsage=clientAuth EOF
Buat root certificate.
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
Buat permintaan penandatanganan untuk intermediate certificate.
openssl req \ -new -sha256 -newkey rsa:2048 -nodes \ -subj '/CN=int' \ -config example.cnf \ -extensions ca_exts \ -keyout int.key -out int.req
Buat intermediate certificate.
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
Membuat sertifikat yang diizinkan
Bagian ini menggunakan perintah openssl
untuk membuat contoh sertifikat yang diizinkan.
Gunakan perintah berikut untuk membuat sertifikat yang diizinkan.
openssl req -x509 \
-new -sha256 -newkey rsa:2048 -nodes \
-days 3650 -subj '/CN=localhost' \
-keyout allowlisted.key -out allowlisted.cert
Memformat sertifikat
Untuk menyertakan sertifikat baru atau yang sudah ada dalam TrustStore
, format sertifikat tersebut ke dalam satu baris dan simpan dalam variabel lingkungan, sehingga dapat dibaca dalam file YAML. Gunakan perintah berikut untuk memformat sertifikat dan menyimpannya dalam
variabel lingkungan:
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')
Untuk menyertakan sertifikat baru atau yang sudah ada dalam daftar yang diizinkan dalam konfigurasi kepercayaan, format sertifikat ke dalam satu baris dan simpan dalam variabel lingkungan, agar dapat dibaca ke dalam file YAML. Gunakan perintah berikut untuk memformat sertifikat yang diizinkan dan menyimpannya di variabel lingkungan:
export ALLOWLISTED_CERT=$(cat allowlisted.cert | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
Membuat resource TrustConfig
Buat resource TrustConfig
Pengelola Sertifikat
yang mewakili IKP Anda. Contoh resource TrustConfig
ini berisi
penyimpanan kepercayaan dengan dua trust anchor dan dua sertifikat CA perantara.
Alat ini membaca konten sertifikat dari variabel lingkungan yang dibuat pada langkah Memformat sertifikat sebelumnya.
Untuk membuat penyimpanan trust dengan sertifikat trust anchor atau sertifikat
CA perantara tambahan, tambahkan baris pemCertificate
di bagian yang sesuai. Jika Anda
memiliki lebih sedikit trust anchor atau sertifikat intermediate CA, hapus baris
yang tidak diperlukan.
Contoh resource TrustConfig
ini berisi sertifikat yang diizinkan.
Anda dapat menentukan beberapa sertifikat yang diizinkan menggunakan beberapa instance kolom pemCertificate
.
Pada langkah-langkah berikut, ganti TRUST_CONFIG_NAME
dengan nama resource TrustConfig
:
Untuk membuat file
trust_config.yaml
dengan trust store, gunakan perintah berikut:cat << EOF > trust_config.yaml trustStores: - trustAnchors: - pemCertificate: "${ROOT_CERT?}" - pemCertificate: "${ROOT_CERT_2?}" intermediateCas: - pemCertificate: "${INTERMEDIATE_CERT?}" - pemCertificate: "${INTERMEDIATE_CERT_2?}" EOF
Opsional: Untuk membuat file
trust_config.yaml
dengan sertifikat yang diizinkan, gunakan perintah berikut:cat << EOF > trust_config.yaml allowlistedCertificates: - pemCertificate: "${ALLOWLISTED_CERT?}" EOF
Untuk membuat resource
TrustConfig
Pengelola Sertifikat, gunakan perintahgcloud certificate-manager trust-configs import
:global
Untuk Load Balancer Aplikasi eksternal dan Load Balancer Aplikasi internal lintas region, gunakan perintah ini:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml
regional
Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, gunakan perintah ini:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --source=trust_config.yaml \ --location=REGION
Membuat resource keamanan jaringan
Kebijakan TLS server (resource keamanan jaringan ServerTLSPolicy
) memungkinkan Anda
menentukan mode TLS sisi server dan resource TrustConfig
yang akan digunakan
saat memvalidasi sertifikat klien. Jika klien menyajikan sertifikat yang tidak valid atau tidak ada sertifikat ke load balancer, clientValidationMode
akan menentukan cara penanganan koneksi klien.
- Jika
clientValidationMode
disetel keALLOW_INVALID_OR_MISSING_CLIENT_CERT
, semua permintaan akan diteruskan ke backend meskipun validasi gagal atau sertifikat klien tidak ada. - Jika
clientValidationMode
disetel keREJECT_INVALID
, hanya permintaan yang menyediakan sertifikat klien yang dapat divalidasi terhadap resourceTrustConfig
yang akan diteruskan ke backend.
Untuk membuat resource ServerTLSPolicy
, selesaikan langkah-langkah berikut:
Berdasarkan cara Anda ingin menangani koneksi, pilih salah satu opsi berikut.
Pada langkah-langkah berikut, ganti
SERVER_TLS_POLICY_NAME
dengan nama kebijakan TLS server, lalu gantiPROJECT_ID
dengan ID project Google Cloud Anda.Opsi 1:
clientValidationMode
ditetapkan keALLOW_INVALID_OR_MISSING_CLIENT_CERT
.Untuk membuat file
server_tls_policy.yaml
, gunakan perintah berikut:global
Untuk Load Balancer Aplikasi eksternal dan Load Balancer Aplikasi internal lintas region, gunakan perintah:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
regional
Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, gunakan perintah:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Opsi 2:
clientValidationMode
disetel keREJECT_INVALID
.Untuk membuat file
server_tls_policy.yaml
, gunakan perintah berikut:global
Untuk Load Balancer Aplikasi eksternal dan Load Balancer Aplikasi internal lintas region, gunakan perintah:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/global/trustConfigs/TRUST_CONFIG_NAME EOF
regional
Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, gunakan perintah:
cat << EOF > server_tls_policy.yaml name: SERVER_TLS_POLICY_NAME mtlsPolicy: clientValidationMode: REJECT_INVALID clientValidationTrustConfig: projects/PROJECT_ID/locations/REGION/trustConfigs/TRUST_CONFIG_NAME EOF
Untuk membuat resource
ServerTlsPolicy
, gunakan perintahgcloud network-security server-tls-policies import
:global
Untuk Load Balancer Aplikasi eksternal dan Load Balancer Aplikasi internal lintas region, gunakan perintah:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=global
regional
Untuk Load Balancer Aplikasi eksternal regional dan Load Balancer Aplikasi internal regional, gunakan perintah:
gcloud network-security server-tls-policies import SERVER_TLS_POLICY_NAME \ --source=server_tls_policy.yaml \ --location=REGION
Untuk mengetahui informasi selengkapnya, lihat Mode validasi klien MTLS.
Menandatangani kunci klien dengan intermediate certificate
Bagian ini memberikan opsi konfigurasi tambahan untuk membuat leaf
certificate.
Jika Anda telah membuat resource TrustConfig menggunakan
sertifikat perantara (int.cert
dan int.key
), gunakan petunjuk
berikut:
Membuat file konfigurasi kunci klien.
cat > client.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 = clientAuth [dn_requirements] countryName = US stateOrProvinceName = California localityName = San Francisco 0.organizationName = example organizationalUnitName = test commonName = test.example.com emailAddress = test@example.com EOF
Jika Anda ingin melampirkan identitas SPIFFE:
Tambahkan
subjectAltName
ke bagian[extension_requirements]
sebagai berikut:subjectAltName = @sans_list
Tambahkan bagian baru di bagian bawah file
client.config
dengan hal berikut:[sans_list] URI.1 = spiffe://example.com/test-identity
Tanda tangani kunci.
openssl req -new -keyout client.key -out client.csr -config client.config openssl x509 -req -in client.csr -out client.cert -extfile client.config -extensions extension_requirements -days 365 -CA int.cert -CAkey int.key
Untuk menguji, kirim permintaan
curl
ke alamat IP load balancer.curl -v -k --key client.key --cert client.cert https://IP_ADDRESS
Ganti IP_ADDRESS dengan alamat IP load balancer.
Langkah selanjutnya
- Menyiapkan TLS bersama untuk Load Balancer Aplikasi eksternal global
- Menyiapkan TLS bersama untuk Load Balancer Aplikasi klasik
- Menyiapkan TLS bersama untuk Load Balancer Aplikasi internal
- Menyiapkan TLS bersama untuk Load Balancer Aplikasi eksternal regional
- Menyiapkan TLS bersama dengan CA pribadi