Pola untuk pengujian kepatuhan otomatis menggunakan Chef InSpec

Last reviewed 2023-11-24 UTC

Dokumen ini menjelaskan pola untuk mengotomatiskan pemeriksaan kebijakan dan kepatuhan untuk resource Google Cloud Anda menggunakan Chef InSpec, framework pengujian infrastruktur open source. Dokumen ini ditujukan untuk arsitek an praktisi DevOps yang ingin mengintegrasikan pengujian kepatuhan berkelanjutan ke dalam alur kerja pengembangan software mereka.

Kebijakan dan kepatuhan di Google Cloud

Google Cloud menyediakan berbagai alat untuk membantu Anda menerapkan dan mengaudit serta kebijakan dan persyaratan kepatuhan:

Layanan Deskripsi
Hierarki resource

Anda dapat menggunakan hierarki resource untuk memetakan struktur operasional perusahaan ke Google Cloud, serta mengelola kontrol akses dan izin untuk grup resource terkait. Anda dapat menentukan grup resource terkait, dan menerapkan kontrol yang konsisten untuk semua resource dalam grup tersebut.

Misalnya, Anda dapat mengelompokkan semua project Google Cloud yang tunduk pada kepatuhan Standar Keamanan Data Industri Kartu Pembayaran (PCI DSS) ke dalam folder tertentu. Selanjutnya, Anda dapat menerapkan kontrol yang relevan ke semua project di folder tersebut.

Organization Policy Service

Anda menggunakan Layanan Kebijakan Organisasi untuk menentukan batasan yang membatasi ketersediaan atau fungsi layanan Google Cloud. Misalnya, Anda dapat menggunakan batasan lokasi resource untuk membatasi kumpulan region tempat resource berbasis lokasi seperti virtual machine dapat dibuat.

Layanan Kebijakan Organisasi bekerja sama dengan hierarki resource. Anda dapat menerapkan kebijakan organisasi pada berbagai tingkat hierarki. Misalnya, Anda dapat menentukan kebijakan organisasi untuk project yang tunduk pada kepatuhan PCI dan menerapkan kebijakan tersebut ke folder PCI.

Security Command Center

Anda dapat menggunakan Security Command Center untuk visibilitas terpusat semua resource Google Cloud. Security Command Center otomatis menganalisis resource cloud Anda untuk menemukan kerentanan yang diketahui, serta menyediakan satu antarmuka pengguna dan platform data untuk menggabungkan dan mengelola temuan keamanan.

Security Health Analytics dapat menyediakan pemantauan dan pelaporan untuk standar kepatuhan seperti PCI DSS, dan standar industri seperti benchmark Center for Internet Security (CIS). Anda dapat melihat laporan di dasbor kepatuhan dan kemudian mengekspornya.

Security Command Center terintegrasi dengan beberapa sumber keamanan pihak ketiga dan menyediakan API sehingga Anda dapat menambahkan dan mengelola temuan kustom. Security Command Center menyediakan antarmuka terpadu untuk semua temuan keamanan dan kepatuhan Anda.

Sinkronisasi Konfigurasi

Jika menggunakan GKE Enterprise, Anda dapat menggunakan Config Sync untuk menjaga cluster Kubernetes tetap sinkron dengan konfigurasi yang ditentukan dalam repositori Git. Repositori Git bertindak sebagai satu sumber tepercaya untuk konfigurasi dan kebijakan cluster Anda. Config Sync terus-menerus mengaudit lingkungan GKE Enterprise Anda untuk mengidentifikasi dan memperbaiki cluster yang menyimpang dari konfigurasi yang ditentukan dalam repositori Anda.

Pengontrol Kebijakan

Jika menggunakan GKE Enterprise, Anda dapat menggunakan Pengontrol Kebijakan, pengontrol penerimaan dinamis Kubernetes, untuk menerapkan kebijakan yang dapat diprogram sepenuhnya untuk cluster Anda. Dengan menggunakan Pengontrol Kebijakan, Anda dapat mencegah pembuatan objek dalam cluster yang tidak memenuhi persyaratan kebijakan Anda. Misalnya, Anda dapat membuat kebijakan untuk menerapkan keamanan Pod.

Memperkenalkan Chef InSpec

Chef InSpec adalah framework pengujian infrastruktur open source dengan bahasa khusus domain (DSL) yang dapat dibaca manusia untuk menentukan persyaratan kepatuhan, keamanan, dan kebijakan.

Dengan Chef InSpec, Anda dapat melakukan hal berikut:

  • Tentukan persyaratan kepatuhan sebagai kode dan uji infrastruktur cloud Anda terhadap persyaratan tersebut.
  • Memungkinkan tim pengembangan menambahkan pengujian khusus aplikasi dan menilai kepatuhan aplikasi mereka terhadap kebijakan keamanan sebelum menerapkan perubahan pada lingkungan produksi.
  • Otomatiskan verifikasi kepatuhan di pipeline CI/CD dan sebagai bagian dari proses rilis.
  • Uji infrastruktur Google Cloud Anda dengan cara yang sama seperti saat menguji infrastruktur di lingkungan cloud lainnya.

Google Cloud menyediakan beberapa resource untuk membantu Anda mulai menggunakan Chef InSpec:

Praktik terbaik untuk menggunakan Chef InSpec dengan Google Cloud

Berikut adalah praktik terbaik umum untuk menggunakan Chef InSpec:

  • Menentukan dan menerapkan proses untuk memperbaiki pelanggaran yang ditemukan oleh pengujian Chef InSpec. Chef InSpec menandai pelanggaran terhadap persyaratan kebijakan dan kepatuhan Anda, tetapi tidak melakukan perbaikan apa pun.
  • Berikan izin IAM yang sesuai ke akun layanan yang Anda gunakan untuk menjalankan pengujian Chef InSpec. Misalnya, jika Anda menguji bucket Cloud Storage, akun layanan harus memiliki peran IAM untuk Cloud Storage yang sesuai.
  • Konfigurasi reporter Chef InSpec untuk menghasilkan laporan berformat yang mendeskripsikan pengujian dan hasil. Anda dapat menyimpan laporan ini untuk memberikan catatan historis. Anda juga dapat menggunakan laporan ini sebagai input untuk alat keamanan dan kepatuhan lainnya. Misalnya, Anda dapat Mengintegrasikan Chef InSpec dan Security Command Center.
  • Kelompokkan pengujian Chef InSpec terkait ke dalam profil. Anda dapat membuat profil yang berbeda untuk kasus penggunaan yang berbeda. Misalnya, Anda dapat menjalankan profil yang komprehensif dan menyeluruh sebagai bagian dari pengujian per malam yang dijadwalkan. Atau, Anda dapat menjalankan profil yang lebih pendek dan lebih terfokus sebagai respons terhadap peristiwa real-time.

Menulis pengujian InSpec Chef

Anda dapat menulis pengujian Chef InSpec menggunakan Chef InSpec DSL, yang merupakan DSL Ruby untuk menulis kontrol audit.

Kode berikut menunjukkan kontrol untuk memvalidasi atribut bucket Cloud Storage:

control 'policy_gcs_bucket' do
 title 'Cloud Storage bucket policy'
 desc 'Compliance policy checks for Cloud Storage bucket'
 impact 'medium'

 google_storage_buckets(project: project_id).bucket_names.each do |bucket|
   describe "[#{project_id}] Cloud Storage Bucket #{bucket}" do
     subject { google_storage_bucket(name: bucket) }
     its('storage_class') { should eq 'STANDARD' }
     its('location') { should be_in ['EUROPE-WEST2', 'EU'] }
     end
   end
 end

Kontrol menentukan informasi berikut:

  • Metadata yang mendeskripsikan kontrol
  • Dampak atau tingkat keparahan kegagalan
  • Pemeriksaan kebijakan yang memverifikasi atribut setiap bucket Cloud Storage di project Anda

Menjalankan pengujian InSpec Chef dengan Cloud Build

Pola yang dijelaskan dalam dokumen ini menggunakan Cloud Build dan image container Chef InSpec untuk menjalankan pengujian InSpec. Dengan Cloud Build, Anda dapat menjalankan image container, dan merangkai langkah-langkah build bersama-sama untuk membentuk pipeline. Misalnya, Anda dapat menjalankan pengujian Chef InSpec dalam satu langkah build, lalu mengekspor atau menganalisis laporan yang dihasilkan dalam langkah berikutnya. Namun, penggunaan Cloud Build tidak diperlukan. Anda dapat mengintegrasikan Chef InSpec dengan alat apa pun yang Anda gunakan.

File konfigurasi Cloud Build berikut menunjukkan pipeline dengan dua langkah build:

steps:
- id: 'run-inspec-cis'
  name: chef/inspec:latest
  entrypoint: '/bin/sh'
  args:
   - '-c'
   - |
     inspec exec https://github.com/GoogleCloudPlatform/inspec-gcp-cis-benchmark.git \
     --target gcp:// \
     --input gcp_project_id=${PROJECT_ID} \
     --reporter cli json:/workspace/report.json \
     --chef-license accept || touch fail.marker

- id: 'store-report'
  name: gcr.io/cloud-builders/gsutil:latest
  args:
   - cp
   - /workspace/report.json
   - gs://${_REPORTS_BUCKET}/cis-report-${BUILD_ID}.json

Langkah pertama menjalankan pengujian tolok ukur CIS Google Cloud dan menghasilkan laporan dalam format JSON. Langkah build menggunakan image container chef/inspec, dan mengambil pengujian dari repositori GitHub Google Cloud CIS publik. Langkah build kedua akan menyalin laporan yang dihasilkan ke bucket Cloud Storage.

Untuk mempermudah, contoh sebelumnya merujuk ke tag latest untuk semua image container. Agar build Anda dapat direproduksi, sebaiknya referensikan versi image container tetap yang spesifik, bukan versi berkelanjutan, seperti latest.

Jika salah satu pengujian gagal, Chef InSpec akan menampilkan error. Daripada menggagalkan build, langkah build pertama menulis file fail.marker dan langkah build kedua akan berjalan meskipun salah satu pengujian Chef InSpec gagal. Jika ingin menggagalkan build secara eksplisit untuk menandai error, Anda dapat memeriksa file fail.marker pada langkah build terakhir, dan menggagalkan build jika ada.

Menganalisis laporan InSpec Chef

Anda dapat mengonfigurasi reporter Chef InSpec untuk menghasilkan laporan berformat yang mendeskripsikan pengujian dan hasil InSpec. Anda dapat menyimpan laporan ini untuk memberikan catatan historis. Anda juga dapat menggunakan laporan ini sebagai input untuk alat keamanan dan kepatuhan lainnya, atau untuk membuat visualisasi atau pemberitahuan. Pola yang dijelaskan nanti dalam dokumen ini merekomendasikan penyimpanan laporan Chef InSpec di bucket Cloud Storage.

Diagram berikut menunjukkan cara menyimpan laporan dan otomatis memicu tindakan lebih lanjut.

Peristiwa yang dipicu oleh laporan.

Menambahkan laporan ke bucket Cloud Storage akan menghasilkan peristiwa. Anda dapat memicu tindakan atau analisis laporan lebih lanjut sebagai respons terhadap peristiwa ini. Dalam diagram sebelumnya, Anda memicu Cloud Function yang menulis detail pengujian Chef InSpec ke BigQuery dan Cloud Function lain yang menambahkan temuan ke Security Command Center.

Mengintegrasikan Chef InSpec dan Security Command Center

Security Command Center adalah database risiko dan keamanan kanonis untuk Google Cloud. Security Command Center memberikan visibilitas terpusat atas semua resource Google Cloud, dan secara otomatis menganalisis resource cloud Anda untuk mencari kerentanan yang diketahui. Sebaiknya aktifkan Security Command Center untuk organisasi Anda.

Anda dapat menambahkan hasil pengujian Chef InSpec ke Security Command Center. Security Command Center bertindak sebagai platform data terpusat untuk menggabungkan dan mengelola temuan keamanan dari berbagai sumber.

Security Command Center mencakup Security Health Analytics. Security Health Analytics otomatis memindai project dan resource Google Cloud untuk mencari kerentanan umum. Misalnya, Security Health Analytics menjalankan pemindaian yang menilai project Anda berdasarkan benchmark CIS Google Cloud Foundation 1.0. Anda juga dapat menjalankan serangkaian pengujian serupa menggunakan profil Google Cloud InSpec CIS. Anda harus membandingkan cakupan pengujian Chef InSpec sehingga pengujian tidak menduplikat pemeriksaan yang dilakukan oleh Security Health Analytics.

Ada beberapa cara untuk menambahkan temuan Chef InSpec ke Security Command Center:

Pola

Bagian ini menjelaskan pola untuk mengintegrasikan Chef InSpec ke dalam operasi sehari-hari Anda. Anda dapat menggabungkan pola-pola ini untuk mencapai pengujian kepatuhan yang berkelanjutan.

Jadwalkan pengujian InSpec Chef

Dalam pola ini, Anda menjalankan set pengujian Chef InSpec pada jadwal tetap. Kami merekomendasikan pendekatan jadwal tetap ini sebagai cara yang baik untuk memulai Chef InSpec karena Anda dapat memperkenalkan pengujian Chef InSpec tanpa mengubah proses yang sudah ada.

Diagram berikut menunjukkan cara menjalankan pengujian sesuai jadwal.

Menjadwalkan pengujian Chef InSpec.

Dalam diagram sebelumnya, Anda membuat tugas Cloud Scheduler dengan frekuensi pilihan Anda. Setiap kali tugas Anda berjalan, tugas ini akan memicu pipeline Cloud Build yang menjalankan pengujian Chef InSpec dan menghasilkan laporan pengujian ke Cloud Storage. Untuk mengetahui informasi selengkapnya, lihat Menjadwalkan build.

Pola ini memiliki manfaat sebagai berikut:

  • Anda dapat memperkenalkan pengujian Chef InSpec dengan perubahan minimum pada proses yang ada.
  • Anda dapat menggunakan pengujian Chef InSpec secara terpisah dari proses apa pun yang digunakan untuk menyediakan dan mengelola infrastruktur serta aplikasi.

Pola ini memiliki batasan berikut:

  • Pengujian Chef InSpec dipisahkan dari penyediaan infrastruktur Anda, yang mempersulit atribusi perubahan tertentu ke pengujian Chef InSpec yang gagal.
  • Pengujian Chef InSpec hanya berjalan secara berkala, sehingga mungkin akan ada penundaan sebelum Anda mengidentifikasi pelanggaran kebijakan atau kepatuhan

Berintegrasi langsung dengan pipeline CI/CD

Banyak organisasi mengotomatiskan penyediaan dan pengelolaan infrastruktur mereka menggunakan alat seperti Terraform atau Config Connector. Biasanya, infrastruktur dibuat atau diubah hanya sebagai bagian dari sebuah pipeline CI/CD. Untuk mengetahui informasi selengkapnya tentang konsep CI/CD di Google Cloud, lihat CI/CD modern dengan GKE Enterprise.

Dalam pola ini, Anda menambahkan pengujian Chef InSpec sebagai langkah tambahan di pipeline deployment infrastruktur sehingga Anda dapat memvalidasi infrastruktur setiap kali menjalankan pipeline deployment. Build dapat gagal jika ada pelanggaran kepatuhan.

Diagram berikut menunjukkan alur kerja umum tempat pipeline deployment dipicu berdasarkan commit yang mencakup perubahan infrastruktur.

Mengintegrasikan Chef Inspec dengan pipeline CI/CD.

Dalam diagram sebelumnya, perubahan infrastruktur diterapkan ke lingkungan pengujian atau staging, lalu pengujian Chef InSpec dijalankan pada lingkungan tersebut. Jika semua pemeriksaan Chef InSpec mematuhi persyaratan, Anda dapat menggabungkan dan menerapkan perubahan infrastruktur ke lingkungan produksi, dan pengujian Chef InSpec akan berjalan lagi di lingkungan produksi.

Pola ini memiliki manfaat sebagai berikut:

  • Pengujian Chef InSpec terintegrasi langsung ke dalam proses deployment sehingga pelanggaran dapat diidentifikasi dengan cepat.
  • Jika pengujian Chef InSpec tidak lulus, Anda dapat secara eksplisit menggagalkan deployment.

Pola ini memiliki batasan berikut:

  • Pengujian Chef InSpec terintegrasi langsung dengan pipeline build sehingga tim yang mengelola pipeline build Anda harus memahami pengujian Chef InSpec
  • Jika memiliki beberapa build yang memerlukan pengujian Chef InSpec, Anda harus menambahkan langkah-langkah Chef InSpec ke dalam setiap build, yang mungkin akan membuat lebih sulit untuk mempertahankan dan menskalakan upaya Chef InSpec.

Mengintegrasikan secara tidak langsung dengan pipeline CI/CD Anda

Pola ini mirip dengan pola sebelumnya, tetapi alih-alih langsung menjalankan pengujian Chef InSpec sebagai langkah dalam pipeline deployment, Anda menjalankan pengujian Chef InSpec di pipeline terpisah. Pipeline terpisah ini dipicu oleh pipeline deployment Anda. Anda dapat memisahkan logika Chef InSpec dari pipeline infrastruktur, tetapi tetap menjalankan pengujian kepatuhan dan kebijakan sebagai bagian dari alur kerja deployment Anda.

Cloud Build otomatis menghasilkan notifikasi build saat status build Anda berubah. Misalnya, saat build dibuat, saat build bertransisi ke status yang berfungsi, dan saat build selesai. The Pesan notifikasi dipublikasikan ke topik Pub/Sub dan berisi informasi tentang build tersebut, termasuk langkah-langkah build individual dan argumennya.

Diagram berikut menunjukkan bagaimana Anda dapat membuat Cloud Function yang otomatis dipicu setiap kali pesan dipublikasikan ke topik Pub/Sub notifikasi build.

Integrasi tidak langsung Chef InSpec dengan pipeline CI/CD.

Pada diagram sebelumnya, fungsi dapat memeriksa pesan notifikasi build, kemudian memicu pipeline Chef InSpec jika diperlukan. Misalnya, Anda hanya ingin memicu pipeline Chef InSpec sebagai respons terhadap build yang berhasil dan berisi langkah-langkah build tertentu.

Pola ini memiliki manfaat sebagai berikut:

  • Pengujian Chef InSpec independen dari pipeline deployment Anda. Tim yang mengelola pipeline deployment tidak perlu berinteraksi dengan Chef InSpec.
  • Anda dapat memusatkan pengujian Chef InSpec, sehingga mempermudah pemeliharaan dan penskalaan upaya Chef InSpec.
  • Anda dapat menjalankan pengujian Chef InSpec secara selektif bergantung pada hasil dan output build upstream.

Pola ini memiliki batasan berikut:

  • Anda harus menulis dan mengelola kode untuk mengurai dan menganalisis pesan notifikasi build untuk menentukan apakah akan menjalankan pengujian Chef InSpec dan untuk meneruskan parameter ke pengujian Chef InSpec.
  • Notifikasi Cloud Build dipublikasikan ke topik Pub/Sub dalam project yang sama. Jika memiliki build di beberapa project, Anda perlu men-deploy Cloud Function ke setiap project.

Memicu pengujian InSpec Chef sebagai respons terhadap notifikasi Inventaris Aset Cloud

Inventaris Aset Cloud menyediakan inventaris semua resource Google Cloud Anda. Anda dapat menggunakan Inventaris Aset Cloud untuk menelusuri, menganalisis, dan mengekspor aset serta metadata aset di seluruh project, folder, dan organisasi Google Cloud Anda. Anda juga dapat menggunakan Inventaris Aset Cloud untuk mengirim notifikasi real-time tentang perubahan pada resource dan kebijakan cloud Anda.

Diagram berikut menunjukkan cara menjalankan pengujian Chef InSpec berdasarkan notifikasi dari Inventaris Aset Cloud.

Picu pengujian InSpec Chef berdasarkan notifikasi.

Diagram sebelumnya menunjukkan cara mendapatkan masukan hampir secara real-time tentang resource cloud baru atau yang diperbarui yang tidak mematuhi kebijakan. Anda dapat memfilter notifikasi agar Anda hanya diberi tahu tentang perubahan pada jenis resource tertentu. Anda dapat menggunakan notifikasi ini untuk memicu pengujian Chef InSpec khusus resource dan bertarget. Misalnya, Anda menjalankan kumpulan pengujian tertentu setiap kali bucket Cloud Storage dibuat, dan menjalankan serangkaian pengujian Chef InSpec yang berbeda saat kebijakan IAM diperbarui.

Pola ini memiliki manfaat sebagai berikut:

  • Anda dapat memicu pengujian Chef InSpec khusus resource yang ditargetkan, bergantung pada perubahan tertentu pada aset cloud Anda.
  • Notifikasi Inventaris Aset Cloud dikirimkan hampir secara real time, sehingga setiap pelanggaran atau kepatuhan atau kebijakan dapat diidentifikasi dengan cepat.
  • Anda dapat menggunakan pola ini secara terpisah dari proses apa pun yang digunakan untuk menyediakan dan mengelola infrastruktur Anda. Pengujian Chef InSpec dijalankan terlepas dari apakah infrastruktur dibuat atau diubah oleh developer individu atau pipeline CI/CD.
  • Inventaris Aset Cloud dapat membuat notifikasi mengenai perubahan pada resource di seluruh organisasi Anda, atau dari folder atau projects yang dipilih. Anda dapat menjalankan kumpulan pengujian Chef InSpec tertentu bergantung pada folder atau project tempat perubahan berasal.
  • Anda dapat menggunakan pola ini bersama pola lainnya. Misalnya, banyak organisasi tidak menerapkan deployment otomatis untuk lingkungan pengembangan atau sandbox. Anda dapat menggunakan pola ini untuk melakukan pemeriksaan kebijakan yang dipilih pada lingkungan tersebut, sambil berintegrasi dengan pipeline CI/CD untuk lingkungan produksi dan staging.

Pola ini memiliki batasan berikut:

  • Pola ini mungkin tidak praktis jika ada volume perubahan yang besar pada aset cloud, karena pengujian Chef InSpec mungkin dipicu oleh setiap perubahan.
  • Anda harus menulis dan mengelola kode untuk mengurai dan menganalisis pesan notifikasi Inventaris Aset Cloud guna menentukan apakah akan menjalankan pengujian Chef InSpec atau tidak

Langkah selanjutnya