מדיניות מערכת ההפעלה והקצאת מדיניות מערכת ההפעלה

מדיניות מערכת הפעלה היא קובץ שמכיל את ההגדרה הדקלרטיבית של משאבי מערכת הפעלה, כמו חבילות, מאגרי מידע, קבצים או משאבים מותאמים אישית שמוגדרים על ידי סקריפטים. מידע נוסף זמין בהגדרת המשאב של OSPolicy.

הקצאת מדיניות מערכת הפעלה היא משאב API שמשמש את VM Manager להחלת מדיניות מערכת הפעלה על מכונות וירטואליות. מידע נוסף זמין בהגדרת המשאב של OSPolicyAssignment.

מדיניות מערכת ההפעלה

מדיניות מערכת הפעלה היא קובץ JSON או YAML שמחולק לשלושה חלקים:

  • מצב. התנהגות המדיניות. אלה שני המצבים שזמינים:

    • Validation: במצב הזה, המדיניות בודקת אם המשאבים נמצאים במצב שנבחר, אבל לא מבצעת פעולה כלשהי.
    • Enforcement: במצב הזה, המדיניות בודקת אם המשאבים נמצאים במצב שנבחר, ואם לא, היא מבצעת את הפעולות הנדרשות כדי להעביר אותם למצב הזה.

    בשני המצבים, VM Manager מדווח על התאימות למדיניות מערכת ההפעלה ולמשאבים המשויכים.

  • קבוצות משאבים. השם והגרסה של מערכת ההפעלה שאליהם מתייחסים המפרטים של המשאב המשויך. לדוגמה, אפשר להגדיר מדיניות אחת להתקנה או לפריסה של סוכן במערכות הפעלה שונות ובגרסאות שונות.

  • משאבים. המפרטים שנדרשים כדי שמכונת ה-VM תגיע להגדרה שנבחרה. אפשר לציין עד 10 מזהי משאבים בכל קבוצת משאבים. אלה סוגי המשאבים שנתמכים:

    • pkg: משמש להתקנה או להסרה של חבילות Linux ו-Windows
    • repository: משמש לציון חבילות תוכנה במאגר שאפשר להתקין מהן
    • exec: משמש להפעלת מעטפת אד-הוק (/bin/sh) או סקריפט PowerShell
    • file: משמש לניהול קבצים במערכת

דוגמאות למדיניות של מערכת ההפעלה

בדוגמאות הבאות אפשר לראות איך יוצרים מדיניות של מערכת הפעלה. אפשר להעלות את מדיניות מערכת ההפעלה הזו אל Cloud de Confiance המסוף כשיוצרים הקצאה של מדיניות מערכת הפעלה.

  • דוגמה 1: התקנת חבילה.
  • דוגמה 2: הרצת סקריפט.
  • דוגמה 3: מריצים סקריפט שמאוחסן בקטגוריה של Cloud Storage ומעתיקים את קובץ הפלט לקטגוריה של Cloud Storage.
  • דוגמה 4: מציינת מאגר הורדות ומתקינה חבילות מהמאגר הזה.
  • דוגמה 5: הגדרת סריקה של מדד CIS במכונות וירטואליות שמופעל בהן מערכת הפעלה שמותאמת לקונטיינרים (COS). מידע נוסף על שימוש במדיניות מערכת ההפעלה לסריקת מדד CIS זמין במאמר אוטומציה של הפעלה ובדיקה של סטטוס התאימות ל-CIS.

רשימה מלאה של מדיניות לדוגמה של מערכת ההפעלה שאפשר להחיל בסביבה שלכם זמינה במאגר GitHub‏ GoogleCloudPlatform/osconfig.

דוגמה 1

יצירת מדיניות OS שמתקינה קובץ Windows MSI שהורד מקטגוריה של 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

דוגמה 2

יוצרים מדיניות של מערכת הפעלה שמאמתת אם שרת האינטרנט של Apache פועל במכונות הווירטואליות של 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

דוגמה 3

יוצרים מדיניות למערכת ההפעלה שמאמתת אם שרת האינטרנט של Apache פועל במכונות הווירטואליות של Linux. בדוגמה הזו, סקריפט apache-validate.sh מאוחסן בקטגוריה של Cloud Storage. כדי להעתיק את הפלט לקטגוריה של Cloud Storage, סקריפט apache-enforce.sh צריך לכלול פקודה שדומה לפקודה הבאה:

      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

דוגמה 4

יצירת מדיניות מערכת הפעלה שמתקינה סוכני Google Cloud Observability במכונות וירטואליות של 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

דוגמה 5

המדיניות מגדירה סריקה תקופתית ברמה 1 של CIS עם תקופת ברירת המחדל של פעם ביום.

# 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

הקצאת מדיניות מערכת ההפעלה

הקצאת מדיניות של מערכת הפעלה כוללת את המקטעים הבאים:

  • מדיניות OS. מדיניות אחת או יותר של מערכת ההפעלה שרוצים להחיל על המכונה הווירטואלית. כדי להוריד או ליצור מדיניות, אפשר לעיין במאמר בנושא מדיניות של מערכת הפעלה.

  • מכונות וירטואליות ליעד. קבוצה של מכונות וירטואליות באזור אחד שרוצים להחיל עליהן את המדיניות. באזור מסוים, אפשר להגביל או להגדיר הגבלות על מכונות וירטואליות על ידי ציון שמות מערכות ההפעלה והכללה או החרגה של תוויות. אפשר לבחור שילוב של האפשרויות הבאות:

    • אזור: מציינים את Cloud de Confiance by S3NS האזור שבו רוצים להפעיל את הקצאת מדיניות מערכת ההפעלה.
    • השם והגרסה של מערכת ההפעלה: מציינים את השם הקצר והגרסה של מערכת ההפעלה שאליה חלה מדיניות מערכת ההפעלה. דוגמה לאופן טירגוט של כמה מערכות הפעלה מופיעה בדוגמה 4.

    כדי לסנן מכונות וירטואליות לפי מערכת ההפעלה, אפשר להשתמש בכל אחד מהשמות הקצרים הבאים בקובצי ה-YAML של מדיניות מערכת ההפעלה:

    שם מלא שם מקוצר
    CentOS centos
    מערכת הפעלה שמותאמת לקונטיינרים (COS) cos
    Debian debian
    openSUSE Leap opensuse-leap
    Oracle Linux ol
    ‫Red Hat Enterprise Linux‏ (RHEL) rhel
    Rocky Linux rocky
    ‫SUSE Linux Enterprise Server‏ (SLES) sles
    Ubuntu ubuntu
    Windows Server windows

    הרשימה המלאה של מערכות ההפעלה והגרסאות שתומכות במדיניות מערכת ההפעלה זמינה במאמר פרטים על מערכת ההפעלה.

    • ‫include set: מציין את מכונות ה-VM שהמדיניות של מערכת ההפעלה חלה עליהן על סמך תוויות של מכונות וירטואליות או של מערכת.
    • הגדרה של החרגה: מציינת את המכונות הווירטואליות שמדיניות מערכת ההפעלה צריכה להתעלם מהן על סמך תוויות של מכונות וירטואליות או של המערכת.

    גם עבור קבוצות תוויות להכללה וגם עבור קבוצות תוויות להחרגה, המערכת מקבלת תווית מחרוזת יחידה אם היא תואמת למוסכמת מתן השמות שבה המערכת משתמשת. עם זאת, רוב התוויות מוגדרות בזוגות של key:value. מידע נוסף על תוויות זמין במאמר הוספת תוויות למשאבים.

    לדוגמה, אפשר לבחור את כל המכונות הווירטואליות של Ubuntu בסביבת הבדיקה, ולהחריג את אלה שמריצות Google Kubernetes Engine, על ידי ציון הפרטים הבאים:

    • שם מקוצר של מערכת ההפעלה: ubuntu
    • כלול: env:test, env:staging
    • לא כולל: goog-gke-node
  • שיעור השקה. המדיניות הזו קובעת את הקצב שבו יוחלו כללי המדיניות של מערכת ההפעלה על המכונות הווירטואליות. ההפצה של מדיניות מערכת ההפעלה מתבצעת בהדרגה כדי לאפשר לכם לעקוב אחרי תקינות המערכת ולבצע שינויים אם העדכונים גורמים לרגרסיות בסביבה שלכם. תוכנית השקה כוללת את הרכיבים הבאים:

    • גודל הגל (תקציב ההפרעה): מספר קבוע או אחוז קבוע של מכונות וירטואליות שיכולות לחוות פריסה בו-זמנית. המשמעות היא שבכל רגע במהלך ההשקה, רק מספר מסוים של מכונות וירטואליות מוגדר כמטרה.
    • זמן ההמתנה: הזמן שחולף מהרגע שבו השירות מחיל מדיניות על מכונת ה-VM ועד לרגע שבו מכונת ה-VM מוסרת מסף השיבוש. לדוגמה, זמן המתנה של 15 דקות אומר שתהליך ההשקה צריך להמתין 15 דקות אחרי החלת המדיניות על מכונה וירטואלית, לפני שהוא יכול להסיר את המכונה הווירטואלית מסף השיבוש ולהמשיך בהשקה. זמן ההמתנה עוזר לשלוט במהירות ההשקה, וגם מאפשר לכם לזהות ולפתור בעיות פוטנציאליות בהשקה בשלב מוקדם. בוחרים פרק זמן ארוך מספיק כדי לעקוב אחרי הסטטוס של ההשקות.

    לדוגמה, אם מגדירים יעד של 10 מכונות וירטואליות, סף שיבוש של 20% וזמן המתנה של 15 דקות, אז בכל רגע נתון, רק 2 מכונות וירטואליות מתוזמנות לעדכון. אחרי שכל מכונה וירטואלית מתעדכנת, צריכות לעבור 15 דקות לפני שהמכונה הווירטואלית מוסרת מסף השיבוש ומכונה וירטואלית אחרת מתווספת לפריסה.

    מידע נוסף על השקות זמין במאמר השקות.

דוגמה להקצאת מדיניות מערכת הפעלה

בדוגמאות הבאות אפשר לראות איך יוצרים הקצאות של מדיניות מערכת הפעלה. אפשר להשתמש בדוגמאות האלה כדי ליצור הקצאות של מדיניות מערכת הפעלה מ-Google Cloud CLI או מ-OS Config API.

  • דוגמה 1: התקנת חבילה.
  • דוגמה 2: הרצת סקריפט.
  • דוגמה 3: מציינת מאגר להורדה ומתקינה חבילות מהמאגר הזה.
  • דוגמה 4: הקצאת מדיניות של מערכת הפעלה שחלה על כמה מערכות הפעלה.

רשימה של הקצאות לדוגמה של מדיניות מערכת הפעלה שאפשר להחיל בסביבה שלכם זמינה במאגר GitHub‏ GoogleCloudPlatform/osconfig.

דוגמה 1

יוצרים הקצאת מדיניות של מערכת הפעלה שמתקינה קובץ MSI של Windows שהורד מקובץ של 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

דוגמה 2

יוצרים הקצאת מדיניות למערכת ההפעלה שמאמתת אם שרת האינטרנט של Apache פועל בכל המכונות הווירטואליות של 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

דוגמה 3

יוצר הקצאה של מדיניות מערכת הפעלה שמתקינה סוכני Google Cloud Observability במכונות וירטואליות של 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

דוגמה 4

יוצר הקצאת מדיניות של מערכת הפעלה שחלה על כמה מערכות הפעלה של Linux ו-Windows.

# An OS policy assignment that applies to multiple Linux and Windows operating systems.
id: multi-os
mode: VALIDATION
resourceGroups:
  - inventoryFilters:
      - osShortName: debian
      - osShortName: centos
      - osShortName: ubuntu
      - osShortName: rhel
      - osShortName: rocky
      - osShortName: cos
      - osShortName: opensuse-leap
      - osShortName: ol
      - osShortName: sles
    resources:
      - id: linux
        exec:
          validate:
            interpreter: SHELL
            # Linux-specific script.
            # Exit code of 100 = resource is in the desired state
            script: |
              exit 100
  - inventoryFilters:
      - osShortName: windows
    resources:
      - id: windows
        exec:
          validate:
            interpreter: POWERSHELL
            # Windows-specific script.
            # Exit code of 100 = resource is in the desired state
            script: |
              exit 100

מה השלב הבא?