Kontrol pencegahan untuk konfigurasi resource yang dapat diterima

Last reviewed 2023-12-20 UTC

Sebaiknya tentukan batasan kebijakan yang menerapkan konfigurasi resource yang dapat diterima dan mencegah konfigurasi berisiko. Blueprint ini menggunakan kombinasi batasan kebijakan organisasi dan validasi infrastruktur sebagai kode (IaC) di pipeline Anda. Kontrol ini mencegah pembuatan resource yang tidak memenuhi pedoman kebijakan Anda. Menerapkan kontrol ini sejak awal dalam desain dan build workload membantu Anda menghindari pekerjaan perbaikan di lain waktu.

Batasan kebijakan organisasi

Layanan Kebijakan Organisasi menerapkan batasan untuk memastikan bahwa konfigurasi resource tertentu tidak dapat dibuat di organisasi Google Cloud Anda, bahkan oleh seseorang dengan peran IAM yang cukup istimewa.

Blueprint menerapkan kebijakan di node organisasi sehingga kontrol ini diwarisi oleh semua folder dan project dalam organisasi. Kumpulan kebijakan ini dirancang untuk mencegah konfigurasi berisiko tinggi tertentu, seperti mengekspos VM ke internet publik atau memberikan akses publik ke bucket penyimpanan, kecuali jika Anda sengaja mengizinkan pengecualian terhadap kebijakan.

Tabel berikut memperkenalkan batasan kebijakan organisasi yang diterapkan dalam blueprint:

Batasan kebijakan organisasi Deskripsi

compute.disableNestedVirtualization

Virtualisasi bertingkat di VM Compute Engine dapat menghindari pemantauan dan alat keamanan lainnya untuk VM Anda jika dikonfigurasi dengan buruk. Batasan ini mencegah pembuatan virtualisasi bertingkat.

compute.disableSerialPortAccess

Peran IAM seperti compute.instanceAdmin memungkinkan akses dengan hak istimewa ke port serial instance menggunakan kunci SSH. Jika kunci SSH terekspos, penyerang dapat mengakses port serial dan mengabaikan kontrol jaringan dan firewall. Batasan ini mencegah akses port serial.

compute.disableVpcExternalIpv6

Subnet IPv6 eksternal dapat terekspos ke akses internet yang tidak sah jika dikonfigurasi dengan buruk. Batasan ini mencegah pembuatan subnet IPv6 eksternal.

compute.requireOsLogin

Perilaku default penetapan kunci SSH dalam metadata dapat mengizinkan akses jarak jauh yang tidak sah ke VM jika kunci terekspos. Batasan ini mewajibkan penggunaan Login OS, bukan kunci SSH berbasis metadata.

compute.restrictProtocolForwardingCreationForTypes

Penerusan protokol VM untuk alamat IP eksternal dapat menyebabkan traffic keluar internet yang tidak sah jika penerusan dikonfigurasi dengan buruk. Batasan ini memungkinkan penerusan protokol VM hanya untuk alamat internal.

compute.restrictXpnProjectLienRemoval

Menghapus project host VPC Bersama dapat mengganggu semua project layanan yang menggunakan resource jaringan. Batasan ini mencegah penghapusan project host VPC Bersama secara tidak sengaja atau berbahaya dengan mencegah penghapusan lien project pada project ini.

compute.setNewProjectDefaultToZonalDNSOnly

Setelan lama untuk DNS internal global (seluruh project) tidak direkomendasikan karena mengurangi ketersediaan layanan. Batasan ini mencegah penggunaan setelan lama.

compute.skipDefaultNetworkCreation

Jaringan VPC default dan aturan firewall VPC default yang terlalu permisif dibuat di setiap project baru yang mengaktifkan Compute Engine API. Batasan ini akan melewati pembuatan jaringan default dan aturan firewall VPC default.

compute.vmExternalIpAccess

Secara default, VM dibuat dengan alamat IPv4 eksternal yang dapat menyebabkan akses internet tidak sah. Batasan ini mengonfigurasi daftar yang diizinkan kosong untuk alamat IP eksternal yang dapat digunakan VM dan menolak semua alamat IP lainnya.

essentialcontacts.allowedContactDomains

Secara default, Kontak Penting dapat dikonfigurasi untuk mengirim notifikasi tentang domain Anda ke domain lain. Batasan ini mewajibkan bahwa hanya alamat email di domain yang disetujui yang dapat ditetapkan sebagai penerima untuk Kontak Penting.

iam.allowedPolicyMemberDomains

Secara default, izinkan kebijakan dapat diberikan ke Akun Google apa pun, termasuk akun yang tidak dikelola, dan akun milik organisasi eksternal. Batasan ini memastikan bahwa kebijakan izin di organisasi Anda hanya dapat diberikan ke akun terkelola dari domain Anda sendiri. Secara opsional, Anda dapat mengizinkan domain tambahan.

iam.automaticIamGrantsForDefaultServiceAccounts

Secara default, akun layanan default secara otomatis diberi peran yang terlalu permisif. Batasan ini mencegah pemberian peran IAM otomatis ke akun layanan default.

iam.disableServiceAccountKeyCreation

Kunci akun layanan adalah kredensial persisten berisiko tinggi, dan dalam sebagian besar kasus, alternatif yang lebih aman untuk kunci akun layanan dapat digunakan. Batasan ini mencegah pembuatan kunci akun layanan.

iam.disableServiceAccountKeyUpload

Mengupload materi kunci akun layanan dapat meningkatkan risiko jika materi kunci terekspos. Batasan ini mencegah upload kunci akun layanan.

sql.restrictAuthorizedNetworks

Instance Cloud SQL dapat terekspos ke akses internet yang tidak diautentikasi jika instance dikonfigurasi untuk menggunakan jaringan resmi tanpa Proxy Auth Cloud SQL. Kebijakan ini mencegah konfigurasi jaringan yang diotorisasi untuk akses database dan memaksa penggunaan Proxy Auth Cloud SQL.

sql.restrictPublicIp

Instance Cloud SQL dapat terekspos ke akses internet yang tidak diautentikasi jika instance dibuat dengan alamat IP publik. Batasan ini mencegah alamat IP publik di instance Cloud SQL.

storage.uniformBucketLevelAccess

Secara default, objek di Cloud Storage dapat diakses melalui Daftar Kontrol Akses (ACL) lama, bukan IAM, yang dapat menyebabkan kontrol akses tidak konsisten dan eksposur yang tidak disengaja jika salah dikonfigurasi. Akses ACL lama tidak terpengaruh oleh batasan iam.allowedPolicyMemberDomains. Batasan ini menerapkan bahwa akses hanya dapat dikonfigurasi melalui akses level bucket seragam IAM, bukan ACL lama.

storage.publicAccessPrevention

Bucket Cloud Storage dapat terekspos ke akses internet yang tidak diautentikasi jika salah dikonfigurasi. Batasan ini mencegah ACL dan izin IAM yang memberikan akses ke allUsers dan allAuthenticatedUsers.

Kebijakan ini adalah titik awal yang kami rekomendasikan untuk sebagian besar pelanggan dan sebagian besar skenario, tetapi Anda mungkin perlu mengubah batasan kebijakan organisasi untuk menampung jenis beban kerja tertentu. Misalnya, beban kerja yang menggunakan bucket Cloud Storage sebagai backend untuk Cloud CDN guna menghosting resource publik diblokir oleh storage.publicAccessPrevention, atau aplikasi Cloud Run yang ditampilkan ke publik dan tidak memerlukan autentikasi diblokir oleh iam.allowedPolicyMemberDomains. Dalam kasus ini, ubah kebijakan organisasi di level folder atau project untuk mengizinkan pengecualian yang sempit. Anda juga dapat menambahkan batasan secara bersyarat ke kebijakan organisasi dengan menentukan tag yang memberikan pengecualian atau penerapan untuk kebijakan, lalu menerapkan tag tersebut ke project dan folder.

Untuk batasan tambahan, lihat batasan yang tersedia dan batasan kustom.

Validasi pra-deployment infrastruktur sebagai kode

Blueprint ini menggunakan pendekatan GitOps untuk mengelola infrastruktur, yang berarti bahwa semua perubahan infrastruktur diimplementasikan melalui infrastruktur-as-code (IaC) yang dikontrol versi dan dapat divalidasi sebelum di-deploy.

Kebijakan yang diterapkan dalam blueprint menentukan konfigurasi resource yang dapat diterima dan dapat di-deploy oleh pipeline Anda. Jika kode yang dikirim ke repositori GitHub Anda tidak lulus pemeriksaan kebijakan, tidak ada resource yang di-deploy.

Untuk mengetahui informasi tentang cara penggunaan pipeline dan cara kontrol diterapkan melalui otomatisasi CI/CD, lihat metodologi deployment.

Langkah selanjutnya