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

שימוש במדיניות מערכת הפעלה כדי לשמור על הגדרות תוכנה עקביות במכונות וירטואליות (VM) של Linux ו-Windows.

לפני שמתחילים

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

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

הרשאות

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

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

  • אדמין של הקצאת מדיניות OS‏ (roles/osconfig.osPolicyAssignmentAdmin). התפקיד הזה כולל הרשאות ליצירה, למחיקה, לעדכון, לקבלת רשימה ולהצגת רשימה של הקצאות מדיניות OS.
  • כלי העריכה של OSPolicyAssignment‏ (roles/osconfig.osPolicyAssignmentEditor). הכלי הזה מכיל הרשאות לעדכון, לקבלת רשימה ולצפייה ברשימה של הקצאות של מדיניות מערכת ההפעלה.
  • צפייה בהקצאת מדיניות של מערכת הפעלה (roles/osconfig.osPolicyAssignmentViewer). ההרשאה הזו מאפשרת גישת קריאה בלבד כדי לקבל ולרשום הקצאות של מדיניות מערכת הפעלה.

פקודה לדוגמה להגדרת הרשאות

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

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member user:USER_ID@gmail.com \
        --role roles/osconfig.osPolicyAssignmentAdmin

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט
  • USER_ID: שם המשתמש של המשתמש ב-Google Workspace

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

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

  1. הגדרת VM Manager
  2. מקצים למשתמשים את ההרשאות הנדרשות.
  3. עיון במדיניות מערכת ההפעלה ובהקצאת מדיניות מערכת ההפעלה
  4. יוצרים את משאבי המדיניות של מערכת ההפעלה.
  5. כדי ליצור ולהטמיע את הקצאת מדיניות מערכת ההפעלה, משתמשים באחת מהשיטות הבאות:

    המסוף

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

    1. בלקוח המקומי, יוצרים או מורידים מדיניות של מערכת הפעלה. הקובץ צריך להיות בפורמט JSON או YAML. מידע נוסף על יצירת מדיניות OS או על מדיניות OS לדוגמה זמין במאמר מדיניות OS.
    2. נכנסים לדף OS policies במסוף Cloud de Confiance .

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

    3. לוחצים על יצירת אזור.

    4. בקטע Assignment ID, מציינים שם להקצאת מדיניות מערכת ההפעלה. מוסכמות למתן שמות למשאבים

    5. בקטע OS policies (מדיניות מערכת ההפעלה), מעלים את קובץ המדיניות של מערכת ההפעלה.

    6. בקטע Target VM instances (מכונות וירטואליות לטירגוט), מציינים את המכונות הווירטואליות לטירגוט.

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

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

      • שם מקוצר של מערכת ההפעלה: ubuntu
      • כלול: env:test, env:staging
      • לא כולל: goog-gke-node

      בוחרים מכונות וירטואליות לטירגוט.

    7. מגדירים תוכנית השקה.

      • מציינים את גודל הגל (נקרא גם תקציב השיבושים). לדוגמה, 10%.
      • מציינים את זמן ההמתנה. לדוגמה, 15 דקות.

        הגדרת הפריסה.

    8. לוחצים על הפעלת ההשקה.

    gcloud

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

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

    2. משתמשים בפקודה os-config os-policy-assignments create כדי ליצור הקצאה של מדיניות מערכת הפעלה ולפרוס אותה במיקום שצוין.

      gcloud compute os-config os-policy-assignments create OS_POLICY_ASSIGNMENT_ID \
         --location=ZONE \
         --file=OS_POLICY_ASSIGNMENT_FILE \
         --async
      

      מחליפים את מה שכתוב בשדות הבאים:

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

      דוגמה

      gcloud compute os-config os-policy-assignments create my-os-policy-assignment \
          --location=asia-south1-a \
          --file=/downloads/assignment-config.yaml \
          --async
      

      הפלט אמור להיראות כך:

      Create request issued for: [my-os-policy-assignment]
      Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.
      
    3. רושמים את שם המשאב שמוגדר במלואו עבור הפעולה. בדוגמה הקודמת, השם המוגדר במלואו של המשאב הוא:

      projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa
      

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

    Terraform

    כדי ליצור הקצאת מדיניות של מערכת הפעלה, משתמשים במשאב google_os_config_os_policy_assignment.

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

    resource "google_os_config_os_policy_assignment" "my_os_policy_assignment" {
    
      name        = "my-os-policy-assignment"
      location    = "us-west1-a"
      description = "An OS policy assignment that verifies if the Apache web server is running on CentOS VMs."
    
      instance_filter {
        # filter to select VMs
        all = false
    
        exclusion_labels {
          labels = {
            label-one = "goog-gke-node"
          }
        }
    
        inclusion_labels {
          labels = {
            env = "test",
          }
        }
    
        inventories {
          os_short_name = "centos"
          os_version    = "7*"
        }
      }
    
      os_policies {
        #list of OS policies to be applied to VMs
        id   = "apache-always-up-policy"
        mode = "ENFORCEMENT"
    
        resource_groups { #list of resource groups for the policy
          resources {
            id = "ensure-apache-is-up"
    
            exec {
              validate {
                interpreter = "SHELL"
                script      = "if systemctl is-active --quiet httpd; then exit 100; else exit 101; fi"
              }
    
              enforce {
                interpreter = "SHELL"
                script      = "systemctl start httpd && exit 100"
              }
            }
          }
    
          inventory_filters {
            os_short_name = "centos"
            os_version    = "7*"
          }
        }
    
        allow_no_resource_group_match = false #OS policy compliance status
        description                   = "An OS policy that verifies if the Apache web server is running on Linux VMs."
      }
    
      rollout {
        #define rollout parameters
        disruption_budget {
          fixed = 1
        }
        min_wait_duration = "3.5s"
      }
    }

    כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

    REST

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

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

      אם רוצים להשתמש בהקצאת מדיניות לדוגמה של מערכת הפעלה בפורמט YAML, צריך להמיר אותה לפורמט JSON.

    2. ב-API, יוצרים בקשת POST אל ה-method‏ projects.locations.osPolicyAssignments.create.

      בגוף הבקשה, מדביקים את המפרטים של הקצאת מדיניות מערכת ההפעלה מהשלב הקודם.

      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/osPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
       JSON_OS_POLICY
      }
      

      מחליפים את מה שכתוב בשדות הבאים:

      • PROJECT_ID: מזהה הפרויקט
      • OS_POLICY_ASSIGNMENT_ID: השם של הקצאת מדיניות מערכת ההפעלה
      • JSON_OS_POLICY: המפרטים של הקצאת מדיניות מערכת ההפעלה שנוצרו בשלב הקודם. הפורמט חייב להיות JSON. מידע נוסף על הפרמטרים והפורמט זמין במאמר Resource: OSPolicyAssignment.
      • ZONE: האזור שבו רוצים ליצור את הקצאת מדיניות מערכת ההפעלה

      דוגמה

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

      1. המרת הדוגמה ל-JSON
      2. שולחים את הבקשה הבאה:
      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/osPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
        "osPolicies": [
          {
            "id": "setup-repo-and-install-package-policy",
            "mode": "ENFORCEMENT",
            "resourceGroups": [
              {
                "resources": [
                  {
                    "id": "setup-repo",
                    "repository": {
                      "yum": {
                        "id": "google-cloud-monitoring",
                        "displayName": "Google Cloud Monitoring Agent Repository",
                        "baseUrl": "https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el8-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": "stackdriver-agent"
                      }
                    }
                  }
                ]
              }
            ]
          }
        ],
        "instanceFilter": {
          "inclusionLabels": [
            {
              "labels": {
                "used_for": "testing"
              }
            }
          ]
        },
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": {
            "seconds": 300
          }
        }
      }
      

השקות

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

כשקריאות ל-method של API עשויות להימשך זמן רב, ה-API מחזיר פעולות ממושכות (LRO). מידע נוסף על פעולות ממושכות זמין במאמר בנושא פעולות ממושכות.

ממשק OS Config API יוצר LRO בכל פעם שיוצרים, מעדכנים או מוחקים הקצאה של מדיניות מערכת הפעלה. כל LRO מחזיר משאב של פעולה. משאב הפעולה אמור להיראות כך:

Create request issued for: [my-os-policy-assignment]
Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.

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

אפשר להשתמש ב-Google Cloud CLI כדי לקבל את הפרטים של השקת גרסה או כדי לבטל השקת גרסה.

קבלת פרטים על השקת גרסה

כדי לקבל פרטים על השקת תכונה, משתמשים בפקודה os-config os-policy-assignments operations describe.

gcloud compute os-config os-policy-assignments operations describe FULLY_QUALIFIED_OPERATION_NAME

מחליפים את FULLY_QUALIFIED_OPERATION_NAME בשם המשאב המלא של הפעולה שמוחזרת מהפעולה ליצירה, לעדכון או למחיקה.

דוגמה

gcloud compute os-config os-policy-assignments operations describe \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

פלט לדוגמה

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignmentOperationMetadata
  apiMethod: CREATE
  osPolicyAssignment: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment@cfb78790-41d8-40d1-b8a1-1eaf6011b909
  rolloutStartTime: '2021-04-15T00:53:52.963569Z'
  rolloutState: SUCCEEDED
  rolloutUpdateTime: '2021-04-15T00:53:53.094041Z'
name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/cfb78790-41d8-40d1-b8a1-1eaf6011b909
response:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignment
  baseline: true
  description: My test policy
  instanceFilter:
    inclusionLabels:
    - labels:
        label-key-not-targeting-instances: label-value-not-targeting-instances
  name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment
  osPolicies:
  - id: q-test-policy
    mode: ENFORCEMENT
    resourceGroups:
    - osFilter:
        osShortName: centos
        osVersion: '7'
      resources:
      - id: add-repo
        repository:
          yum:
            baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all

ביטול השקה

המסוף

  1. נכנסים לדף OS policies במסוף Cloud de Confiance .

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

  2. לוחצים על הכרטיסייה הקצאות אזוריות.

  3. בקטע 'הקצאת מדיניות למערכת ההפעלה', בשורה של הקצאת המדיניות שרוצים לבטל את ההשקה שלה, לוחצים על פעולה ()> ביטול ההשקה.

  4. לוחצים על ביטול ההשקה.

gcloud

כדי לבטל את ההשקה, משתמשים בפקודה gcloud compute os-config os-policy-assignments operations cancel.

gcloud compute os-config os-policy-assignments operations cancel FULLY_QUALIFIED_OPERATION_NAME

מחליפים את FULLY_QUALIFIED_OPERATION_NAME בשם המשאב המלא של הפעולה שמוחזרת מהפעולה ליצירה, לעדכון או למחיקה.

דוגמה

gcloud compute os-config os-policy-assignments operations cancel \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

אם הפקודה מצליחה, לא מוחזר פלט.

מה השלב הבא?