Betriebssystemrichtlinie und Zuweisung von Betriebssystemrichtlinie

Eine Betriebssystemrichtlinie ist eine Datei, die die deklarative Konfiguration für Betriebssystemressourcen wie Pakete, Repositories, Dateien oder benutzerdefinierte Ressourcen enthält, die durch Skripts definiert werden. Weitere Informationen finden Sie in der Ressourcendefinition für OSPolicy.

Eine Zuweisung von Betriebssystemrichtlinien ist eine API-Ressource, mit der von VM Manager Betriebssystemrichtlinien auf VMs angewendet werden. Weitere Informationen finden Sie in der Ressourcendefinition für OSPolicyAssignment.

Betriebssystemrichtlinie

Eine Betriebssystemrichtlinie ist eine JSON- oder YAML-Datei mit drei Abschnitten:

  • den Modus an. Das Richtlinienverhalten. Folgende zwei Modi sind verfügbar:

    • Validation: In diesem Modus prüft die Richtlinie, ob die Ressourcen den ausgewählten Status haben, aber führt keine Aktion aus.
    • Enforcement: In diesem Modus prüft die Richtlinie, ob die Ressourcen den ausgewählten Status haben. Ist dies nicht der Fall, werden die erforderlichen Maßnahmen ergriffen, um sie in den ausgewählten Status zu bringen.

    Bei beiden Modi meldet VM Manager die Compliance für die Betriebssystemrichtlinie und die zugehörigen Ressourcen.

  • Ressourcengruppen Der Name und die Version des Betriebssystems, für die die zugehörigen Ressourcenspezifikationen gelten. Sie können beispielsweise eine einzelne Richtlinie definieren, um einen Agent über verschiedene Betriebssystem-Distributionen und -Versionen hinweg zu installieren und bereitzustellen.

  • Ressourcen: Die Spezifikationen, die die VM benötigt, um die ausgewählte Konfiguration zu erreichen. Die folgenden Ressourcentypen werden unterstützt:

    • pkg: Zum Installieren oder Entfernen von Linux- und Windows-Paketen
    • repository: wird verwendet, um anzugeben, aus welchem Repository Softwarepakete installiert werden können
    • exec: wird verwendet, um die Ausführung eines Ad-hoc-Shell- (/bin/sh) oder PowerShell-Skripts zu aktivieren.
    • file: wird verwendet, um Dateien im System zu verwalten

Beispiele für Betriebssystemrichtlinien

Die folgenden Beispiele zeigen, wie Sie Betriebssystemrichtlinien erstellen können. Sie können diese Betriebssystemrichtlinien in die Google Cloud Console hochladen, wenn Sie eine Betriebssystemrichtlinienzuweisung erstellen.

  • Beispiel 1: installiert ein Paket
  • Beispiel 2: führt ein Skript aus
  • Beispiel 3: gibt ein Download-Repository an und installiert Pakete aus diesem Repository.
  • Beispiel 4: Konfiguriert das CIS-Benchmark-Scannen auf VMs, auf denen Container-Optimized OS (COS) ausgeführt wird. Weitere Informationen zur Verwendung der Betriebssystemrichtlinie für das CIS-Benchmark-Scan finden Sie unter Automatisieren der Aktivierung und Prüfung des CIS-Compliancestatus.

Eine vollständige Liste von Beispiel-Betriebssystemrichtlinien, die Sie in Ihrer Umgebung anwenden können, finden Sie im GitHub-Repository GoogleCloudPlatform/osconfig.

Beispiel 1

Erstellen Sie eine Zuweisung von Betriebssystemrichtlinien, die eine von einem Cloud Storage-Bucket heruntergeladene Windows-MSI-Datei installiert.

# 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

Beispiel 2

Erstellen Sie eine Betriebssystemrichtlinie, die prüft, ob der Apache-Webserver auf Ihren Linux-VMs ausgeführt wird.

# 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

Beispiel 3

Erstellen Sie eine Betriebssystemrichtlinie, die Google Cloud Observability-Agents auf CentOS-VMs installiert.

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

Beispiel 4

Hiermit wird ein regelmäßiger CIS-Level-1-Scan mit der Standardhäufigkeit von einmal täglich konfiguriert.

# 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

Zuweisung von Betriebssystemrichtlinien

Eine Zuweisung von Betriebssystemrichtlinien besteht aus folgenden Abschnitten:

  • Betriebssystemrichtlinien Eine oder mehrere Betriebssystemrichtlinien, die Sie auf die VM anwenden möchten. Informationen zum Herunterladen oder Erstellen einer Richtlinie finden Sie unter Betriebssystemrichtlinien.

  • Ziel-VMs Eine Gruppe von VMs innerhalb einer einzelnen Zone, auf die Sie die Richtlinie anwenden möchten. Innerhalb einer Zone können Sie VMs mithilfe von Betriebssystemfamilien limitieren oder einschränken und Labels ein- oder ausschließen. Sie können eine Kombination aus den folgenden Optionen auswählen:

    • Betriebssystemfamilien: gibt die Zielbetriebssysteme an, für die die Betriebssystemrichtlinie gilt. Eine vollständige Liste der Betriebssysteme und Versionen, die Betriebssystemrichtlinien unterstützen, finden Sie unter Details zu Betriebssystemen.
    • Einschlusssatz: gibt die VMs an, für die die Betriebssystemrichtlinie basierend auf VM- oder Systemlabels gilt.
    • Ausschlusssatz: gibt die VMs an, die von der Betriebssystemrichtlinie basierend auf VM- oder Systemlabels ignoriert werden sollen.

    Sowohl für Include- als auch für Exclude-Labelsätze ist ein einzelnes Stringlabel zulässig, wenn es der vom System verwendeten Benennungskonvention entspricht. Die meisten Labels werden jedoch in key:value-Paaren angegeben. Weitere Informationen zu Labels finden Sie unter Ressourcen mit Labels versehen.

    Sie können beispielsweise alle Ubuntu-VMs in Ihrer Testumgebung auswählen und dabei die ausschließen, die Google Kubernetes Engine ausführen, indem Sie Folgendes angeben:

    • Betriebssystemfamilie: ubuntu
    • Einschließen: env:test, env:staging
    • Ausschließen: goog-gke-node
  • Roll-out-Rate: Gibt die Geschwindigkeit an, mit der die Betriebssystemrichtlinien auf die VMs angewendet werden. Die Betriebssystemrichtlinien werden schrittweise eingeführt, damit Sie den Systemzustand verfolgen und Änderungen vornehmen können, wenn die Aktualisierungen in Ihrer Umgebung Regressionen verursachen. Ein Roll-out-Plan besteht aus folgenden Komponenten:

    • Wellengröße (Unterbrechungsbudget): die feste Anzahl oder der Prozentsatz der VMs, für die gleichzeitig ein Rollout durchgeführt werden kann. Das bedeutet, dass zu jedem Zeitpunkt des Rollouts Prozesse nur auf eine bestimmte Anzahl von VMs ausgerichtet werden.
    • Wartezeit: die Zeit zwischen der Anwendung von Richtlinien auf die VM durch den Dienst und der Entfernung einer VM aus dem Unterbrechungsgrenzwert. Eine Wartezeit von 15 Minuten bedeutet beispielsweise, dass der Rolloutprozess nach dem Anwenden der Richtlinien auf eine VM 15 Minuten warten muss, bevor die VM aus dem Unterbrechungsgrenzwert entfernt werden kann und das Rollout fortgesetzt werden kann. Durch die Wartezeit können Sie die Geschwindigkeit eines Rollouts steuern und auch potenzielle Rolloutprobleme frühzeitig erkennen und beheben. Wählen Sie einen Zeitraum aus, der lang genug ist, um den Status der Rollouts zu überwachen.

    Wenn Sie beispielsweise ein Ziel von 10 VMs festlegen, den Unterbrechungsgrenzwert auf 20 % setzen und eine Bereitstellungszeit von 15 Minuten festlegen, werden zu jeder Zeit nur zwei VMs aktualisiert. Nach dem Aktualisieren jeder VM muss 15 Minuten gewartet werden, bevor die VM aus dem Unterbrechungsgrenzwert entfernt und dem Rollout eine weitere VM hinzugefügt wird.

    Weitere Informationen zu Rollouts finden Sie unter Rollouts.

Beispiel einer Zuweisung von Betriebssystemrichtlinien

Die folgenden Beispiele zeigen, wie Zuweisungen von Betriebssystemrichtlinien erstellt werden. Mit diesen Beispielen können Sie Zuweisungen von Betriebssystemrichtlinien über die Google Cloud CLI oder die OS Config API erstellen.

  • Beispiel 1: installiert ein Paket
  • Beispiel 2: führt ein Skript aus
  • Beispiel 3: gibt ein Download-Repository an und installiert Pakete aus diesem Repository.

Eine Liste von Beispiel-Zuweisungen von Betriebssystemrichtlinien, die Sie in Ihrer Umgebung anwenden können, finden Sie im GitHub-Repository GoogleCloudPlatform/osconfig.

Beispiel 1

Erstellen Sie eine Zuweisung von Betriebssystemrichtlinien, die eine von einem Cloud Storage-Bucket heruntergeladene Windows-MSI-Datei installiert.

# 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

Beispiel 2

Erstellen Sie eine Zuweisung von Betriebssystemrichtlinien, die prüft, ob der Apache-Webserver auf allen Linux-VMs ausgeführt wird.

# 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

Beispiel 3

Erstellt eine Zuweisung einer Betriebssystemrichtlinie, die Google Cloud Observability-Agents auf CentOS-VMs installiert.

# 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

Nächste Schritte