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

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

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

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

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

הרשאות

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

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

  • אדמין של הקצאת מדיניות OS‏ (roles/osconfig.osPolicyAssignmentAdmin). התפקיד הזה כולל הרשאות ליצירה, למחיקה, לעדכון, לקבלת רשימה ולהצגת הקצאות של מדיניות OS.
  • ‫OSPolicyAssignment Editor (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. מידע נוסף על יצירת מדיניות למערכת ההפעלה ודוגמאות למדיניות כזו זמין במאמר מדיניות למערכת ההפעלה.
    2. נכנסים לדף OS policies במסוף Google Cloud .

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

    3. לוחצים על Create zonal (יצירת אזור).

    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. מידע נוסף על יצירת הקצאות של מדיניות OS

      אם רוצים להשתמש בהקצאת מדיניות לדוגמה של מערכת הפעלה בפורמט 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). מידע נוסף על פעולות ממושכות זמין במאמר בנושא פעולות ממושכות.

ממשק ה-API של OS Config יוצר 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 בשם המשאב המלא של הפעולה שמוחזרת מהפעולה create,‏ update או delete.

דוגמה

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 במסוף Google Cloud .

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

  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 בשם המשאב המלא של הפעולה שמוחזרת מהפעולה create,‏ update או delete.

דוגמה

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

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

מה השלב הבא?