Dokumen ini menjelaskan cara memperkuat keamanan cluster Google Distributed Cloud Anda.
Mengamankan container Anda menggunakan SELinux
Anda dapat mengamankan container dengan mengaktifkan SELinux, yang didukung untuk Red Hat Enterprise Linux (RHEL). Jika mesin host menjalankan RHEL dan Anda ingin mengaktifkan SELinux untuk cluster, Anda harus mengaktifkan SELinux di semua mesin host. Lihat mengamankan container menggunakan SELinux untuk mengetahui detailnya.
Menggunakan seccomp
untuk membatasi penampung
Mode komputasi aman (seccomp
) tersedia di Google Distributed Cloud versi 1.11 dan yang lebih tinggi. Menjalankan container dengan profil seccomp
akan meningkatkan keamanan cluster Anda karena membatasi panggilan sistem yang
boleh dilakukan oleh container ke kernel. Hal ini mengurangi kemungkinan
eksploitasi kerentanan {i>kernel<i}.
Profil seccomp
default berisi daftar panggilan sistem yang boleh dilakukan
penampung. Panggilan sistem apa pun yang tidak ada dalam daftar tidak diizinkan. seccomp
diaktifkan secara default di Google Distributed Cloud versi 1.11. Artinya, semua
container sistem dan workload pelanggan dijalankan dengan profil seccomp
default runtime container. Bahkan container dan workload yang tidak menentukan
profil seccomp
dalam file konfigurasinya tunduk pada pembatasan
seccomp
.
Cara menonaktifkan seccomp
di seluruh cluster atau pada workload tertentu
Anda dapat menonaktifkan seccomp
hanya selama pembuatan cluster atau upgrade cluster.
bmctl update
tidak dapat digunakan untuk menonaktifkan fitur ini. Jika ingin menonaktifkan
seccomp
dalam sebuah cluster, tambahkan bagian clusterSecurity
berikut ke
file konfigurasi cluster:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: example
namespace: cluster-example
spec:
...
clusterSecurity:
enableSeccomp: false
...
Jika beberapa workload Anda perlu menjalankan panggilan sistem
yang diblokir seccomp
secara default, Anda tidak perlu menonaktifkan seccomp
di
seluruh cluster. Sebagai gantinya, Anda dapat memilih workload tertentu untuk dijalankan di
unconfined mode
. Menjalankan workload di unconfined mode
akan membebaskan workload tersebut
dari batasan yang diberlakukan oleh profil seccomp
pada cluster
lainnya.
Untuk menjalankan container di unconfined mode
, tambahkan bagian securityContext
berikut
ke manifes Pod:
apiVersion: v1
kind: Pod
....
spec:
securityContext:
seccompProfile:
type: Unconfined
....
Jangan menjalankan container sebagai pengguna root
Secara default, proses dalam container dijalankan sebagai root
. Hal ini berpotensi menimbulkan masalah keamanan, karena jika proses keluar dari container, proses tersebut akan berjalan sebagai root
di mesin host. Oleh karena itu, sebaiknya jalankan semua beban kerja sebagai pengguna non-root.
Bagian berikut ini menjelaskan dua cara untuk menjalankan container sebagai pengguna non-root.
Metode #1: menambahkan instruksi USER
di Dockerfile
Metode ini menggunakan Dockerfile
untuk memastikan bahwa penampung tidak berjalan sebagai pengguna
root
. Pada Dockerfile
, Anda dapat menentukan pengguna mana yang harus menjalankan proses di dalam penampung. Cuplikan Dockerfile
berikut menunjukkan cara melakukannya:
....
#Add a user with userid 8877 and name nonroot
RUN useradd −u 8877 nonroot
#Run Container as nonroot
USER nonroot
....
Dalam contoh ini, perintah Linux useradd -u
membuat pengguna bernama nonroot
di dalam container. Pengguna ini memiliki ID pengguna (UID) 8877
.
Baris berikutnya di Dockerfile
menjalankan perintah USER nonroot
. Perintah ini
menentukan bahwa mulai bagian ini dalam gambar, perintah dijalankan sebagai pengguna
nonroot
.
Berikan izin ke UID 8877
agar proses container dapat dijalankan
dengan benar untuk nonroot
.
Metode #2: menambahkan kolom securityContext dalam file manifes Kubernetes
Metode ini menggunakan file manifes Kubernetes untuk memastikan bahwa container tidak dijalankan sebagai pengguna root
. Setelan keamanan ditetapkan untuk Pod, dan setelan keamanan tersebut kemudian diterapkan ke semua container di dalam Pod.
Contoh berikut menunjukkan kutipan file manifes untuk Pod tertentu:
apiVersion: v1
kind: Pod
metadata:
name: name-of-pod
spec:
securityContext:
runAsUser: 8877
runAsGroup: 8877
....
Kolom runAsUser
menentukan bahwa untuk setiap container di Pod, semua
proses dijalankan dengan ID pengguna 8877
. Kolom runAsGroup
menentukan bahwa proses ini
memiliki ID grup (GID) utama 8877
. Ingatlah untuk memberikan
izin yang diperlukan dan memadai ke 8877
UID agar proses
container dapat berjalan dengan benar.
Hal ini memastikan bahwa proses dalam container dijalankan sebagai 8877
UID, yang memiliki lebih sedikit hak istimewa daripada root.
Container sistem di Google Distributed Cloud membantu menginstal dan mengelola cluster.
UID dan GID yang digunakan oleh penampung ini dapat dikontrol oleh kolom
startUIDRangeRootlessContainers
dalam spesifikasi cluster. startUIDRangeRootlessContainers
adalah kolom opsional yang, jika tidak ditentukan, memiliki nilai 2000
. Nilai yang diizinkan untuk startUIDRangeRootlessContainers
adalah
1000
-57000
. Nilai startUIDRangeRootlessContainers
hanya dapat diubah
selama upgrade. Penampung sistem menggunakan UID dan GID dalam rentang
startUIDRangeRootlessContainers
hingga startUIDRangeRootlessContainers
+ 2999.
Contoh berikut menunjukkan kutipan file manifes untuk resource Cluster:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: name-of-cluster
spec:
clusterSecurity:
startUIDRangeRootlessContainers: 5000
...
Pilih nilai untuk startUIDRangeRootlessContainers
agar ruang UID dan GID
yang digunakan oleh penampung sistem tidak tumpang-tindih dengan yang ditetapkan ke beban
kerja pengguna.
Cara menonaktifkan mode root
Mulai rilis Google Distributed Cloud 1.10, container bidang kontrol
dan container sistem Kubernetes berjalan sebagai pengguna non-root secara default.
Google Distributed Cloud menetapkan UID dan GID kepada pengguna ini dalam rentang
2000
-4999
. Namun, penetapan ini dapat menyebabkan masalah jika UID dan
GID tersebut telah dialokasikan untuk proses yang berjalan di dalam lingkungan Anda.
Mulai rilis Google Distributed Cloud 1.11, Anda dapat menonaktifkan mode rootless saat mengupgrade cluster. Jika mode rootless dinonaktifkan, container bidang kontrol dan container sistem Kubernetes akan dijalankan sebagai pengguna root.
Untuk menonaktifkan mode rootless, lakukan langkah-langkah berikut:
Tambahkan bagian
clusterSecurity
berikut ke file konfigurasi cluster:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: example namespace: cluster-example spec: ... clusterSecurity: enableRootlessContainers: false ...
Upgrade cluster Anda. Untuk mengetahui detailnya, lihat Mengupgrade cluster.
Membatasi kemampuan workload dalam modifikasi mandiri
Workload Kubernetes tertentu, terutama workload sistem, memiliki izin untuk menjalankan modifikasi mandiri Sebagai contoh, beberapa workload melakukan penskalaan otomatis secara vertikal. Meskipun berguna, ini akan memungkinkan penyerang yang telah menyusupi node untuk menjelajahi cluster lebih dalam lagi. Misalnya, penyerang dapat membuat workload pada node melakukan modifikasi mandiri untuk dijalankan sebagai akun layanan dengan hak istimewa yang berada di namespace yang sama.
Idealnya, workload tidak boleh diberi izin untuk mengubah dirinya sendiri sejak awal. Jika memerlukan modifikasi mandiri, Anda dapat membatasi izin dengan menerapkan batasan Pemilah Komunikasi atau Pengontrol Kebijakan, seperti NoUpdateServiceAccount dari library open source Pemilah Komunikasi, yang memberikan beberapa solusi keamanan bermanfaat.
Saat men-deploy kebijakan, Anda biasanya perlu mengizinkan pengontrol yang
mengelola siklus proses cluster untuk mengabaikan kebijakan tersebut. Hal ini diperlukan agar
pengontrol dapat membuat perubahan pada cluster, seperti menerapkan upgrade
cluster. Misalnya, jika men-deploy kebijakan NoUpdateServiceAccount
di Google Distributed Cloud, Anda harus menetapkan parameter berikut di Constraint
:
parameters:
allowedGroups:
- system:masters
allowedUsers: []
Nonaktifkan port hanya baca kubelet
Mulai rilis 1.15.0, Google Distributed Cloud menonaktifkan port default
10255
, port hanya baca kubelet. Semua workload pelanggan yang dikonfigurasi untuk membaca data dari port kubelet 10255
yang tidak aman ini harus dimigrasikan untuk menggunakan port kubelet 10250 yang aman.
Hanya cluster yang dibuat dengan versi 1.15.0 atau lebih tinggi yang menonaktifkan port ini secara
default. Port hanya baca kubelet 10255
tetap dapat diakses untuk cluster
yang dibuat dengan versi yang lebih rendah dari 1.15.0, bahkan setelah cluster diupgrade ke
versi 1.15.0 atau yang lebih tinggi.
Perubahan ini dilakukan karena kubelet membocorkan informasi sensitivitas rendah melalui
port 10255
, yang tidak diautentikasi. Informasi ini mencakup informasi konfigurasi lengkap untuk semua Pod yang berjalan di Node, yang dapat berharga bagi penyerang. Metrik ini juga mengekspos informasi status dan metrik, yang dapat memberikan insight sensitif bisnis.
Penonaktifan port hanya baca kubelet direkomendasikan oleh CIS Kubernetes Benchmark.
Pemeliharaan
Memantau buletin keamanan dan mengupgrade cluster Anda merupakan langkah keamanan penting yang harus dilakukan setelah cluster aktif dan berjalan.
Memantau buletin keamanan
Tim keamanan GKE memublikasikan newsletter keamanan untuk mengetahui kerentanan dengan tingkat keparahan tinggi dan kritis.
Buletin ini mengikuti skema penomoran kerentanan Google Cloud umum dan ditautkan dari halaman buletin Google Cloud utama dan catatan rilis Google Distributed Cloud.
Saat tindakan pelanggan diperlukan untuk mengatasi kerentanan yang tinggi dan kritis ini, Google akan menghubungi pelanggan melalui email. Selain itu, Google mungkin juga menghubungi pelanggan dengan kontrak dukungan melalui saluran dukungan.
Untuk mengetahui informasi lebih lanjut tentang cara Google mengelola kerentanan dan patch keamanan untuk GKE dan GKE Enterprise, lihat Patching keamanan.
Upgrade cluster
Kubernetes secara rutin memperkenalkan fitur keamanan baru dan menyediakan patch keamanan. Rilis Google Distributed Cloud menggabungkan peningkatan keamanan Kubernetes untuk mengatasi kerentanan keamanan yang dapat memengaruhi cluster Anda.
Anda bertanggung jawab untuk terus memperbarui cluster Google Distributed Cloud. Untuk setiap rilis, tinjau catatan rilis. Untuk meminimalkan risiko keamanan pada cluster Anda, rencanakan update ke rilis patch baru setiap bulan dan versi minor setiap empat bulan.
Salah satu dari banyak keuntungan mengupgrade cluster adalah cluster tersebut otomatis memperbarui file kubeconfig cluster. File kubeconfig mengautentikasi
pengguna ke cluster. File kubeconfig ditambahkan ke direktori cluster Anda saat
Anda membuat cluster dengan bmctl
. Nama dan jalur default-nya adalah
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
.
Saat Anda mengupgrade cluster, file kubeconfig cluster tersebut akan diperpanjang secara otomatis. Jika tidak, masa berlaku file kubeconfig akan berakhir satu tahun setelah dibuat.
Untuk mendapatkan informasi tentang cara mengupgrade cluster, lihat mengupgrade cluster.
Menggunakan Kontrol Layanan VPC dengan Cloud Interconnect atau Cloud VPN
Cloud Interconnect menyediakan koneksi latensi rendah dan ketersediaan tinggi yang memungkinkan Anda mentransfer data dengan andal antara mesin bare metal lokal dan jaringan Virtual Private Cloud (VPC) Google Cloud. Untuk mempelajari Cloud Interconnect lebih lanjut, lihat Ringkasan penyediaan Dedicated Interconnect.
Cloud VPN menghubungkan jaringan peer Anda dengan aman ke jaringan Virtual Private Cloud (VPC) Anda melalui koneksi IPsec VPN. Untuk mempelajari Cloud VPN lebih lanjut, lihat Ringkasan Cloud VPN.
Kontrol Layanan VPC dapat digunakan dengan Cloud Interconnect atau Cloud VPN untuk memberikan keamanan tambahan Kontrol Layanan VPC membantu memitigasi risiko pemindahan data yang tidak sah. Dengan menggunakan Kontrol Layanan VPC, Anda dapat menambahkan project ke perimeter layanan yang melindungi resource dan layanan dari permintaan yang berasal dari luar perimeter. Untuk mempelajari perimeter layanan lebih lanjut, lihat Detail dan konfigurasi perimeter layanan.
Untuk melindungi Google Distributed Cloud sepenuhnya, Anda harus menggunakan Terbatas VIP dan menambahkan API berikut ke perimeter layanan:
- Artifact Registry API (
artifactregistry.googleapis.com
) - API Resource Manager (
cloudresourcemanager.googleapis.com
) - API Compute Engine (
compute.googleapis.com
) - Hubungkan gateway API (
connectgateway.googleapis.com
) - Google Container Registry API (
containerregistry.googleapis.com
) - GKE Connect API (
gkeconnect.googleapis.com
) - GKE Hub API (
gkehub.googleapis.com
) - GKE On-Prem API (
gkeonprem.googleapis.com
) - Identity and Access Management (IAM) API (
iam.googleapis.com
) - Cloud Logging API (
logging.googleapis.com
) - Cloud Monitoring API (
monitoring.googleapis.com
) - Config Monitoring untuk Ops API (
opsconfigmonitoring.googleapis.com
) - API Kontrol Layanan (
servicecontrol.googleapis.com
) - Cloud Storage API (
storage.googleapis.com
)
Saat Anda menggunakan bmctl
untuk membuat atau mengupgrade cluster, gunakan tanda --skip-api-check
untuk mengabaikan panggilan Service Usage API (serviceusage.googleapis.com
).
Service Usage API tidak didukung oleh Kontrol Layanan VPC.