Mengamankan aplikasi non-Google Cloud menggunakan konektor aplikasi

Halaman ini menjelaskan cara menyiapkan dan menggunakan konektor aplikasi BeyondCorp Enterprise untuk mengamankan aplikasi non-Google Cloud.

Ringkasan

Anda dapat menggunakan konektor aplikasi BeyondCorp Enterprise untuk memberikan akses kontekstual dan identitas ke aplikasi HTTPS yang berjalan di lingkungan non-Google Cloud. Konektor aplikasi BeyondCorp Enterprise adalah antarmuka yang aman dan diautentikasi antara bidang penerapan BeyondCorp Enterprise dan aplikasi yang berjalan di lingkungan cloud dan lokal lainnya.

Manfaat menggunakan konektor aplikasi BeyondCorp Enterprise adalah Anda tidak perlu membuka firewall atau menyiapkan koneksi Cloud VPN site-to-site.

Arsitektur

Berikut ini adalah diagram arsitektur tingkat tinggi yang menggambarkan komponen utama konektor aplikasi BeyondCorp Enterprise.

Komponen konektor aplikasi BeyondCorp Enterprise

Komponen konektor aplikasi BeyondCorp Enterprise diatur menggunakan tiga resource API utama: konektor aplikasi, koneksi aplikasi, dan gateway aplikasi.

Konektor Aplikasi
Resource konektor menentukan remote agent konektor aplikasi unik. Agen jarak jauh konektor aplikasi di-deploy di lingkungan perusahaan jarak jauh, seperti di cloud lainnya dan lingkungan lokal. Agen jarak jauh memulai dan mengelola sesi tunnel ke Google Cloud, menerima traffic dari Google Cloud, dan meneruskan traffic ke endpoint aplikasi jarak jauh di lingkungan yang sama.
Koneksi Aplikasi
Resource koneksi menentukan koneksi logis dari Google Cloud ke endpoint aplikasi tertentu yang diidentifikasi menggunakan alamat IP:Port atau FQDN:Port. Resource koneksi mengatur serangkaian gateway konektor aplikasi terkelola yang dialokasikan untuk endpoint aplikasi tertentu. Gateway dikelola di Google Cloud dan menghentikan sesi tunnel dari agen jarak jauh saat tidak lagi diperlukan.
Gateway Aplikasi

Gateway aplikasi adalah penawaran layanan terkelola Google. Agen jarak jauh konektor aplikasi terhubung ke satu atau beberapa gateway yang memungkinkan koneksi aplikasi dan konektor aplikasi untuk meneruskan traffic dari pengguna akhir ke agen jarak jauh. Traffic untuk koneksi aplikasi yang dihosting di gateway aplikasi yang sama dirutekan melalui infrastruktur virtual umum.

Saat Anda menghubungkan aplikasi menggunakan konektor aplikasi, gateway aplikasi secara implisit dibuat dan dikelola untuk Anda. Anda juga dapat membuat gateway aplikasi tambahan jika ingin mengatur resource koneksi aplikasi ke dalam grup. Gateway aplikasi memberikan fleksibilitas untuk mengelompokkan atau memisahkan koneksi aplikasi guna memungkinkan isolasi aplikasi.

Setiap gateway aplikasi dapat mendukung throughput maksimum hingga 1 Gbps untuk total hingga 200.000 koneksi serentak. Sebaiknya buat gateway khusus untuk aplikasi penting yang memerlukan performa tinggi. Anda dapat mengalokasikan maksimum 10 aplikasi per gateway.

Untuk mendukung hingga 200.000 koneksi serentak dan total throughput hingga 1 Gbps, sebaiknya gunakan VM khusus yang terdiri dari 8 core dan memori sebesar 8 GB untuk menjalankan remote agent konektor aplikasi. Misalnya, Anda dapat mendedikasikan 2 agen jarak jauh konektor aplikasi dalam cluster HA dengan masing-masing 8 core dan 8 GB memori untuk mendukung aplikasi web berperforma tinggi (app1.examplecompany.com) dengan gateway aplikasi khusus (app_gateway1). Buat cluster lain yang terdiri dari 2 VM masing-masing dengan 8 core dan memori 8 GB untuk mendukung kombinasi 10 aplikasi dengan penggunaan rendah dengan gateway aplikasi khusus lainnya (app_gateway2).

Resource konektor aplikasi, koneksi aplikasi, dan gateway aplikasi bersifat regional. Anda hanya dapat menggunakannya dalam konteks regional. Misalnya, Anda tidak dapat menetapkan konektor aplikasi di region A ke koneksi aplikasi atau gateway aplikasi yang dibuat di region B.

Sebelum memulai

Anda dapat menggunakan konektor aplikasi BeyondCorp Enterprise hanya dengan aplikasi HTTPS. Selain itu, load balancer HTTPS tidak menggunakan ekstensi Server Name Indication (SNI) untuk koneksi ke backend. Untuk mengetahui detail selengkapnya, lihat Enkripsi dari load balancer ke backend.

Untuk menggunakan konektor aplikasi BeyondCorp Enterprise, Anda harus memiliki hal berikut:

Setiap agen konektor aplikasi BeyondCorp Enterprise memerlukan VM Linux yang menjalankan Docker. Sebaiknya gunakan distribusi Linux berikut:

  • Debian 10.7 (buster)
  • Red Hat Enterprise Linux Server 7.8 (Maipo) x86_64
  • Ubuntu 16.04 atau yang lebih baru

Untuk hardware VM Linux, kami merekomendasikan minimal 2 CPU dengan RAM 2 GB.

Anda dapat menyiapkan dan mengaktifkan konektor aplikasi menggunakan gcloud dan API, atau dengan menggunakan Konsol Google Cloud. Untuk menggunakan gcloud dan API, selesaikan langkah-langkah berikut. Untuk menggunakan konsol Google Cloud, buka Menyiapkan konektor aplikasi menggunakan Konsol Google Cloud.

Menyiapkan project Google Cloud

Untuk menyiapkan project Google Cloud untuk digunakan dengan konektor aplikasi BeyondCorp Enterprise, Anda harus mengaktifkan BeyondCorp Enterprise API. Aktifkan API dengan menyelesaikan langkah-langkah berikut:

gcloud CLI

Sebelum menyelesaikan langkah-langkah berikut, pastikan Anda telah menginstal gcloud CLI SDK.

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    PROJECT_ID=my-project
    

    Ganti my-project dengan project ID Google Cloud.

  2. Aktifkan API dengan menjalankan perintah berikut:

    gcloud config set project $PROJECT_ID
    gcloud services enable beyondcorp.googleapis.com
    

API

  1. Dapatkan token akses dan tetapkan variabel serta alias lingkungan yang diperlukan dengan menjalankan perintah berikut:

    PROJECT_NUMBER=my-project-number
    ACCESS_TOKEN=my-access-token
    

    Ganti my-project dengan project ID Google Cloud.

  2. Siapkan alias yang mudah digunakan untuk menggunakan token akses Anda:

    alias gcurl="curl -H 'Authorization: Bearer ${ACCESS_TOKEN}' -H 'Content-Type: application/json'"
    

  3. Aktifkan API dengan menjalankan perintah berikut:

    gcurl https://serviceusage.googleapis.com/v1/projects/${PROJECT_NUMBER}/services/beyondcorp.googleapis.com:enable -d "{}"
    

Menginstal remote agent konektor aplikasi

Anda harus men-deploy VM remote agent konektor aplikasi untuk setiap lingkungan jaringan yang menghosting aplikasi yang ingin Anda lindungi dengan BeyondCorp Enterprise. Anda harus memiliki VM khusus, atau server Bare Metal dengan Docker yang terinstal, untuk setiap remote agent yang Anda buat.

Untuk membuat remote agent, selesaikan langkah-langkah berikut:

  1. Buat instance VM di lingkungan aplikasi Anda.
    1. Pastikan firewall jaringan VM remote agent mengizinkan semua traffic keluar yang dimulai di port 443 untuk rentang IP IAP-TCP 35.235.240.0/20. Lihat artikel Memverifikasi konfigurasi firewall untuk domain lain yang harus diizinkan oleh firewall VM remote agent untuk traffic keluar.
  2. Instal remote agent:

    1. Pastikan DNS Anda sudah dikonfigurasi dengan benar dan Anda dapat mengakses aplikasi menggunakan curl.
    2. Instal Docker Engine.
      1. Opsional: Jika Anda menggunakan proxy, pastikan daemon Docker dikonfigurasi dengan benar.
    3. Opsional: Jika Anda menggunakan proxy, pastikan variabel lingkungan proxy HTTP dan HTTPS telah ditetapkan dan menggunakan skema http://.
    4. Jalankan perintah berikut di VM remote agent untuk menginstal remote agent:
      curl https://raw.githubusercontent.com/GoogleCloudPlatform/beyondcorp-applink/main/bash-scripts/install-beyondcorp-runtime -o ./install-beyondcorp-runtime && chmod +x ./install-beyondcorp-runtime && ./install-beyondcorp-runtime
      
    5. Untuk menambahkan alias bce-connctl ke shell, jalankan perintah berikut:
       source ~/.bce_alias
       
    6. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      
      Ganti kode berikut:

      • my-project: ID project Google Cloud.
      • us-central1: region tempat untuk men-deploy koneksi dan gateway.
      • my-connector: nama konektor.
    7. Daftarkan konektor menggunakan salah satu jenis kredensial berikut:

    Akun layanan

    1. Daftarkan konektor dengan menjalankan perintah berikut di CLI bce-connctl:

      bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME
      

    2. Ikuti petunjuk di layar untuk menyalin dan menempelkan skrip pendaftaran ke project Google Cloud Anda menggunakan Cloud Shell atau gcloud CLI, dan menyelesaikan pendaftaran konektor Anda. Untuk menjalankan skrip pendaftaran, Anda harus memiliki izin Owner pada project.

      Setelah skrip pendaftaran selesai, runtime akan otomatis menyinkronkan konfigurasi konektor.

    Identitas gabungan

    1. Ikuti panduan penggabungan identitas workload untuk memberikan akses identitas eksternal Anda ke Google Cloud menggunakan peniruan akun layanan.
    2. Download konfigurasi library klien dan tempatkan file di VM remote agent di /var/beyondcorp/credentials/credentials.json.
      1. Jika menggunakan instance AWS EC2 sebagai VM remote agent, lakukan salah satu tindakan berikut:
        1. Jadikan IMDSv2 opsional pada instance EC2.
        2. Tambahkan baris berikut ke objek credential_source di file konfigurasi library klien:
          "imdsv2_session_token_url": "http://169.254.169.254/latest/api/token"
          
    3. Di VM remote agent, jalankan perintah berikut di CLI bce-connctl:
      bce-connctl config set project $PROJECT_ID
      bce-connctl config set region $REGION
      bce-connctl config set connector $CONNECTOR_NAME
      
    4. Jalankan perintah berikut untuk memulai ulang agen dan membuatnya mengambil kredensial:
      sudo systemctl restart beyondcorp
      
    5. Di endpoint Cloud Shell atau gcloud CLI, tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:
      SERVICE_ACCOUNT=my-service-account
      
      Ganti kode berikut:
      • my-service-account: akun layanan Google Cloud yang terkait dengan identitas eksternal.
    6. Berikan peran BeyondCorp Connection Agent kepada akun layanan Google Cloud dengan menjalankan perintah berikut:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role="roles/beyondcorp.connectionAgent"
      
    7. Jalankan perintah berikut untuk membuat resource konektor aplikasi Google Cloud.

      gcloud alpha beyondcorp app connectors create $CONNECTOR_NAME \
          --project=$PROJECT_ID \
          --location=$REGION \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --display-name=$CONNECTOR_NAME
      

      Setelah resource konektor aplikasi dibuat, runtime remote agent akan menyinkronkan konfigurasi konektor secara otomatis.

  3. Verifikasi penginstalan remote agent:

    1. Jalankan perintah berikut untuk memastikan layanan berjalan:
      sudo systemctl status beyondcorp
      
    2. Remote agent terdiri dari tiga container Docker: bce-control-runtime, bce-logagent, dan bce-connector. Pastikan ketiga penampung berjalan dengan menjalankan perintah berikut:
      docker ps --filter name=bce
      
    3. Opsional: Anda dapat memeriksa file log container Docker dengan menjalankan perintah berikut:
      docker logs -f CONTAINER_NAME
      
      Ganti CONTAINER_NAME dengan nama container Docker.

Menghubungkan aplikasi jarak jauh ke VPC

gcloud CLI

Sebelum menyelesaikan langkah-langkah berikut, pastikan Anda telah menginstal gcloud CLI SDK dan login dengan akun yang memiliki peran beyondcorp.admin.

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Ganti kode berikut:

    • my-connector: nama konektor, yang ditentukan pada langkah sebelumnya.
    • my-connection: nama unik untuk koneksi.
    • my-project: ID project Google Cloud.
    • us-central1: region tempat untuk men-deploy koneksi dan gateway.
    • APP_HOST: alamat IP lokal atau FQDN yang menghosting aplikasi Anda.
    • APP_PORT: nomor port yang akan dihubungkan ke aplikasi Anda.
  2. Untuk membuat koneksi antara aplikasi Anda dan VPC, jalankan perintah berikut:

    gcloud alpha beyondcorp app connections create $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --application-endpoint=$APP_ENDPOINT \
        --type=tcp \
        --connectors=$CONNECTOR_NAME \
        --display-name=$CONNECTION_NAME
    

    Perhatikan bahwa langkah ini mungkin memerlukan waktu beberapa menit.

  3. Setelah Anda membuat koneksi, jalankan perintah berikut untuk mengambil gateway URI:

    GATEWAY_URI="$(gcloud alpha beyondcorp app connections describe $CONNECTION_NAME --project=$PROJECT_ID --location=$REGION --format='get(gateway.uri)')"
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/bce-ps7}"
    

    GATEWAY_URI_L7 digunakan untuk membuat aturan penerusan. Konektor aplikasi BeyondCorp Enterprise menggunakan Private Service Connect untuk menautkan project konsumen ke resource terkelola di project yang dikelola Google.

API

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_HOST=my-app-host
    APP_PORT=my-app-port
    

    Ganti kode berikut:

    • my-connector: nama konektor, yang ditentukan pada langkah sebelumnya.
    • my-connection: nama unik untuk koneksi.
    • my-project: ID project Google Cloud.
    • us-central1: region tempat untuk men-deploy koneksi dan gateway.
    • my-app-host: alamat IP lokal atau FQDN yang menghosting aplikasi Anda.
    • my-app-port: nomor port yang akan dihubungkan ke aplikasi Anda.
  2. Untuk membuat koneksi antara aplikasi Anda dan VPC, jalankan perintah berikut:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
        'application_endpoint': \
        { \
            'host': '${APP_HOST}', \
            'port': '${APP_PORT}' \
        }, \
        'type': 'TCP_PROXY', \
        'display_name': '${CONNECTION_NAME}' \
    }"
    

    Perhatikan bahwa langkah ini mungkin memerlukan waktu beberapa menit.

  3. Setelah Anda membuat koneksi, jalankan perintah berikut untuk mengambil gateway URI:

    GATEWAY_URI=$(gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections/${CONNECTION_NAME} | jq -r '.gateway.uri')
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/'bce-ps7'}"
    

    GATEWAY_URI_L7 digunakan untuk membuat aturan penerusan. Konektor aplikasi BeyondCorp Enterprise menggunakan Private Service Connect untuk menautkan project konsumen ke resource terkelola di project yang dikelola Google.

Mengonfigurasi Load Balancer Aplikasi eksternal

Anda hanya dapat menghubungkan aplikasi HTTPS ke Load Balancer Aplikasi eksternal. Aplikasi HTTP tidak didukung.

gcloud CLI

Sebelum menyelesaikan langkah-langkah berikut, pastikan Anda telah menginstal gcloud CLI SDK dan login dengan akun yang memiliki peran beyondcorp.admin.

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Ganti kode berikut:

    • web-app: awalan yang ditambahkan ke nama semua resource load balancer.
    • my-project: ID project Google Cloud.
    • us-central1: region tempat koneksi dan gateway akan di-deploy.
    • app.example.com: nama domain aplikasi Anda.
  2. Buat Grup Endpoint Jaringan (NEG) menggunakan perintah berikut:

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    

    Flag opsional:

    • Tetapkan flag --network untuk menentukan nama jaringan untuk endpoint jaringan di NEG. Jika tidak ditentukan, jaringan project default akan digunakan.
    • Tetapkan flag --subnet untuk menentukan nama subnetwork untuk endpoint jaringan di NEG. Jika tidak ditentukan, endpoint jaringan dapat menjadi bagian dari subnetwork mana pun di region tempat grup endpoint jaringan dibuat.
  3. Buat layanan backend berbasis NEG dan hubungkan ke lampiran layanan Private Service Connect dengan menjalankan perintah berikut:

    gcloud beta compute backend-services create $LB_PREFIX-backend-service \
        --global \
        --protocol=HTTPS \
        --load-balancing-scheme=EXTERNAL_MANAGED
    
    gcloud beta compute backend-services add-backend $LB_PREFIX-backend-service \
        --global \
        --network-endpoint-group=$LB_PREFIX-neg \
        --network-endpoint-group-region=$REGION
    
  4. Buat sertifikat yang dikelola Google untuk domain Anda dengan menjalankan perintah berikut:

    gcloud compute addresses create $LB_PREFIX-static-ip \
        --ip-version=IPV4 \
        --global
    gcloud compute ssl-certificates create $LB_PREFIX-ssl-cert \
        --domains=$DOMAIN_NAME \
        --global
    
    LB_IP="$(gcloud compute addresses describe $LB_PREFIX-static-ip --global --format='value(address)')"
    
  5. Buat Load Balancer Aplikasi eksternal berdasarkan backend dari langkah sebelumnya dengan menjalankan perintah berikut:

    gcloud compute url-maps create $LB_PREFIX-map-https \
        --default-service=$LB_PREFIX-backend-service
    
    gcloud compute target-https-proxies create $LB_PREFIX-https-lb-proxy \
        --url-map=$LB_PREFIX-map-https \
        --ssl-certificates=$LB_PREFIX-ssl-cert
    
    gcloud beta compute forwarding-rules create "$LB_PREFIX-https-lb-forwarding-rule" \
        --global \
        --target-https-proxy=$LB_PREFIX-https-lb-proxy \
        --address=$LB_IP \
        --ports=443 \
        --load-balancing-scheme=EXTERNAL_MANAGED
    

    Setelah Load Balancer Aplikasi eksternal dibuat, aplikasi Anda dapat diakses melalui internet oleh alamat IP tersebut.

  6. Setelah Load Balancer Aplikasi eksternal dibuat, Anda harus mengaitkan alamat IP-nya dengan nama domain agar Google Cloud dapat menyediakan sertifikat SSL. Gunakan petunjuk penyedia DNS tentang cara mengaitkan alamat IP dengan nama DNS. Jalankan perintah berikut untuk memeriksa status penyediaan:

    1. Tampilkan alamat IP yang akan disiapkan di penyedia DNS:
      echo "Load Balancer ip address - $LB_IP"
      
    2. Setelah Anda menetapkan DNS, periksa apakah nama domain menghasilkan alamat IP atau tidak dengan menjalankan perintah berikut:
      dig $DOMAIN_NAME
      
    3. Dapatkan status penyediaan dengan menjalankan perintah berikut:
    gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
    

    Setelah Sertifikat SSL disediakan, Anda seharusnya dapat mengakses aplikasi menggunakan nama DNS.

API

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Ganti kode berikut:

    • web-app: awalan yang ditambahkan ke nama semua resource load balancer.
    • my-project: ID project Google Cloud.
    • us-central1: region tempat koneksi dan gateway akan di-deploy.
    • app.example.com: nama domain aplikasi Anda.
  2. Buat Grup Endpoint Jaringan (NEG) menggunakan perintah berikut:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups \
    -d "{ \
        'name': '${LB_PREFIX}-neg', \
        'network_endpoint_type': 'private-service-connect', \
        'psc_target_service': '${GATEWAY_URI_L7}' \
    }"
    

    Kolom opsional:

    • Tetapkan kolom network untuk menentukan URL jaringan endpoint jaringan di NEG. Jika tidak ditentukan, jaringan project default akan digunakan.
    • Tetapkan kolom subnetwork untuk menentukan URL subnetwork untuk endpoint jaringan di NEG. Jika tidak ditentukan, endpoint jaringan dapat menjadi bagian dari subnetwork apa pun di region tempat grup endpoint jaringan dibuat.
  3. Buat layanan backend berbasis NEG dan hubungkan ke lampiran layanan Private Service Connect dengan menjalankan perintah berikut:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices \
    -d "{ \
        'name': '${LB_PREFIX}-backend-service', \
        'service_protocol': 'HTTPS', \
        'port_name': 'https', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    
    gcurl -X PATCH https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service \
    -d "{ \
        'backends': \
        [{ \
            'group': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups/${LB_PREFIX}-neg' \
        }] \
    }"
    
  4. Buat sertifikat yang dikelola Google untuk domain Anda dengan menjalankan perintah berikut:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses \
    -d "{ \
        'name': '${LB_PREFIX}-static-ip', \
        'ip_version': 'IPV4' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates \
    -d "{ \
        'name': '${LB_PREFIX}-ssl-cert', \
        'managed': \
        { \
            'domains': '${DOMAIN_NAME}' \
        }, \
        'type': 'MANAGED' \
    }"
    
    LB_IP=$(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses/${LB_PREFIX}-static-ip | jq -r '.address')
    
  5. Buat Load Balancer Aplikasi eksternal berdasarkan backend dari langkah sebelumnya dengan menjalankan perintah berikut:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps \
    -d "{ \
        'name': '${LB_PREFIX}-map-https', \
        'default_service': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-proxy', \
        'url_map': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps/${LB_PREFIX}-map-https', \
        'ssl_certificate': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/forwardingRules \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-forwarding-rule', \
        target: 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies/${LB_PREFIX}-https-lb-proxy', \
        'ip_address': '${LB_IP}', \
        'port_range': '443-443', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    

    Setelah Load Balancer Aplikasi eksternal dibuat, aplikasi Anda dapat diakses melalui internet oleh alamat IP tersebut.

  6. Setelah Load Balancer Aplikasi eksternal dibuat, Anda harus mengaitkan alamat IP-nya dengan nama domain agar Google Cloud dapat menyediakan sertifikat SSL. Gunakan petunjuk penyedia DNS tentang cara mengaitkan alamat IP dengan nama DNS. Jalankan perintah berikut untuk memeriksa status penyediaan:

    1. Tampilkan alamat IP yang akan disiapkan di penyedia DNS:
      echo "Load Balancer ip address - $LB_IP"
      
    2. Setelah Anda menetapkan DNS, periksa apakah nama domain menghasilkan alamat IP atau tidak dengan menjalankan perintah berikut:
      dig $DOMAIN_NAME
      
    3. Dapatkan status penyediaan dengan menjalankan perintah berikut:
    echo $(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert \
    | jq -r '.name + " " + .managed.status + " " + (.managed.domainStatus | keys[]) + "=" + .managed.domainStatus[]')
    

    Setelah Sertifikat SSL disediakan, Anda seharusnya dapat mengakses aplikasi menggunakan nama DNS.

Mengaktifkan Identity-Aware Proxy

Ikuti dokumentasi Identity-Aware Proxy (IAP) untuk menyiapkan Identity-Aware Proxy. Setelah menyiapkan IAP, aktifkan IAP untuk layanan backend dengan menyelesaikan langkah-langkah berikut:

  1. Buka halaman IAP:
    IAP

  2. Di bagian REFERENSI HTTPS, cari $LB_PREFIX-backend-service. Guna mengaktifkan IAP untuk resource ini, klik tombol di kolom IAP. Di jendela Aktifkan IAP yang muncul, centang kotak untuk mengonfirmasi persyaratan konfigurasi resource ini, lalu klik AKTIFKAN untuk mengonfirmasi bahwa Anda ingin IAP mengamankan resource.

  3. Untuk mengizinkan pengguna mengakses aplikasi, Anda harus memberi mereka peran IAP-secured Web App User untuk project tersebut dengan menyelesaikan langkah-langkah berikut:

    1. Pilih kotak centang $LB_PREFIX-backend-service.
    2. Di Panel info, pilih TAMBAHKAN PRINSIP, lalu masukkan alamat email grup atau individu yang akan memiliki akses ke permohonan Anda.
    3. Di menu drop-down Select a role, pilih Cloud IAP > IAP-secured Web App User, lalu klik Save.

Aplikasi lokal Anda kini harus dipublikasikan ke internet dan dilindungi oleh BeyondCorp Enterprise.

Menyiapkan konektor aplikasi menggunakan Konsol Google Cloud

Selesaikan prosedur di bagian ini untuk men-deploy konektor aplikasi BeyondCorp Enterprise dengan menggunakan Konsol Google Cloud.

Masukkan detail permohonan Anda

Tambahkan detail permohonan Anda dengan menyelesaikan langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman IAP.
    Buka IAP

  2. Klik tombol CONNECT NEW APPLICATION, lalu pilih Connect via App Connector.

  3. Untuk Application name, masukkan nama aplikasi yang ingin diamankan.

  4. Untuk URL aplikasi yang dapat dilihat eksternal, masukkan URL yang dapat diakses secara publik agar pengguna dapat mengakses aplikasi Anda.

  5. Klik Next.

Menyiapkan koneksi ke Google Cloud

Selesaikan langkah-langkah berikut untuk membangun konektivitas antara Google Cloud dan lingkungan non-Google Cloud Anda.

  1. Klik tombol BUAT KONEKTOR APLIKASI, dan masukkan informasi berikut:

    • Nama konektor aplikasi: Nama untuk konektor.
    • Region: Region tempat gateway dan konektor koneksi di-deploy.
  2. Klik tombol CREATE.

  3. Ikuti petunjuk di panel Menyediakan virtual machine untuk men-deploy remote agent di VM Anda.

  4. Klik tombol UJI STATUS KONEKSI untuk menguji koneksi.

  5. Konfigurasikan konektor yang Anda buat di langkah sebelumnya dengan memasukkan informasi berikut di bagian Di mana Google Cloud dapat menemukan aplikasi Anda?:

    • Nama host internal: Alamat IP lokal atau FQDN yang menghosting aplikasi Anda.
    • Port: Nomor port yang akan dihubungkan ke aplikasi Anda.

Berikan akses ke aplikasi Anda (opsional)

  1. Untuk Akun utama baru, masukkan satu atau beberapa hal berikut:

    • Email Akun Google: pengguna@gmail.com
    • Google Grup: admin@googlegroups.com
    • Akun layanan: server@example.gserviceaccount.com
    • Domain Google Workspace: example.com
    • siapa saja: masukkan allUsers untuk memberi semua akses kepada semua pengguna
    • semua Akun Google: allAuthenticatedUsers untuk memberikan akses kepada pengguna yang login ke Akun Google
  2. Pilih satu atau beberapa tingkat akses, lalu klik BERIKUTNYA.

Publikasikan aplikasi Anda

  1. Untuk memublikasikan aplikasi Anda, klik tombol PUBLIKASIKAN APLIKASI secara aman.

  2. Setelah memublikasikan aplikasi dan menerima konfirmasi Aplikasi yang dipublikasikan dengan aman, Anda harus membuat data DNS untuk mengarahkan URL aplikasi eksternal Anda ke alamat IP proxy. Selesaikan langkah-langkah berikut:

    • Dari bagian LANGKAH 2 - Update DNS, salin alamat IP dari kolom IP address. Gunakan alamat untuk membuat data DNS dengan mengikuti petunjuk penyedia DNS tentang cara mengaitkan alamat IP dengan nama DNS.
  3. Setelah membuat data DNS, uji dengan mengklik tombol TEST. Anda akan menerima konfirmasi uji DNS lulus..

  4. Klik DONE.

Aktifkan IAP

  1. Buka halaman IAP.
    Buka IAP

  2. Dari daftar resource, temukan aplikasi Anda, lalu pilih tombol tersebut di kolom IAP.

  3. Pada dialog Turn on IAP yang muncul, pilih kotak centang Saya telah membaca persyaratan konfigurasi dan mengonfigurasi Layanan Backend saya sesuai dokumentasi, lalu klik AKTIFKAN.

Aplikasi lokal Anda kini harus dipublikasikan ke internet dan dilindungi oleh BeyondCorp Enterprise.

Membuat gateway aplikasi (Opsional)

Gateway aplikasi dibuat dan dikelola secara implisit saat Anda menghubungkan aplikasi menggunakan konektor aplikasi. Anda juga dapat membuat gateway aplikasi sendiri untuk mengatur resource koneksi aplikasi ke dalam grup. Traffic untuk koneksi aplikasi yang dihosting di gateway aplikasi yang berbeda diarahkan melalui infrastruktur virtual terpisah.

Untuk membuat dan menentukan gateway aplikasi, selesaikan langkah-langkah berikut.

gcloud CLI

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Ganti kode berikut:

    • CONNECTOR_NAME: nama konektor, yang ditentukan pada langkah sebelumnya.
    • CONNECTION_NAME: nama unik untuk koneksi.
    • GATEWAY_NAME: nama gateway aplikasi.
    • PROJECT_ID: ID project Google Cloud.
    • REGION: region tempat gateway aplikasi di-deploy, seperti us-central1.
    • APP_HOST: alamat IP lokal atau FQDN yang menghosting aplikasi Anda.
    • APP_PORT: nomor port yang akan dihubungkan ke aplikasi Anda.
  2. Buat gateway aplikasi dengan menjalankan perintah berikut:

    gcloud beta beyondcorp app gateways create $GATEWAY_NAME \
    --project=$PROJECT_ID --location=$REGION --display-name=$GATEWAY_NAME
    
  3. Tentukan gateway aplikasi dalam panggilan create connection dengan menjalankan perintah berikut:

    gcloud beta beyondcorp app connections create $CONNECTION_NAME \
    --project=$PROJECT_ID \
    --location=$REGION \
    --application-endpoint=$APP_ENDPOINT \
    --type=tcp \
    --connectors=$CONNECTOR_NAME \
    --display-name=$CONNECTION_NAME \
    --app-gateway=$GATEWAY_NAME
    

API

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Ganti kode berikut:

    • CONNECTOR_NAME: nama konektor, yang ditentukan pada langkah sebelumnya.
    • CONNECTION_NAME: nama unik untuk koneksi.
    • GATEWAY_NAME: nama gateway aplikasi.
    • PROJECT_ID: ID project Google Cloud.
    • REGION: region tempat gateway aplikasi di-deploy, seperti us-central1.
    • APP_HOST: alamat IP lokal atau FQDN yang menghosting aplikasi Anda.
    • APP_PORT: nomor port yang akan dihubungkan ke aplikasi Anda.
  2. Buat gateway aplikasi dengan menjalankan perintah berikut:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appGateways?app_gateway_id=${GATEWAY_NAME} \
    -d "{ \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    }"
    
  3. Tentukan gateway aplikasi dalam panggilan create connection dengan menjalankan perintah berikut:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
    'application_endpoint': \
    { \
    'host': '${APP_HOST}', \
    'port': '${APP_PORT}' \
    }, \
    'gateway': { 'app_gateway' : 'projects/${PROJECT_ID}/locations/${REGION}/appGateways/${GATEWAY_NAME}'}, \
    'connectors':['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    

Langkah berikutnya

Pemecahan masalah

Tidak dapat menemukan materi yang dibuat sebelumnya

Saat menggunakan gcloud CLI versi 392.0.0 atau yang lebih baru, gunakan resource default konektor aplikasi baru AppConnector dan AppConnection. Misalnya, gcloud alpha beyondcorp app connectors dan gcloud alpha beyondcorp app connections merujuk ke resource baru.

Untuk mengakses resource lama yang dibuat menggunakan versi gcloud CLI sebelum versi 392.0.0, gunakan kata kunci legacy. Misalnya, gcloud alpha beyondcorp app legacy connectors dan gcloud alpha beyondcorp app legacy connections merujuk ke resource lama.

Konfigurasi yang menggunakan resource lama tetap berfungsi untuk saat ini, tetapi tidak akan digunakan lagi di masa mendatang.

  • Ikuti prosedur dalam panduan ini untuk mengonfigurasi resource baru.
  • Jika konfigurasi Anda menggunakan resource lama, gunakan kata kunci legacy untuk menemukan resource tersebut dan menghapusnya. Buat ulang resource dengan mengikuti prosedur dalam dokumen ini.
  • Jika Anda memiliki konfigurasi tidak lengkap yang menggunakan resource lama, gunakan kata kunci legacy untuk menemukan resource tersebut dan menghapusnya. Buat ulang resource dengan mengikuti prosedur dalam dokumen ini.

Error TLS/SSL

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Browser menunjukkan error ERR_SSL_VERSION_OR_CIPHER_MISMATCH atau error TLS/SSL yang serupa dan tidak mengalihkan ke halaman login.

  • Verifikasi status sertifikat di halaman detail load balancer Google Cloud.

    CATATAN: Penyediaan sertifikat yang dikelola Google mungkin memerlukan waktu hingga 60 menit.

TLS error

Browser menampilkan error upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: TLS error atau error TLS/SSL yang serupa setelah mengalihkan ke halaman login.

  • Pastikan endpoint aplikasi yang digunakan di Koneksi adalah HTTPS.
  • Pastikan endpoint aplikasi dapat diakses dari VM remote agent menggunakan curl:

    curl https://$APP_ENDPOINT
    

    Anda mungkin perlu menggunakan flag -k jika sertifikat aplikasi Anda ditandatangani sendiri.

Memverifikasi konfigurasi firewall

Pastikan firewall antara remote agent dan internet mengizinkan koneksi keluar ke domain berikut:

Jenis Koneksi Domain Port
TCP raw.githubusercontent.com 443
TCP gcr.io 443
TCP *.googleapis.com 443
TCP tunnel.cloudproxy.app 443
TCP *.tunnel.cloudproxy.app 443
TCP accounts.google.com 443
TCP oauth2.googleapis.com 443

Mengubah konektor yang terkait dengan koneksi

gcloud

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    REGION=us-central1
    PROJECT_ID=my-project
    

    Ganti kode berikut:

    • my-connector: nama konektor. Ini juga dapat berupa daftar yang dipisahkan koma seperti connector1,connector2.
    • my-connection: nama koneksi yang akan diperbarui.
    • us-central1: region tempat koneksi di-deploy.
    • my-project: ID project Google Cloud.
  2. Untuk mengubah konektor yang terkait dengan koneksi, jalankan perintah berikut:

    gcloud alpha beyondcorp app connections update $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --connectors=$CONNECTOR_NAME
    

API

  1. Tetapkan variabel lingkungan yang diperlukan dengan menjalankan perintah berikut:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    REGION=us-central1
    PROJECT_ID=my-project
    

    Ganti kode berikut:

    • my-connector: nama konektor.
    • my-connection: nama koneksi yang akan diperbarui.
    • us-central1: region tempat koneksi di-deploy.
    • my-project: ID project Google Cloud.
  2. Untuk mengubah konektor yang terkait dengan koneksi, jalankan perintah berikut:

    gcurl -X PATCH \
    https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}?update_mask=connectors \
    -d "{ \
        'connectors': ['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    }"
    

    Anda dapat memverifikasi update dengan menjalankan perintah berikut dan memeriksa kolom connectors pada output:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}
    

Proxy

Dukungan untuk proxy diperkenalkan pada awal tahun 2024 dan memerlukan perubahan pada file bersistem BeyondCorp. Jika Anda menginstal remote agent lebih awal dari waktu ini dan ingin menggunakan proxy, instal ulang remote agent.

  • Pastikan daemon Docker dikonfigurasi dengan benar agar dapat berfungsi dengan proxy.

  • Pastikan variabel lingkungan proxy HTTP dan HTTPS telah ditetapkan dan keduanya menggunakan skema http://. Skema https:// dan skema lainnya tidak didukung.

  • Pastikan variabel lingkungan proxy diekspor ke subproses dengan menjalankan perintah env.

  • Hanya HTTP_PROXY, HTTPS_PROXY, NO_PROXY, dan huruf kecil yang setara yang didukung.

  • Jika Anda perlu memperbarui setelan proxy setelah penginstalan, perbarui variabel lingkungan di /var/beyondcorp/env/PROXY jika menggunakan pengguna beyondcorp default. Jika menggunakan pengguna kustom, update /home/$USER/.docker/config.json sesuai dengan petunjuk untuk mengonfigurasi klien Docker. Untuk menerapkan perubahan proxy, mulai ulang remote agent menggunakan perintah berikut:

    sudo systemctl restart beyondcorp
    

Alat diagnostik

run-post-install-checks

run-post-install-checks adalah skrip yang diinstal di /var/beyondcorp/scripts/ yang memverifikasi apakah remote agent Anda diinstal dengan benar, terdaftar, dan responsif. Setelah Anda berhasil membuat app connection dan menetapkannya ke remote agent (konektor), buka VM remote agent, lalu jalankan run-post-install-checks dengan perintah berikut:

sudo /var/beyondcorp/scripts/run-post-install-checks

Skrip akan mencetak pesan berhasil jika semuanya sudah sesuai.

run-diagnostics

run-diagnostics adalah skrip yang diinstal di /var/beyondcorp/scripts/ yang mendiagnosis masalah umum pada VM remote agent dan mencetak laporan yang dapat Anda bagikan kepada tim dukungan BeyondCorp Enterprise. Untuk menjalankan skrip diagnostik ini, jalankan perintah berikut:

sudo /var/beyondcorp/scripts/run-diagnostics

Laporan diagnostik ditulis ke konsol serta ke ./diagnostics-report.txt

CLI Agen Jarak Jauh

bce-connctl adalah antarmuka command line (CLI) admin remote agent untuk berinteraksi dengan remote agent secara lokal. CLI ini mendukung berbagai perintah, seperti untuk mendaftarkan remote agent, memeriksa status, dan menyetel nilai konfigurasi.

Perintah init

Anda dapat menggunakan perintah Init untuk melakukan inisialisasi remote agent dan membuat skrip untuk mendaftarkan agen.

Contoh:

bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME

Perintah status

Anda dapat menggunakan perintah Status untuk mengelola status remote agent.

  • Daftar: Gunakan perintah ini untuk menampilkan daftar status remote agent secara keseluruhan, serta status koneksi yang didukung oleh agen ini. Contoh: bce-connctl status list

Perintah konfigurasi

Anda dapat menggunakan perintah Config guna mengelola nilai konfigurasi untuk remote agent.

  • List: Gunakan perintah ini untuk menampilkan nilai konfigurasi remote agent. Contoh: bce-connctl config list
  • Setel: Gunakan perintah ini untuk menetapkan nilai konfigurasi remote agent. Contoh: bce-connctl config set <key> <value>

Perintah pendaftaran

Anda dapat menggunakan perintah Pendaftaran untuk mengelola pendaftaran remote agent.

  • Jelaskan: Gunakan perintah ini untuk mendapatkan status pendaftaran remote agent. Contoh: bce-connctl enrollment describe

    Saat skrip pendaftaran dari bce-connctl init berhasil diselesaikan, dan kunci publik berhasil diupload, statusnya adalah ENROLLED.

Bantuan

Anda dapat menambahkan flag -h atau --help ke perintah bce-connctl apa pun untuk mencetak informasi penggunaan.

bce-connctl init -h