Memverifikasi koneksi Google ke panel kontrol GKE


Halaman ini menjelaskan cara memverifikasi koneksi yang dibuat oleh personel Google ke bidang kontrol cluster Google Kubernetes Engine (GKE) Anda dengan menghubungkan log GKE dengan log Transparansi Akses.

Log Transparansi Akses mencatat tindakan yang dilakukan staf Google saat mengakses konten Anda. Panduan ini ditujukan untuk administrator keamanan yang ingin verifikasi tambahan atas konten log Transparansi Akses dan izin Persetujuan Akses terkait dengan menghubungkannya ke sumber logging tambahan dari GKE. Verifikasi ini sepenuhnya bersifat opsional dan tidak diperlukan untuk mengamankan panel kontrol Anda.

Pastikan Anda sudah memahami konsep berikut:

Halaman ini menjelaskan salah satu bagian dari serangkaian fitur platform kontrol opsional di GKE yang memungkinkan Anda melakukan tugas seperti memverifikasi postur keamanan platform kontrol atau mengonfigurasi enkripsi dan penandatanganan kredensial di platform kontrol menggunakan kunci yang Anda kelola. Untuk mengetahui detailnya, lihat Tentang otoritas bidang kontrol GKE.

Secara default, Google Cloud menerapkan berbagai langkah keamanan ke bidang kontrol terkelola. Halaman ini menjelaskan kemampuan opsional yang memberi Anda visibilitas atau kontrol lebih besar atas panel kontrol GKE.

Tentang akses Google ke instance bidang kontrol cluster

Selama sesi pemecahan masalah atau untuk alasan bisnis yang dibenarkan lainnya, personel Google seperti engineer keandalan situs dan karyawan Layanan Pelanggan Cloud mungkin memerlukan akses administratif ke instance Compute Engine yang menghosting platform kontrol Anda. Bergantung pada paket dukungan dan konfigurasi Layanan Pelanggan Anda, Transparansi Akses memberikan logging audit mendetail untuk akses administratif ini. Persetujuan Akses memungkinkan Anda mewajibkan persetujuan eksplisit sebelum personel Google dapat mengakses resource Anda. Untuk mempelajari lebih lanjut akses administratif dan alat yang dapat Anda gunakan untuk memberikan otorisasi akses dan mencatat perubahan, lihat Akses administratif untuk karyawan Google.

Log akses panel kontrol

Saat Anda mengaktifkan otoritas panel kontrol GKE, GKE akan membuat log akses panel kontrol yang dapat Anda gunakan secara opsional untuk melakukan referensi silang log audit yang dihasilkan oleh Transparansi Akses dan oleh Persetujuan Akses. GKE menambahkan log akses control plane ke bucket _Default di Logging untuk mencatat koneksi jaringan masuk dan peristiwa SSH tertentu di instance control plane Anda. Anda harus mengaktifkan otoritas panel kontrol GKE di project untuk membuat log akses panel kontrol untuk cluster Anda.

GKE membuat log akses berikut untuk bidang kontrol:

Volume log koneksi bidang kontrol bergantung pada faktor seperti jumlah node dalam cluster, jumlah instance bidang kontrol (cluster regional memiliki lebih banyak instance bidang kontrol daripada cluster zona), dan seberapa sering beban kerja Anda memanggil server Kubernetes API. Volume log SSH kecil dan bergantung pada jumlah mulai ulang node.

Untuk memverifikasi koneksi ke platform kontrol, Anda akan menemukan log akses platform kontrol untuk cluster dan mencocokkan log tersebut dengan log audit dari Transparansi Akses dan Persetujuan Akses. Dengan demikian, Anda dapat mengonfirmasi bahwa semua koneksi SSH ke instance platform kontrol Anda adalah hasil dari akses administratif yang diotorisasi oleh personel Google. Saat Anda mengaktifkan otoritas bidang kontrol GKE untuk cluster, semua akses SSH oleh personel Google ke bidang kontrol Anda bersifat non-interaktif, yang berarti setiap koneksi SSH akan menjalankan satu perintah yang Anda izinkan.

Harga

Pertimbangan harga berikut berlaku:

  • Log akses bidang kontrol tunduk pada harga Logging.
  • Transparansi Akses disertakan dengan langganan Layanan Pelanggan tertentu. Untuk mengetahui detailnya, lihat Harga Transparansi Akses.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.

Persyaratan

Log akses bidang kontrol memerlukan GKE versi 1.31.1-gke.1846000 atau yang lebih baru.

Peran dan izin yang diperlukan

Untuk mendapatkan izin yang diperlukan guna mengaktifkan pembuatan log serta mengakses dan memproses log, minta administrator untuk memberi Anda peran IAM berikut:

  • Aktifkan logging koneksi bidang kontrol di cluster Anda: Admin Cluster Kubernetes Engine (roles/container.clusterAdmin) di project Anda
  • Mengakses log dan menggunakan Logs Explorer dan Log Analytics: Logs Viewer (roles/logging.viewer) di project Anda
  • Aktifkan Transparansi Akses untuk organisasi: Access Transparency Admin (roles/axt.admin) di organisasi Anda

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Mengaktifkan log akses bidang kontrol cluster GKE

Anda dapat mengaktifkan pembuatan log akses bidang kontrol untuk cluster mode Autopilot dan mode Standar dengan mengaktifkan komponen logging yang sesuai. Untuk mengetahui informasi selengkapnya tentang jenis log bidang kontrol, lihat Melihat log GKE.

Nama komponen logging yang didukung untuk log akses bidang kontrol adalah sebagai berikut:

  • Log SSH bidang kontrol: KCP_SSHD
  • Log koneksi panel kontrol: KCP_CONNECTION

Mengaktifkan log akses bidang kontrol di cluster baru

Contoh berikut membuat cluster mode Autopilot dengan kedua jenis log akses panel kontrol diaktifkan. Untuk hanya mengaktifkan satu jenis log akses control plane, hapus nama komponen yang sesuai dari perintah.

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --logging=SYSTEM,KCP_SSHD,KCP_CONNECTION

Ganti kode berikut:

  • CLUSTER_NAME: nama untuk cluster baru.
  • LOCATION: lokasi untuk membuat cluster.

Untuk menentukan komponen logging saat Anda membuat cluster menggunakan GKE API, dalam metode projects.locations.clusters.create, tetapkan nilai yang sesuai dalam objek LoggingConfig dari resource Cluster.

Mengaktifkan log akses bidang kontrol di cluster yang ada

Untuk mengupdate konfigurasi logging cluster yang ada guna mengaktifkan log akses bidang kontrol, Anda harus melakukan hal berikut:

  1. Temukan komponen logging yang ada yang digunakan cluster Anda.
  2. Identifikasi nilai yang sesuai untuk ditentukan dalam tanda --logging di gcloud CLI agar komponen logging tersebut tetap diaktifkan.
  3. Perbarui konfigurasi logging cluster untuk mengaktifkan log akses bidang kontrol bersama konfigurasi logging yang ada.

Nilai yang Anda tentukan untuk tanda --logging dalam perintah gcloud container clusters update berbeda dengan nilai yang Anda lihat saat mendeskripsikan cluster.

  1. Periksa konfigurasi logging cluster yang ada:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    Outputnya mirip dengan hal berikut ini:

    SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
    
  2. Identifikasi nilai gcloud CLI untuk flag --logging yang sesuai dengan konfigurasi komponen logging dari output langkah sebelumnya. Untuk mengetahui daftar nilai gcloud CLI yang sesuai dengan komponen logging tertentu, lihat tabel Log yang tersedia.

  3. Perbarui konfigurasi logging dengan log akses panel kontrol:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --logging=SYSTEM,EXISTING_LOGS,KCP_ACCESS_LOGS
    

    Ganti kode berikut:

    • EXISTING_LOGS: daftar komponen logging yang dipisahkan koma yang sudah digunakan cluster Anda. Pastikan Anda menentukan nilai gcloud CLI yang sesuai dengan komponen logging ini, yang diambil dari tabel Log yang tersedia.
    • KCP_ACCESS_LOGS: daftar yang dipisahkan koma dari jenis log akses bidang kontrol yang akan diaktifkan untuk cluster, sebagai berikut:

      • Untuk log SSH bidang kontrol, tentukan KCP_SSHD.
      • Untuk log koneksi bidang kontrol, tentukan KCP_CONNECTION.

Untuk menentukan komponen logging saat Anda mengupdate cluster menggunakan GKE API, dalam metode projects.locations.clusters.update, tetapkan nilai komponen logging dan baru yang ada di objek LoggingConfig dari resource ClusterUpdate.

Contoh update cluster untuk mengaktifkan log akses bidang kontrol

Pertimbangkan cluster yang perintah gcloud container clusters describe-nya memiliki konfigurasi logging berikut:

SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER

Perintah update cluster berikut mengaktifkan kedua jenis log akses control plane sekaligus mempertahankan konfigurasi log yang ada untuk contoh cluster ini:

gcloud container clusters update example-cluster \
    --location=us-central1 \
    --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION

Melakukan referensi silang log akses panel kontrol dengan log Transparansi Akses

Untuk memverifikasi akses bidang kontrol untuk cluster, dapatkan log koneksi bidang kontrol, log SSH bidang kontrol, dan log Transparansi Akses untuk cluster tersebut:

  1. Di konsol Google Cloud, buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Untuk mendapatkan semua log untuk cluster tertentu, termasuk log akses bidang kontrol dan log Transparansi Akses, jalankan kueri berikut:

    (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection"
    resource.labels.cluster_name="CLUSTER_NAME"
    jsonPayload.connection.dest_port="22")
    OR
    (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-sshd"
    resource.labels.cluster_name="CLUSTER_NAME")
    OR
    (logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Faccess_transparency"
    json_payload.accesses.methodName="GoogleInternal.SSH.Master"
    json_payload.accesses.resourceName="//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME")
    

Output akan menampilkan semua jenis log berikut untuk cluster Anda:

  • Log Transparansi Akses
  • Log koneksi bidang kontrol
  • Log SSH untuk setiap sesi SSH

Melakukan pemeriksaan verifikasi

Pemeriksaan verifikasi utama Anda adalah apakah Anda melihat semua jenis log untuk koneksi SSH saat menjalankan kueri Logging dari bagian sebelumnya. Setiap log Transparansi Akses harus memiliki log koneksi panel kontrol yang sesuai dan satu atau beberapa log SSH. Log ini ditujukan untuk tindakan yang dilakukan manusia di instance platform kontrol Anda, sehingga volume log harus kecil.

Secara opsional, Anda dapat melakukan pemeriksaan tambahan berikut pada konten log:

  1. Untuk setiap log SSH panel kontrol, periksa apakah log Transparansi Akses ada dalam periode 15 menit sebelum stempel waktu log SSH. Jangka waktu ini menjelaskan penutupan sesi SSH terakhir yang terjadi beberapa menit setelah koneksi awal dicatat ke dalam log oleh Transparansi Akses.
  2. Untuk setiap log koneksi panel kontrol, periksa apakah log Transparansi Akses ada dalam periode 5 menit sebelum stempel waktu log koneksi panel kontrol.
  3. Jika Anda menggunakan Persetujuan Akses untuk cluster, periksa apakah setiap log Transparansi Akses memiliki kolom accessApprovals yang sesuai. Lakukan referensi silang kolom ini dengan permintaan Persetujuan Akses untuk cluster Anda.

    Untuk mendapatkan permintaan Persetujuan Akses untuk project Anda, lihat Melihat histori permintaan Persetujuan Akses. Persetujuan Akses mungkin dikenai pengecualian.

  4. Secara opsional, validasi tanda tangan Persetujuan Akses yang ditandatangani yang terkait dengan log Transparansi Akses.

Detail log akses bidang kontrol

Bagian ini memberikan detail dan contoh log akses bidang kontrol yang dibuat GKE saat personel Google terhubung ke instance bidang kontrol Anda.

Log koneksi panel kontrol

GKE menambahkan log koneksi panel kontrol untuk setiap koneksi jaringan masuk baru ke instance panel kontrol. Log ini mencakup detail tertentu seperti berikut:

  • Alamat IP dan port sumber dan tujuan
  • Protokol dan arah koneksi

Contoh berikut adalah log koneksi bidang kontrol:

{
  insertId: "z1eq8wonio335a5h",
  jsonPayload: {
    instance: {
      vm_name: "gke-dee49f0d6fa34ce3a2ac-f513-d195-vm",
      zone: "us-central1-c"
    },
    cluster: {
      cluster_id: "CLUSTER_ID",
      cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1-c/clusters/CLUSTER_NAME"
    },
    connection: {
      state: "NEW",
      src_ip: "192.0.2.100",
      src_port: 32774,
      dest_ip: "203.0.113.12",
      dest_port: 22,
      direction: "INGRESS"
      protocol: "TCP"
    },
  }
  logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection",
  receiveTimestamp: "2024-04-11T04:08:01.883070399Z",
  resource: {
    labels: {
      cluster_name: "CLUSTER_NAME",
      location: "us-central1-c",
      project_id: "PROJECT_ID"
    }
    type: "gke_cluster",
  }
  severity: "NOTICE",
  timestamp: "2024-04-11T04:07:59.019330Z"
}

Kolom berikut dalam entri log relevan untuk memverifikasi tindakan Google:

  • cluster.cluster_urn: ID resource yang memenuhi syarat sepenuhnya dari cluster. ID ini memiliki format //container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, dengan variabel berikut:

    • PROJECT_NUMBER: nomor project numerik untuk project cluster Anda.
    • LOCATION: lokasi Google Cloud cluster Anda.
    • CLUSTER_NAME: nama cluster Anda.
  • connection: Detail tentang upaya koneksi. Kolom ini memiliki informasi berikut:

    • state: status koneksi. Untuk koneksi baru, nilainya adalah NEW.
    • src_ip: alamat IP sumber koneksi.
    • src_port: nomor port sumber koneksi.
    • dest_ip: alamat IP internal VM platform kontrol Anda.
    • dest_port: nomor port tujuan.
    • direction: arah koneksi. Nilainya selalu INGRESS.
    • protocol: protokol IP, seperti TCP.

Log SSH bidang kontrol

GKE menambahkan log SSH panel kontrol untuk peristiwa yang terkait dengan koneksi SSH ke instance panel kontrol. GKE mencatat peristiwa berikut:

  • Kunci SSH diterima untuk pengguna
  • Status sesi berubah dari 0 menjadi 1, yang menunjukkan bahwa pengguna berhasil login
  • Sesi SSH dibuka
  • Sesi SSH ditutup
  • Status sesi berubah dari 1 menjadi 0, yang menunjukkan bahwa pengguna logout
  • Sesi SSH gagal

Misalnya, log SSH bidang kontrol berikut adalah untuk sesi SSH yang dibuka:

{
  insertId: "8llczemdulwbbwpa",
  jsonPayload: {
    instance: {
      vm_name: "gke-06cb920c609941c0a5ce-6840-40e9-vm",
      zone: "us-central1-c"
    },
    cluster: {
      cluster_id: "891e6d12889747748c1ac16ffcc6cb7c0a96450b36864eb680917c119fd801d0",
      cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1/clusters/CLUSTER_NAME",
    },
    message: "pam_unix(sshd:session): session opened for user REDACTED by (uid=0)",
  },
  logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-ssh",
  receiveTimestamp: "2024-04-09T13:21:55.231436462Z"
  resource: {
    type: "gke_cluster",
    labels: {
      cluster_name: "CLUSTER_NAME",
      location: "us-central1",
      project_id: "PROJECT_ID"
    }
  },
  severity: "NOTICE",
  timestamp: "2024-04-09T13:21:50.742246Z"
}

Kolom berikut dalam entri log relevan untuk memverifikasi tindakan Google:

  • cluster.cluster_urn: ID resource yang memenuhi syarat sepenuhnya dari cluster. ID ini memiliki format //container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, dengan variabel berikut:

    • PROJECT_NUMBER: nomor project numerik untuk project cluster Anda.
    • LOCATION: lokasi Google Cloud cluster Anda.
    • CLUSTER_NAME: nama cluster Anda.
  • message: Detail tentang koneksi SSH.

Menonaktifkan log akses bidang kontrol

  1. Untuk melihat jenis log tertentu yang digunakan cluster Anda, jalankan perintah berikut:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    Outputnya mirip dengan hal berikut ini:

    SYSTEM_COMPONENTS,WORKLOADS,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
    
  2. Untuk menonaktifkan log akses panel kontrol untuk cluster, jalankan perintah berikut:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

Pada flag --logging, tentukan komponen logging dari output perintah sebelumnya. Contoh perintah ini menonaktifkan log akses control plane, tetapi membuat log komponen control plane lainnya tetap diaktifkan.

Untuk menonaktifkan komponen logging menggunakan GKE API, tetapkan nilai yang sesuai dalam objek LoggingConfig dari resource ClusterUpdate di metode projects.locations.clusters.update.

Langkah selanjutnya