Criteri del sistema operativo e assegnazione dei criteri

Un criterio del sistema operativo è un file contenente la configurazione dichiarativa per il sistema operativo come pacchetti, repository, file o risorse personalizzate definite script. Per maggiori informazioni, consulta la definizione della risorsa per OSPolicy.

Un'assegnazione dei criteri del sistema operativo è una risorsa API utilizzata da VM Manager per applicare i criteri del sistema operativo alle VM. Per saperne di più, consulta la definizione della risorsa per OSPolicyAssignment.

Criterio sistema operativo

Un criterio del sistema operativo è un file JSON o YAML che ha tre sezioni:

  • Modalità. Il comportamento dei criteri. Sono disponibili le due modalità seguenti:

    • Validation: per questa modalità, il criterio controlla se le risorse si trovano in lo stato scelto, ma non intraprende alcuna azione.
    • Enforcement: in questa modalità, il criterio controlla se le risorse si trovano nello stato scelto e, in caso contrario, esegue le azioni necessarie per in quello stato prescelto.

    Per entrambe le modalità, VM Manager segnala la conformità al criterio di sistema operativo e le risorse associate.

  • Gruppi di risorse: Il nome e la versione del sistema operativo a cui si applicano le specifiche delle risorse associate. Ad esempio, puoi definire un unico criterio per installare o eseguire il deployment di un agente in diversi sistemi operativi distribuzioni e versioni.

  • Risorse: Le specifiche necessarie affinché la VM raggiunga il livello selezionato configurazione. Sono supportati i seguenti tipi di risorse:

    • pkg: utilizzato per installare o rimuovere pacchetti Linux e Windows
    • repository: utilizzato per specificare quali pacchetti software del repository può essere installato da
    • exec: utilizzato per attivare l'esecuzione di una shell ad hoc (/bin/sh) oppure Script PowerShell
    • file: utilizzata per gestire i file nel sistema

Criteri di sistema operativo di esempio

I seguenti esempi mostrano come creare criteri del sistema operativo. Puoi caricare questi sistemi operativi alla console Google Cloud durante la creazione di un'assegnazione dei criteri del sistema operativo.

  • Esempio 1: installa un pacchetto.
  • Esempio 2: esegue uno script.
  • Esempio 3: specifica un repository di download e installa i pacchetti dal repository.
  • Esempio 4: configura l'analisi di benchmark CIS sulle VM in esecuzione Container-Optimized OS (COS). Per ulteriori informazioni sull'utilizzo dei criteri di sistema operativo per la scansione di CIS Benchmark, consulta Automatizza l'attivazione e il controllo dello stato di conformità CIS.

Per un elenco completo dei criteri di sistema operativo di esempio che puoi applicare nel tuo ambiente, consulta GoogleCloudPlatform/osconfig GitHub di ASL.

Esempio 1

Crea un criterio di sistema operativo che installa un file MSI Windows scaricato da un nel 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

Esempio 2

Crea un criterio di sistema operativo per verificare se il server web Apache è in esecuzione sulle tue VM Linux.

# 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

Esempio 3

Crea un criterio di sistema operativo che installa gli agenti Google Cloud Observability sulle 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

Esempio 4

Configura la scansione periodica CIS di livello 1 con il periodo predefinito di una volta al giorno.

# 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

Assegnazione dei criteri del sistema operativo

Un'assegnazione di criteri del sistema operativo ha le seguenti sezioni:

  • Criteri del sistema operativo. Uno o più criteri del sistema operativo che vuoi applicare alla tua VM. Per scaricare o creare un criterio, consulta: Criteri del sistema operativo.

  • VM di destinazione. Un insieme di VM all'interno di una singola zona a cui vuoi applicare norme. All'interno di una zona puoi limitare o limitare le VM utilizzando il sistema operativo le famiglie e le etichette di inclusione o esclusione. Puoi selezionare una combinazione le seguenti opzioni:

    • Famiglie di sistemi operativi: specifica i sistemi operativi di destinazione che il criterio di sistema operativo a cui si applica. Per un elenco completo dei sistemi operativi e delle versioni che supportano Criteri di sistema operativo: vedi Dettagli del sistema operativo.
    • Includi set: specifica le VM a cui si applica il criterio del sistema operativo in base alla VM o etichette del sistema.
    • Escludi set: specifica le VM che il criterio del sistema operativo deve ignorare in base alla VM o etichette di sistema.

    Per i set di etichette di inclusione ed esclusione, è accettata un'unica etichetta di stringa se corrisponde alla convenzione di denominazione usata dal sistema. Tuttavia, la maggior parte delle etichette sono specificate in key:value coppie. Per ulteriori informazioni sulle etichette, consulta Etichettatura delle risorse.

    Ad esempio, puoi selezionare tutte le VM Ubuntu nel tuo ambiente di test e escludere quelli che eseguono Google Kubernetes Engine, specificando quanto segue:

    • Famiglia di sistemi operativi: ubuntu
    • Includi: env:test, env:staging
    • Escludi: goog-gke-node
  • Una percentuale di implementazione. Specifica la velocità con cui applicare i criteri del sistema operativo le VM. I criteri del sistema operativo vengono implementati gradualmente per consentirti di monitorare l'integrità e apporta modifiche se gli aggiornamenti causano regressioni completamente gestito di Google Cloud. Un piano di implementazione include i seguenti componenti:

    • Dimensione dell'onda (budget di interruzione): il numero fisso o la percentuale di VM che possono un'implementazione contemporaneamente. Ciò significa che in qualsiasi momento vengono scelte come target solo un numero specificato di VM.
    • Tempo di attesa: il tempo che intercorre tra l'applicazione dei criteri da parte del servizio alla VM e quando una VM viene rimossa dalla soglia di interruzione. Ad esempio: un tempo di attesa di 15 minuti significa che il processo di implementazione deve attendere 15 minuti dopo applicando i criteri a una VM prima che possa rimuoverla dall'interruzione soglia e l'implementazione può procedere. Il tempo di attesa aiuta a controllare la velocità di un'implementazione e ti consente anche individuare e risolvere per tempo potenziali problemi di implementazione. Seleziona un tempo lungo per consentirti di monitorare lo stato delle implementazioni.

    Ad esempio, se imposti un target di 10 VM, imposta la soglia di interruzione su 20% e impostare un tempo di cottura di 15 minuti, quindi, in qualsiasi momento, solo 2 VM pianificato per l'aggiornamento. Dopo l'aggiornamento di ogni VM, devono trascorrere 15 minuti prima la VM viene rimossa dalla soglia di interruzione e viene aggiunta un'altra VM implementazione.

    Per ulteriori informazioni sulle implementazioni, vedi Implementazioni.

Esempio di assegnazione dei criteri del sistema operativo

I seguenti esempi mostrano come creare assegnazioni dei criteri del sistema operativo. Puoi utilizzare questi esempi per creare assegnazioni di criteri del sistema operativo da Google Cloud CLI l'API OS Config.

  • Esempio 1: installa un pacchetto.
  • Esempio 2: esegue uno script.
  • Esempio 3: specifica un repository di download e installa i pacchetti dal repository.

Per un elenco di assegnazioni di criteri del sistema operativo di esempio che puoi applicare nel tuo ambiente, consulta GoogleCloudPlatform/osconfig GitHub di ASL.

Esempio 1

Crea un'assegnazione di criteri del sistema operativo che installa un file MSI di Windows scaricato da un 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

Esempio 2

Crea un'assegnazione dei criteri del sistema operativo che verifica se il server web Apache sia in esecuzione su tutte le VM Linux.

# 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

Esempio 3

Crea un'assegnazione dei criteri del sistema operativo che installa gli agenti Google Cloud Observability su 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

Passaggi successivi