Kebijakan OS dan penetapan kebijakan OS

Kebijakan OS adalah file yang berisi konfigurasi deklaratif untuk resource OS, seperti paket, repositori, file, atau resource kustom yang ditentukan oleh skrip. Untuk mengetahui informasi selengkapnya, lihat definisi resource untuk OSPolicy.

Penetapan kebijakan OS adalah resource API yang digunakan oleh VM Manager untuk menerapkan kebijakan OS ke VM. Untuk mengetahui informasi selengkapnya, lihat definisi resource untuk OSPolicyAssignment.

Kebijakan OS

Kebijakan OS adalah file JSON atau YAML yang memiliki tiga bagian:

  • Mode. Perilaku kebijakan. Tersedia dua mode berikut:

    • Validation: untuk mode ini, kebijakan akan memeriksa apakah resource dalam status yang dipilih, tetapi tidak mengambil tindakan apa pun.
    • Enforcement: untuk mode ini, kebijakan akan memeriksa apakah resource berada dalam status yang dipilih dan, jika tidak, kebijakan akan melakukan tindakan yang diperlukan untuk membawanya ke status yang dipilih.

    Untuk kedua mode tersebut, VM Manager melaporkan kepatuhan terhadap kebijakan OS dan resource terkait.

  • Grup resource. Nama dan versi sistem operasi yang menerapkan spesifikasi resource terkait. Misalnya, Anda dapat menentukan satu kebijakan untuk menginstal atau men-deploy agen di berbagai distribusi dan versi sistem operasi.

  • Resource. Spesifikasi yang diperlukan VM untuk mencapai konfigurasi yang dipilih. Anda dapat menentukan maksimum 10 ID resource di setiap grup resource. Jenis resource berikut ini didukung:

    • pkg: digunakan untuk menginstal atau menghapus paket Linux dan Windows
    • repository: digunakan untuk menentukan lokasi asal paket software repositori yang dapat diinstal
    • exec: digunakan untuk mengaktifkan berjalannya skrip ad hoc (/bin/sh) atau skrip PowerShell
    • file: digunakan untuk mengelola file pada sistem

Contoh kebijakan OS

Contoh berikut menunjukkan cara membuat kebijakan OS. Anda dapat mengupload kebijakan OS ini ke konsol Google Cloud saat membuat penetapan kebijakan OS.

  • Contoh 1: menginstal paket.
  • Contoh 2: menjalankan skrip.
  • Contoh 3: menjalankan skrip yang disimpan di bucket Cloud Storage dan menyalin file output ke bucket Cloud Storage.
  • Contoh 4: menentukan repositori download dan menginstal paket dari repositori tersebut.
  • Contoh 5: mengonfigurasi pemindaian benchmark CIS di VM yang menjalankan Container-Optimized OS (COS). Untuk informasi selengkapnya tentang penggunaan kebijakan OS untuk pemindaian benchmark CIS, lihat Mengotomatiskan pengaktifan dan pemeriksaan status kepatuhan CIS.

Untuk mengetahui daftar lengkap contoh kebijakan OS yang dapat Anda terapkan di lingkungan Anda, lihat repositori GitHub GoogleCloudPlatform/osconfig.

Contoh 1

Membuat kebijakan OS yang menginstal MSI Windows yang didownload dari bucket Cloud Storage.

# An OS policy to install a Windows MSI downloaded from a Google Cloud Storage bucket.
id: install-msi-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      - id: install-msi
        pkg:
          desiredState: INSTALLED
          msi:
            source:
              gcs:
                bucket: my-bucket
                object: my-app.msi
                generation: 1619136883923956

Contoh 2

Membuat kebijakan OS yang memverifikasi apakah server web Apache berjalan di VM Linux Anda.

# An OS policy that ensures Apache web server is running on Linux OSes.
id: apache-always-up-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: ensure-apache-is-up
      exec:
        validate:
          interpreter: SHELL
          # If Apache web server is already running, return an exit code 100 to indicate
          # that exec resource is already in desired state. In this scenario,
          # the `enforce` step will not be run.
          # Otherwise return an exit code of 101 to indicate that exec resource is not in
          # desired state. In this scenario, the `enforce` step will be run.
          script: if systemctl is-active --quiet httpd; then exit 100; else exit 101; fi
        enforce:
          interpreter: SHELL
          # Start Apache web server and return an exit code of 100 to indicate that the
          # resource is now in its desired state.
          script: systemctl start httpd && exit 100

Contoh 3

Membuat kebijakan OS yang memverifikasi apakah server web Apache berjalan di VM Linux Anda. Dalam contoh ini, skrip apache-validate.sh disimpan di bucket Cloud Storage. Untuk menyalin output ke bucket Cloud Storage, skrip apache-enforce.sh harus menyertakan perintah yang mirip dengan berikut:

      gcsutil cp my-exec-output-file gs://my-gcs-bucket
      

# An OS policy that ensures Apache web server is running on Linux OSes.
id: gcs-test-apache-always-up-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: ensure-apache-is-up
      exec:
        validate:
          interpreter: SHELL
          # If Apache web server is already running, return an exit code 100 to indicate
          # that exec resource is already in desired state. In this scenario,
          # the enforce step will not be run.
          # Otherwise return an exit code of 101 to indicate that exec resource is not in
          # desired state. In this scenario, the enforce step will be run.
          file:
            gcs:
              bucket: my-gcs-bucket
              object: apache-validate.sh
              generation: 1726747503303299
        enforce:
          interpreter: SHELL
          # Start Apache web server and return an exit code of 100 to indicate that the
          # resource is now in its desired state.
          file:
            gcs:
              bucket: my-gcs-bucket
              object: apache-enforce.sh
              generation: 1726747503250884

Contoh 4

Membuat kebijakan OS yang menginstal agen Google Cloud Observability di VM CentOS.

id: cloudops-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      - id: add-repo
        repository:
          yum:
            id: google-cloud-ops-agent
            displayName: Google Cloud Ops Agent Repository
            baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all
            gpgKeys:
              - https://packages.cloud.google.com/yum/doc/yum-key.gpg
              - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
      - id: install-pkg
        pkg:
          desiredState: INSTALLED
          yum:
            name: google-cloud-ops-agent
      - id: exec-script
        exec:
          validate:
            script: |-
              if [[ $(rpm --query --queryformat '%{VERSION}
              ' google-cloud-ops-agent) == '1.0.2' ]]; then exit 100; else exit 101; fi
            interpreter: SHELL
          enforce:
            script:
              sudo yum remove -y google-cloud-ops-agent || true; sudo yum install
              -y 'google-cloud-ops-agent-1.0.2*' && exit 100
            interpreter: SHELL
      - id: ensure-agent-running
        exec:
          validate:
            script:
              if (ps aux | grep 'opt[/].*google-cloud-ops-agent.*bin/'); then exit
              100; else exit 101; fi
            interpreter: SHELL
          enforce:
            script: sudo systemctl start google-cloud-ops-agent.target && exit 100
            interpreter: SHELL

Contoh 5

Mengonfigurasi pemindaian CIS Level 1 berkala dengan periode default sekali sehari.

# An OS policy to check CIS level 1 compliance once a day.
id: ensure-cis-level1-compliance-once-a-day-policy
mode: ENFORCEMENT
resourceGroups:
  - resources:
      id: ensure-cis-level1-compliance-once-a-day
      exec:
        validate:
          interpreter: SHELL
          # If cis-compliance-scanner.service is active, return an exit code
          # 100 to indicate that the instance is in compliant state.
          # Otherwise, return an exit code of 101 to run `enforce` step.
          script: |-
            is_active=$(systemctl is-active cis-compliance-scanner.timer)
            result=$(systemctl show -p Result --value cis-compliance-scanner.service)

            if [ "$is_active" == "active" ] && [ "$result" == "success" ]; then
              exit 100;
            else
              exit 101;
            fi
        enforce:
          interpreter: SHELL
          # COS 97 images are by-default CIS Level 1 compliant and there is no
          # additional configuration needed. However, if certain changes
          # cause non-compliance because of the workload on the instance, this
          # section can be used to automate to make fixes. For example, the
          # workload might generate a file that does not comply with the
          # recommended file permissions.
          # Return an exit code of 100 to indicate that the desired changes
          # successfully applied.
          script: |-
            # optional <your code>
            # Check the compliance of the instance once a day.
            systemctl start cis-compliance-scanner.timer && exit 100

Penetapan kebijakan OS

Penetapan kebijakan OS memiliki bagian berikut:

  • Kebijakan OS. Satu atau beberapa kebijakan OS yang ingin diterapkan ke VM Anda. Untuk mendownload atau membuat kebijakan, lihat kebijakan OS.

  • VM Target. Kumpulan VM dalam satu zona tempat Anda ingin menerapkan kebijakan. Dalam zona, Anda dapat membatasi atau membatasi VM menggunakan grup OS dan menyertakan atau mengecualikan label. Anda dapat memilih kombinasi opsi berikut:

    • Grup OS: menentukan sistem operasi target tempat kebijakan OS berlaku. Untuk mengetahui daftar lengkap sistem operasi dan versi yang mendukung kebijakan OS, lihat Detail sistem operasi.
    • Sertakan set: menentukan VM tempat kebijakan OS diterapkan berdasarkan label VM atau sistem.
    • Pengecualian set: menentukan VM yang harus diabaikan oleh kebijakan OS berdasarkan label sistem atau VM.

    Untuk kedua set label sertakan dan kecualikan, satu label string diterima jika cocok dengan konvensi penamaan yang digunakan oleh sistem. Namun, sebagian besar label ditentukan dalam pasangan key:value. Untuk informasi selengkapnya tentang label, lihat Pelabelan resource.

    Misalnya, Anda dapat memilih semua VM Ubuntu di lingkungan pengujian Anda, dan mengecualikan VM yang menjalankan Google Kubernetes Engine, dengan menentukan hal berikut:

    • Grup OS: ubuntu
    • Sertakan: env:test, env:staging
    • Kecualikan: goog-gke-node
  • Tingkat peluncuran. Menentukan kecepatan penerapan kebijakan OS ke VM. Kebijakan OS diluncurkan secara bertahap agar Anda dapat melacak kondisi sistem dan melakukan modifikasi jika update menyebabkan regresi di lingkungan. Rencana peluncuran memiliki komponen berikut:

    • Ukuran gelombang (anggaran gangguan): jumlah atau persentase VM tetap yang dapat mengalami peluncuran dalam satu waktu. Artinya, pada setiap saat peluncuran, hanya sejumlah VM tertentu yang ditargetkan.
    • Waktu tunggu: waktu antara saat layanan menerapkan kebijakan ke VM dan saat VM dihapus dari nilai minimum gangguan. Misalnya, waktu tunggu 15 menit berarti proses peluncuran harus menunggu 15 menit setelah kebijakan diterapkan ke VM sebelum dapat menghapus VM dari batas gangguan dan peluncuran dapat dilanjutkan. Waktu tunggu membantu mengontrol kecepatan peluncuran serta memungkinkan Anda menangkap dan menyelesaikan potensi masalah peluncuran lebih awal. Pilih waktu yang cukup lama bagi Anda untuk memantau status peluncuran.

    Misalnya, jika Anda menetapkan target 10 VM, menetapkan batas gangguan sebesar 20%, dan menetapkan waktu bake ke 15 menit, hanya 2 VM yang dijadwalkan untuk diperbarui pada waktu tertentu. Setelah setiap VM diupdate, harus lewat 15 menit sebelum VM dihapus dari nilai minimum gangguan dan VM lain ditambahkan ke peluncuran.

    Untuk mengetahui informasi selengkapnya tentang peluncuran, lihat Peluncuran.

Contoh penetapan kebijakan OS

Contoh berikut menunjukkan cara membuat penetapan kebijakan OS. Anda dapat menggunakan contoh ini untuk membuat penetapan kebijakan OS dari Google Cloud CLI atau OS Config API.

  • Contoh 1: menginstal paket.
  • Contoh 2: menjalankan skrip.
  • Contoh 3: menentukan repositori download dan menginstal paket dari repositori tersebut.

Untuk mengetahui daftar contoh penetapan kebijakan OS yang dapat diterapkan di lingkungan Anda, lihat repositori GitHub GoogleCloudPlatform/osconfig.

Contoh 1

Membuat penetapan kebijakan OS yang menginstal MSI Windows yang didownload dari bucket Cloud Storage.

# An OS policy assignment to install a Windows MSI downloaded from a Google Cloud Storage bucket
# on all VMs running Windows Server OS.
osPolicies:
  - id: install-msi-policy
    mode: ENFORCEMENT
    resourceGroups:
      - resources:
          - id: install-msi
            pkg:
              desiredState: INSTALLED
              msi:
                source:
                  gcs:
                    bucket: my-bucket
                    object: my-app.msi
                    generation: 1619136883923956
instanceFilter:
  inventories:
    - osShortName: windows
rollout:
  disruptionBudget:
    fixed: 10
  minWaitDuration: 300s

Contoh 2

Membuat penetapan kebijakan OS yang memverifikasi apakah server web Apache berjalan di semua VM Linux Anda.

# An OS policy assignment that ensures Apache web server is running on Linux OSes.
# The assignment is applied only to those VMs that have the label `type:webserver` assigned to them.
osPolicies:
  - id: apache-always-up-policy
    mode: ENFORCEMENT
    resourceGroups:
      - resources:
          id: ensure-apache-is-up
          exec:
            validate:
              interpreter: SHELL
              # If Apache web server is already running, return an exit code 100 to indicate
              # that exec resource is already in desired state. In this scenario,
              # the `enforce` step will not be run.
              # Otherwise return an exit code of 101 to indicate that exec resource is not in
              # desired state. In this scenario, the `enforce` step will be run.
              script: if systemctl is-active --quiet httpd; then exit 100; else exit 101; fi
            enforce:
              interpreter: SHELL
              # Start Apache web server and return an exit code of 100 to indicate that the
              # resource is now in its desired state.
              script: systemctl start httpd && exit 100
instanceFilter:
  inclusionLabels:
    - labels:
        type: webserver
rollout:
  disruptionBudget:
    fixed: 10
  minWaitDuration: 300s

Contoh 3

Membuat penetapan kebijakan OS yang menginstal agen Google Cloud Observability di VM CentOS.

# An OS policy assignment that ensures google-cloud-ops-agent is running on all Centos VMs in the project
osPolicies:
  - id: cloudops-policy
    mode: ENFORCEMENT
    resourceGroups:
        resources:
          - id: add-repo
            repository:
              yum:
                id: google-cloud-ops-agent
                displayName: Google Cloud Ops Agent Repository
                baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all
                gpgKeys:
                  - https://packages.cloud.google.com/yum/doc/yum-key.gpg
                  - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
          - id: install-pkg
            pkg:
              desiredState: INSTALLED
              yum:
                name: google-cloud-ops-agent
          - id: exec-script
            exec:
              validate:
                script: |-
                  if [[ $(rpm --query --queryformat '%{VERSION}
                  ' google-cloud-ops-agent) == '1.0.2' ]]; then exit 100; else exit 101; fi
                interpreter: SHELL
              enforce:
                script:
                  sudo yum remove -y google-cloud-ops-agent || true; sudo yum install
                  -y 'google-cloud-ops-agent-1.0.2*' && exit 100
                interpreter: SHELL
          - id: ensure-agent-running
            exec:
              validate:
                script:
                  if (ps aux | grep 'opt[/].*google-cloud-ops-agent.*bin/'); then exit
                  100; else exit 101; fi
                interpreter: SHELL
              enforce:
                script: sudo systemctl start google-cloud-ops-agent.target && exit 100
                interpreter: SHELL
instanceFilter:
  inventories:
    - osShortName: centos
rollout:
  disruptionBudget:
    fixed: 10
  minWaitDuration: 300s

Apa langkah selanjutnya?