במאמר הזה מוסבר איך להשתמש ב-VM Manager, ב-מאגר משאבי ענן וב-BigQuery כדי לראות נתונים מותאמים אישית והודעות שגיאה על אכיפה ממדיניות מערכת ההפעלה בארגון. משתמשים בתהליך העבודה הזה כשצריך דוחות ברמת הארגון על הגדרות מותאמות אישית של מכונות וירטואליות, על פלט של סקריפטים או על כשלים בהפעלת מדיניות שלא נכללים במצבי תאימות רגילים.
כדי לאסוף נתונים בהתאמה אישית, מגדירים outputFilePath במדיניות מערכת ההפעלה. זהו הנתיב המקומי במכונה הווירטואלית שבו סקריפט המדיניות כותב טקסט מותאם אישית או פלט JSON. VM Manager קורא את הפלט מהנתיב הזה ומאחסן אותו בדוח הקצאת מדיניות מערכת ההפעלה. אחר כך תוכלו לייצא את הדוחות האלה ל-BigQuery באמצעות Cloud Asset Inventory כדי לשלוח שאילתות על התוצאות בכל מכונות ה-VM.
לפני שמתחילים
- הגדרת VM Manager
- מפעילים את Cloud Asset Inventory API.
- יוצרים מערך נתונים ב-BigQuery כדי לאחסן בו את הנתונים המיוצאים.
- יוצרים הקצאת מדיניות למערכת הפעלה שמפיקה נתונים בהתאמה אישית.
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים Cloud de Confiance by S3NS ולממשקי ה-API, לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud init
-
- הגדרת אזור ותחום כברירת מחדל
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לייצוא נתוני משאבים ל-BigQuery ולשאילת נתונים של מדיניות מערכת הפעלה בהתאמה אישית, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים ברמת הפרויקט, התיקייה או הארגון:
- צפייה במאגר משאבי הענן (
roles/cloudasset.viewer) - עריכה של נתוני BigQuery (
roles/bigquery.dataEditor) - BigQuery Job User (
roles/bigquery.jobUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש כוללים את ההרשאות שנדרשות לייצוא נתוני משאבים ל-BigQuery ולשאילתות של נתונים מותאמים אישית של מדיניות מערכת הפעלה. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי לייצא נתוני משאבים ל-BigQuery ולשאול שאילתות לגבי נתונים של מדיניות מותאמת למערכת הפעלה, צריך את ההרשאות הבאות:
-
cloudasset.assets.exportOSInventories -
cloudasset.assets.exportResource -
bigquery.datasets.get -
bigquery.tables.create -
bigquery.tables.update -
bigquery.tables.get -
bigquery.jobs.create
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
דוגמאות למדיניות מערכת ההפעלה
כדי לייצא נתונים בהתאמה אישית ולשלוח עליהם שאילתות ב-BigQuery, צריך ליצור מדיניות של מערכת ההפעלה ולהקצות אותה כך שתאסוף פלט בהתאמה אישית מהמכונות הווירטואליות. מידע נוסף זמין במאמר יצירת הקצאה של מדיניות מערכת הפעלה.
כדי לאסוף נתונים מותאמים אישית, צריך להגדיר מדיניות של מערכת הפעלה עם משאב exec שכולל את המקטעים הבאים:
-
validate: בדיקה אם המכונה הווירטואלית תואמת למצב שנבחר. במדיניות לדוגמה הבאה, הסקריפטvalidateיוצא עם הקוד101כדי לציין שהמשאב לא תואם למצב שנבחר. קוד היציאה הזה מפעיל את הסקריפטenforceבכל הערכה. -
enforce: מציין את השדהoutputFilePath, מריץ את הפקודה המותאמת אישית, כותב את הפלט לנתיב שצוין ויוצא עם קוד100כדי לציין שהאכיפה הצליחה.
מדיניות מערכת הפעלה שמחזירה מחרוזת
הפלט של מדיניות מערכת ההפעלה בדוגמה הבאה הוא מחרוזת שמכילה את גרסת הליבה של המכונה הווירטואלית:
id: return-kernel-version-policy
mode: ENFORCEMENT
resourceGroups:
- resources:
id: return-kernel-version
exec:
validate:
interpreter: SHELL
script: exit 101
enforce:
interpreter: SHELL
outputFilePath: policy-output.txt
script: uname -r > policy-output.txt && exit 100
מדיניות מערכת הפעלה שמפיקה קובץ JSON
הפלט של מדיניות מערכת ההפעלה לדוגמה הבאה הוא אובייקט JSON שמכיל את השם של מערכת ההפעלה ואת גרסת הליבה:
id: return-kernel-version-js-policy
mode: ENFORCEMENT
resourceGroups:
- resources:
id: return-kernel-version-js
exec:
validate:
interpreter: SHELL
script: exit 101
enforce:
interpreter: SHELL
outputFilePath: policy-output.json
script: |-
k=$(uname -r)
o=$(uname -a)
echo "{ \"name\": \""$o"\", \"kernel\": \""$k"\" }" > policy-output.json
exit 100
ייצוא נתונים של VM Manager ל-BigQuery
אחרי ש-VM Manager אוכף את מדיניות מערכת ההפעלה, מאגר משאבי הענן אוסף את רשימת מערכות ההפעלה שנוצרה ואת דוחות ההקצאה של מדיניות מערכת ההפעלה בכל הארגון. כשמייצאים את הנתונים האלה ל-BigQuery באמצעות הדגל --per-asset-type, מאגר משאבי ענן יוצר טבלה נפרדת לכל סוג נכס. הטבלה שנוצרת <prefix>_osconfig_googleapis_com_OSPolicyAssignmentReport
מאחסנת את הפלט של המדיניות המותאמת אישית ואת הודעות השגיאה בנוגע לאכיפה.
כדי לייצא את מלאי מערכות ההפעלה ונתוני המשאבים ל-BigQuery, צריך לבצע את השלבים הבאים:
כדי לזהות את מזהה הארגון, מריצים את הפקודה הבאה:
gcloud projects get-ancestors PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט.כדי לייצא את נתוני מלאי מערכות ההפעלה שנאספים על ידי VM Manager ממופעי מכונות וירטואליות, מריצים את הפקודה הבאה:
gcloud asset export \ --content-type=os-inventory \ --organization=ORGANIZATION_ID \ --per-asset-type \ --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/os"מחליפים את ה-placeholders הבאים בערכים שלכם:
-
ORGANIZATION_ID: מזהה הארגון. -
BQ_PROJECT_ID: המזהה של הפרויקט שמכיל את מערך הנתונים שלכם ב-BigQuery. -
DATASET_ID: המזהה של מערך הנתונים ב-BigQuery (לדוגמה,cai_exp).
-
כדי לייצא את המטא-נתונים של המשאב – כולל דוחות הקצאה של מדיניות מערכת ההפעלה – ל-BigQuery, מריצים את הפקודה הבאה:
gcloud asset export \ --content-type=resource \ --organization=ORGANIZATION_ID \ --per-asset-type \ --bigquery-table="projects/BQ_PROJECT_ID/datasets/DATASET_ID/tables/res"מחליפים את ה-placeholders הבאים בערכים שלכם:
-
ORGANIZATION_ID: מזהה הארגון. -
BQ_PROJECT_ID: המזהה של הפרויקט שמכיל את מערך הנתונים שלכם ב-BigQuery. -
DATASET_ID: המזהה של מערך הנתונים ב-BigQuery (לדוגמה,cai_exp).
בסיום הייצוא, מאגר משאבי ענן יוצר את הטבלה
res_osconfig_googleapis_com_OSPolicyAssignmentReportבמערך הנתונים ב-BigQuery. מידע נוסף זמין במאמר בנושא ייצוא תמונת מצב של נכס.-
הרצת שאילתות בנתוני מדיניות של מערכת הפעלה בהתאמה אישית ב-BigQuery
אחרי שמייצאים את נתוני הנכסים ל-BigQuery, אפשר לשלוח שאילתות לטבלה res_osconfig_googleapis_com_OSPolicyAssignmentReport כדי לראות פלט מותאם אישית והודעות שגיאה לגבי אכיפה ממדיניות מערכת ההפעלה.
כדי להריץ שאילתה ב-BigQuery:
במסוף Cloud de Confiance , עוברים לדף BigQuery.
בעורך השאילתות, מדביקים אחת משאילתות ה-SQL הבאות:
פלט של טקסט השאילתה:
השאילתה הבאה מחזירה את גרסת הליבה שמדיניות מערכת ההפעלה אוספת עבור כל מכונה וירטואלית:
SELECT resource.data.instance as instance, ANY_VALUE( SAFE_CONVERT_BYTES_TO_STRING(FROM_BASE64(REPLACE(REPLACE( resource_compliances.execResourceOutput.enforcementOutput , '-', '+'), '_', '/'))) HAVING MAX updateTime) as compliance_results FROM `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`, UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances, UNNEST(resource_compliances.configSteps) as config_steps WHERE resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-policy" AND resource_compliances.osPolicyResourceId = "return-kernel-version" AND config_steps.type = "VALIDATION" GROUP BY instanceמחליפים את
DATASET_IDבמזהה של מערך הנתונים ב-BigQuery (לדוגמה,cai_exp).הפלט של השאילתה אמור להיראות כך:
instancecompliance_resultsubuntu-15.15.0-1036-gcpubuntu-25.15.0-1044-gcprhel9-15.14.0-162.18.1.el9_1.x86_64פלט JSON של שאילתה:
השאילתה הבאה מחלצת את השדות
nameו-kernelמהפלט של JSON ומחזירה אותם כעמודות נפרדות לכל מכונה וירטואלית:WITH compliance_history AS ( SELECT updateTime, resource.data.instance, SAFE_CONVERT_BYTES_TO_STRING( FROM_BASE64( REPLACE( REPLACE( resource_compliances.execResourceOutput.enforcementOutput, '-', '+' ), '_', '/' ) ) ) as compliance_results FROM `DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`, UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) as resource_compliances, UNNEST(resource_compliances.configSteps) as config_steps WHERE resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId = "return-kernel-version-js-policy" AND resource_compliances.osPolicyResourceId = "return-kernel-version-js" AND config_steps.type = "VALIDATION" ), compliance_latest AS ( SELECT instance, ANY_VALUE(compliance_results HAVING MAX updateTime) as compliance_results FROM compliance_history GROUP BY instance ) SELECT instance, JSON_EXTRACT_SCALAR(compliance_results, "$.name") as os_name, JSON_EXTRACT_SCALAR(compliance_results, "$.kernel") as kernel_version FROM compliance_latestמחליפים את
DATASET_IDבמזהה של מערך הנתונים ב-BigQuery (לדוגמה,cai_exp).הפלט של השאילתה אמור להיראות כך:
instanceos_namekernel_versionubuntu-1Linux ubuntu-1 5.15.0-1036-gcp #39-Ubuntu SMP5.15.0-1036-gcprhel9-1Linux rhel9-1 5.14.0-162.18.1.el9_1.x86_64 #1 SMP5.14.0-162.18.1.el9_1.x86_64
כדי להריץ את השאילתה, לוחצים על Run.
מידע נוסף זמין במאמר הרצת שאילתה.
בדיקת הודעות שגיאה שקשורות לאכיפה
אם משאב של מדיניות מערכת ההפעלה נכשל באימות או באכיפה, VM Manager מתעד את הודעת השגיאה בשדה configSteps.errorMessage של הטבלה res_osconfig_googleapis_com_OSPolicyAssignmentReport. אפשר להריץ שאילתות על השדה הזה ב-BigQuery כדי לפתור בעיות שקשורות לביצוע מדיניות בארגון.
השאילתה הבאה מחזירה את הודעות השגיאה האחרונות שקשורות לאימות או לאכיפה של כל מכונה וירטואלית:
SELECT
resource.data.instance AS instance,
resource.data.osPolicyCompliances[OFFSET(0)].osPolicyId AS policy_id,
resource_compliances.osPolicyResourceId AS resource_id,
config_steps.type AS step_type,
ANY_VALUE(config_steps.errorMessage HAVING MAX updateTime) AS error_message
FROM
`DATASET_ID.res_osconfig_googleapis_com_OSPolicyAssignmentReport`,
UNNEST(resource.data.osPolicyCompliances[OFFSET(0)].osPolicyResourceCompliances) AS resource_compliances,
UNNEST(resource_compliances.configSteps) AS config_steps
WHERE
config_steps.errorMessage IS NOT NULL
AND config_steps.errorMessage != ""
GROUP BY
instance,
policy_id,
resource_id,
step_type
מחליפים את DATASET_ID במזהה של מערך הנתונים ב-BigQuery (לדוגמה, cai_exp).
הפלט של השאילתה אמור להיראות כך:
instance |
policy_id |
resource_id |
step_type |
error_message |
|---|---|---|---|---|
ubuntu-2 |
return-kernel-version-policy |
return-kernel-version |
DESIRED_STATE_ENFORCEMENT |
Error running enforce script: exit status 1 |
המאמרים הבאים
מידע נוסף על ניהול מדיניות מערכת הפעלה וניתוח נתוני תאימות זמין במקורות המידע הבאים: