Mengaktifkan akses berbasis sertifikat untuk aplikasi web

Halaman ini menjelaskan cara mengaktifkan akses berbasis sertifikat (CBA) untuk aplikasi web Anda. Anda dapat menggunakan CBA untuk mengamankan akses dari perangkat tepercaya ke aplikasi web perusahaan yang berjalan di Google Cloud.

Ringkasan

CBA untuk aplikasi web menggunakan fitur akses kontekstual BeyondCorp Enterprise dan networking Google Cloud untuk mengamankan akses menggunakan mutual TLS (mTLS). Berikut adalah komponen utama yang Anda gunakan untuk mengaktifkan CBA untuk aplikasi web:

  • Access Context Manager: memungkinkan Anda membuat tingkat akses yang memerlukan sertifikat saat menentukan akses ke aplikasi web.
  • Identity-Aware Proxy (IAP): mengautentikasi akses pengguna ke aplikasi web.
  • Load balancer HTTPS Google Cloud: menyediakan autentikasi bersama (mTLS) antara pengguna dan aplikasi web.
  • Kebijakan Chrome Enterprise: menyediakan autentikasi bersama (mTLS) antara pengguna dan aplikasi web saat menggunakan browser Chrome.

Sebelum memulai

Pastikan Anda memiliki Google Cloud CLI versi terbaru dengan menjalankan perintah berikut:

gcloud components update

Menyiapkan mTLS untuk load balancer HTTPS eksternal

Ikuti instructions untuk menyiapkan load balancer eksternal HTTPS. Catat nama proxy HTTPS target yang dibuat karena Anda akan membutuhkannya di langkah selanjutnya.

Membuat konfigurasi kepercayaan

Buat konfigurasi kepercayaan untuk merepresentasikan jenis Infrastruktur Kunci Publik (PKI) Anda.

Untuk menyelesaikan tugas ini, Anda harus memiliki izin certificatemanager.trustconfigs.create di project Google Cloud target.

Anda dapat membuat konfigurasi kepercayaan menggunakan sertifikat yang diterbitkan Google (Metode 1), menggunakan sertifikat Anda sendiri (Metode 2), atau menggunakan sertifikat yang ditandatangani sendiri dengan Verifikasi Endpoint (Metode 3).

Metode 1

Gunakan sertifikat yang diterbitkan Google untuk membuat konfigurasi kepercayaan.

  1. Selesaikan langkah-langkah untuk Membuat root CA.
  2. Ambil konten file PEM:

    gcloud privateca roots describe ROOT_CA_ID \
        --pool=POOL_ID \
        --location=CA_LOCATION \
        --format='value(pemCaCertificates)'
    

    Ganti kode berikut:

    • ROOT_CA_ID: ID root certificate.
    • POOL_ID: ID pool root certificate.
    • CA_LOCATION: Lokasi CA.
  3. Ambil root certificate yang ditampilkan di kolom pemCaCertificates. Sertifikat adalah string antara penanda BEGIN CERTIFICATE dan END CERTIFICATE, serta menyertakan kedua penanda tersebut.

  4. Simpan root certificate dalam format PEM ke file.

  5. Membuat konfigurasi kepercayaan:

    1. Tetapkan variabel lingkungan berikut:

      ROOT_PEM_FILE=TRUST_ANCHOR_PATH
      INT_PEM_FILE1=IM_CERT_PATH
      INT_PEM_FILE2=SECOND_IM_CERT_PATH
      

      Ganti kode berikut:

      • TRUST_ANCHOR_PATH: Jalur ke trust anchor berenkode PEM.
      • IM_CERT_PATH: Jalur ke intermediate certificate berenkode PEM.
      • SECOND_IM_CERT_PATH: Jalur ke intermediate certificate berenkode PEM kedua Anda.
    2. Siapkan konten file YAML konfigurasi kepercayaan:

      ROOT=$(cat ROOT_PEM_FILE | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      INT_1=$(cat INT_PEM_FILE1 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      INT_2=$(cat INT_PEM_FILE2 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      
    3. Buat file YAML konfigurasi kepercayaan:

      cat << EOF > trust_config.yaml
      name: "${TRUST_CONFIG_NAME?}"
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT?}"
        intermediateCas:
        - pemCertificate: "${INT_1?}"
        - pemCertificate: "${INT_2?}"
       EOF
      

      File YAML ini menentukan konfigurasi kepercayaan yang bernama TRUST_CONFIG_NAME. Konfigurasi kepercayaan berisi satu trust store, yang menyertakan root certificate dan dua intermediate certificate.

    4. Impor konfigurasi kepercayaan ke Google Cloud Certificate Manager:

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
        --project=GCP_PROJECT \
        --source=${PWD?}/trust_config.yaml
      

      Ganti kode berikut:

      • TRUST_CONFIG_NAME: Nama konfigurasi kepercayaan Anda.
      • GCP_PROJECT: ID project Google Cloud.

Jika Anda men-deploy struktur yang lebih kompleks dengan CA perantara yang ditandatangani oleh root, pastikan Anda menambahkan perantara sebagai intermediateCAs.

Metode 2

Gunakan deployment IKP Anda sendiri dengan sertifikat yang ada untuk membuat konfigurasi kepercayaan.

Jenis konfigurasi kepercayaan ini mengasumsikan penyimpanan trust dasar dengan satu anchor percaya yang merepresentasikan root certificate. Tidak ada intermediate certificate yang ditentukan.

Membuat konfigurasi kepercayaan:

  1. Tetapkan variabel lingkungan berikut:

    ROOT_PEM_FILE=TRUST_ANCHOR_PATH
    INT_PEM_FILE1=IM_CERT_PATH
    INT_PEM_FILE2=SECOND_IM_CERT_PATH
    

    Ganti kode berikut:

    • TRUST_ANCHOR_PATH: Jalur ke trust anchor berenkode PEM.
    • IM_CERT_PATH: Jalur ke intermediate certificate berenkode PEM.
    • SECOND_IM_CERT_PATH: Jalur ke intermediate certificate berenkode PEM kedua Anda.
  2. Siapkan konten file YAML konfigurasi kepercayaan:

    ROOT=$(cat ROOT_PEM_FILE | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    INT_1=$(cat INT_PEM_FILE1 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    INT_2=$(cat INT_PEM_FILE2 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
  3. Buat file YAML konfigurasi kepercayaan:

    cat << EOF > trust_config.yaml
    name: "${TRUST_CONFIG_NAME?}"
    trustStores:
    - trustAnchors:
      - pemCertificate: "${ROOT?}"
      intermediateCas:
      - pemCertificate: "${INT_1?}"
      - pemCertificate: "${INT_2?}"
    EOF
    

    File YAML ini menentukan konfigurasi kepercayaan yang bernama TRUST_CONFIG_NAME. Konfigurasi kepercayaan berisi satu trust store, yang menyertakan root certificate dan dua intermediate certificate.

  4. Impor konfigurasi kepercayaan ke Google Cloud Certificate Manager:

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
      --project=GCP_PROJECT \
      --source=${PWD?}/trust_config.yaml
    

    Ganti kode berikut:

    • TRUST_CONFIG_NAME: Nama konfigurasi kepercayaan Anda.
    • GCP_PROJECT: ID project Google Cloud.

Metode 3

Jika Anda menggunakan browser Chrome, dan ingin menggunakan sertifikat yang ditandatangani sendiri dengan Verifikasi Endpoint, ikuti petunjuk di bagian ini.

Ikuti instructions untuk men-deploy Verifikasi Endpoint bagi organisasi Anda. Verifikasi Endpoint secara otomatis men-deploy sertifikat yang diterbitkan Google dan ditandatangani sendiri ke perangkat Anda dan Anda tidak perlu membuat konfigurasi kepercayaan.

Membuat kebijakan TLS untuk mengaktifkan mTLS di load balancer eksternal

Jika Anda menggunakan Metode 3, Anda dapat melewati langkah ini.

Untuk menyelesaikan tugas ini, Anda harus memiliki izin berikut:

  1. Buat file YAML kebijakan TLS server:

    cat << EOF > server_tls_policy.yaml
    name: "SERVER_TLS_POLICY_NAME"
    mtlsPolicy:
      clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
      clientValidationTrustConfig: projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME
    EOF
    

    Ganti kode berikut:

    • SERVER_TLS_POLICY_NAME: Nama kebijakan TLS server.
    • GCP_PROJECT: ID project Google Cloud.
    • TRUST_CONFIG_NAME: Konfigurasi kepercayaan yang Anda buat pada langkah sebelumnya.

    Guna mengetahui informasi tentang opsi validasi klien untuk clientValidationMode, lihat Mode validasi klien MTLS.

  2. Impor YAML kebijakan TLS server ke project Google Cloud:

    gcloud network-security server-tls-policies import ${SERVER_TLS_POLICY_NAME?} \
      --project=GCP_PROJECT \
      --source=${PWD?}/server_tls_policy.yaml \
      --location=global
    

    Ganti GCP_PROJECT dengan project ID Google Cloud.

Setelah membuat kebijakan TLS, Anda tidak dapat mengubahnya. Jika ingin membuat perubahan pada kebijakan TLS yang ada, hapus kebijakan TLS yang sudah ada dan buat yang baru.

Melampirkan kebijakan TLS ke kebijakan HTTPS target

Untuk menyelesaikan tugas ini, Anda harus memiliki izin compute.targetHttpsProxies.get di project Google Cloud target.

  1. Ekspor proxy HTTPS target yang ada ke file lokal:

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --destination=${PWD?}/xlb-mtls-target-proxy.yaml
    

    Ganti kode berikut:

    • TARGET_HTTPS_PROXY_NAME: Proxy HTTPS target.
    • GCP_PROJECT: ID project Google Cloud.
  2. Tambahkan ServerTlsPolicy ke konfigurasi proxy HTTPS target:

    Untuk menyelesaikan tugas ini, Anda harus memiliki izin berikut:

    echo "serverTlsPolicy:
    //networksecurity.googleapis.com/projects/GCP_PROJECT/locations/global/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> xlb-mtls-target-proxy.yaml
    

    Ganti kode berikut:

    • GCP_PROJECT: ID project Google Cloud.
    • SERVER_TLS_POLICY_NAME: Kebijakan TLS server.
  3. Update proxy HTTPS target dengan mengimpor konfigurasi baru dari file lokal:

    gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --source=${PWD?}/xlb-mtls-target-proxy.yaml
    

    Ganti kode berikut:

    • TARGET_HTTPS_PROXY_NAME: Proxy HTTPS target.
    • GCP_PROJECT: ID project Google Cloud.

Membuat tingkat akses yang memerlukan sertifikat

Konsol

  1. Ikuti petunjuk untuk membuat tingkat akses kustom.
  2. Tambahkan ekspresi berikut ke tingkat akses kustom Anda:

    Jika Anda membuat konfigurasi kepercayaan (Metode 1 atau Metode 2), tambahkan ekspresi berikut di kolom Kondisi pada tingkat akses kustom Anda untuk menggunakan binding pengesahan IKP saat melakukan autentikasi:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true
    

    Dengan TLS_POLICY_FULL_RESOURCE_PATH1 dan TLS_POLICY_FULL_RESOURCE_PATH2 adalah jalur yang mewakili beberapa konfigurasi kepercayaan: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

    Anda harus menyediakan setidaknya satu jalur konfigurasi kepercayaan.

    Ganti kode berikut:

    • GCP_PROJECT: ID project Google Cloud.
    • TRUST_CONFIG_NAME: Nama konfigurasi kepercayaan Anda.

    Jika Anda menggunakan sertifikat yang diterbitkan oleh Google dan ditandatangani sendiri (Metode 3), tambahkan ekspresi berikut di kolom Conditions pada tingkat akses kustom untuk menggunakan binding sertifikat saat melakukan autentikasi:

    certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
    

gcloud

Jika Anda membuat konfigurasi kepercayaan (Metode 1 atau Metode 2), jalankan perintah berikut untuk membuat tingkat akses kustom yang menggunakan binding pengesahan IKP saat melakukan autentikasi:

gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
    --title=TITLE \
    --custom-level-spec=FILE \
    --description=DESCRIPTION \
    --policy=POLICY_NAME

Ganti kode berikut:

  • ACCESS_LEVEL_NAME: Nama unik untuk tingkat akses.
  • TITLE: Judul yang dapat dibaca manusia.
  • FILE: File YAML yang berisi ekspresi berikut:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true

    Dengan TLS_POLICY_FULL_RESOURCE_PATH1 dan TLS_POLICY_FULL_RESOURCE_PATH2 adalah jalur yang mewakili beberapa konfigurasi kepercayaan: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

    Anda harus menyediakan setidaknya satu jalur konfigurasi kepercayaan.

    Ganti kode berikut:

    • GCP_PROJECT: ID project Google Cloud.
    • TRUST_CONFIG_NAME: Nama konfigurasi kepercayaan Anda.
  • DESCRIPTION: Deskripsi panjang tingkat akses.

  • POLICY_NAME: Kebijakan akses organisasi Anda.

Jika Anda tidak memiliki konfigurasi kepercayaan, karena menggunakan sertifikat yang ditandatangani sendiri dengan Verifikasi Endpoint (Metode 3), tambahkan ekspresi berikut ke tingkat akses kustom Anda:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

Menerapkan akses berbasis sertifikat menggunakan Identity-Aware Proxy (IAP)

Dalam arsitektur CBA untuk aplikasi web, IAP menyediakan penerapan kebijakan berbasis utama untuk melindungi aplikasi web Anda dari perangkat yang tidak tepercaya.

Selesaikan langkah-langkah berikut untuk mengaktifkan IAP dan mengonfigurasi kebijakan CBA:

  1. Jika belum menyiapkan IAP, ikuti instructions untuk menyiapkan IAP.
  2. Buka IAP untuk menambahkan level akses yang Anda buat sebelumnya:
    Buka IAP
  3. Pilih resource yang ingin diamankan dengan CBA, lalu klik Settings.
  4. Di kolom Tingkat Akses, masukkan nama tingkat akses yang Anda buat.

Untuk menggunakan Google Cloud CLI guna mengonfigurasi kebijakan CBA dalam IAP, lihat dokumentasi Google Cloud CLI.

Konfigurasi browser untuk memilih sertifikat secara otomatis

Agar browser otomatis memilih sertifikat saat menentukan akses, selesaikan langkah-langkah untuk browser Anda.

Chrome

Konfigurasikan kebijakan Chrome AutoSelectCertificateForURLs agar Chrome menggunakan sertifikat yang benar selama handshake mTLS.

  1. Pastikan browser Chrome dikelola oleh pengelolaan cloud browser Chrome atau kebijakan grup Windows:

  2. Tambahkan kebijakan AutoSelectCertificateForUrls:

    1. Di konsol admin, buka Perangkat > Chrome > Setelan > Setelan Pengguna & Browser > Sertifikat klien.
    2. Pilih organisasi.
    3. Tambahkan kebijakan AutoSelectCertificateForUrls untuk URL aplikasi web dan informasi root certificate Anda.

Untuk informasi selengkapnya, lihat dokumentasi tentang skema kebijakan. Berikut adalah contoh konfigurasi kebijakan yang menggunakan sertifikat dari Verifikasi Endpoint:

{
  "pattern":"https://[*.].mysite.com",
  "Filter":{
    "ISSUER":{
      "CN":"Google Endpoint Verification"
    }
  }
}

Safari

Konfigurasi preferensi identitas:

  1. Buka aplikasi Keychain Access, lalu pilih All Items.
  2. Pilih sertifikat yang ingin dikonfigurasi.
  3. Klik File > Preferensi Identitas Baru.
  4. Masukkan URL, lalu klik Tambahkan.

Tindakan ini akan membuat entri preferensi identitas baru dalam Rantai Kunci yang dapat Anda update.

Edge

Tetapkan kebijakan Edge AutoSelectCertificateForUrls dengan mengikuti petunjuk dalam dokumentasi Edge.