במדריך הזה מוסבר איך לוודא שהתשתית שלכם כקוד (IaC) לא מפרה את מדיניות הארגון או את אמצעי הזיהוי של Security Health Analytics.
מטרות
- יצירת מצב אבטחה.
- פריסת המצב בפרויקט.
- בודקים אם יש הפרות בקובץ לדוגמה של Terraform.
- מתקנים את ההפרות בקובץ Terraform ובודקים שוב את הקובץ כדי לוודא שהתיקון בוצע.
לפני שמתחילים
הגדרת ההרשאות
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הארגון.
-
בעמודה Principal, מחפשים את כל השורות שמזהות אתכם או קבוצה שאתם נכללים בה. כדי לדעת באילו קבוצות אתם נכללים, פנו לאדמין.
- בודקים את העמודה Role בכל השורות שבהן מצוין או מופיע השם שלכם, כדי לראות אם רשימת התפקידים כוללת את התפקידים הנדרשים.
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הארגון.
- לוחצים על Grant access.
-
בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל מזהה המשתמש הוא כתובת האימייל של חשבון Google.
- לוחצים על Select a role ומחפשים את התפקיד.
- כדי לתת עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
- לוחצים על Save.
צריך לוודא שיש לכם בארגון את התפקיד או התפקידים הבאים: Project Creator ואדמין של מצב האבטחה
בדיקת התפקידים
מתן התפקידים
הגדרת Cloud Shell
- כדי למצוא את מזהה הארגון:
gcloud organizations list
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
הכנת הסביבה
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
אם שירותי מצב האבטחה וממשקי הניהול של Security Command Center לא מופעלים, מפעילים אותם:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com -
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
אם שירותי מצב האבטחה וממשקי הניהול של Security Command Center לא מופעלים, מפעילים אותם:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - מעתיקים את מספר הפרויקט. כדי להגדיר את משאב היעד במהלך הפריסה של המצב, תצטרכו את מספר הפרויקט.
gcloud projects describe PROJECT_ID
- מאתחלים את Terraform:
terraform init
יצירה ופריסה של מצב אבטחה
ב-Cloud Shell, מפעילים את Cloud Shell Editor. כדי להפעיל את העורך, לוחצים על
Open Editor בסרגל הכלים של חלון Cloud Shell.יוצרים קובץ YAML בשם
example-standard.yaml.מדביקים את הקוד הבא בקובץ:
name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard state: ACTIVE policySets: - policies: - constraint: orgPolicyConstraintCustom: customConstraint: actionType: ALLOW condition: "resource.initialNodeCount == 3" description: Set initial node count to be exactly 3. displayName: fixedNodeCount methodTypes: - CREATE name: organizations/ORGANIZATION_ID/customConstraints/custom.fixedNodeCount resourceTypes: - container.googleapis.com/NodePool policyRules: - enforce: true policyId: fixedNodeCount - constraint: securityHealthAnalyticsCustomModule: config: customOutput: {} description: Set MTU for a network to be exactly 1000. predicate: expression: "!(resource.mtu == 1000)" recommendation: Only create networks whose MTU is 1000. resourceSelector: resourceTypes: - compute.googleapis.com/Network severity: HIGH displayName: fixedMTU moduleEnablementState: ENABLED policyId: fixedMTU - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_POLICY_ONLY_DISABLED policyId: bucket_policy_only_disabled - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_LOGGING_DISABLED policyId: bucket_logging_disabled policySetId: policySet1
מחליפים את ORGANIZATION_ID במזהה הארגון.
ב-Cloud Shell, יוצרים את מצב האבטחה:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
מעתיקים את מזהה הגרסה של מצב האבטחה שהפקודה יוצרת.
פורסים את מצב האבטחה לפרויקט:
gcloud scc posture-deployments create organizations/ORGANIZATION_ID/locations/global/postureDeployments/example-standard \ --posture-name=organizations/ORGANIZATION_ID/locations/global/postures/example-standard \ --posture-revision-id="POSTURE_REVISION_ID" \ --target-resource=projects/PROJECT_NUMBER
מחליפים את מה שכתוב בשדות הבאים:
-
ORGANIZATION_ID: מזהה הארגון. -
POSTURE REVISION_ID: מזהה הגרסה של המצב שמופיע בתוצאות שהעתקתם. -
PROJECT_NUMBER: מספר הפרויקט.
-
יצירת קובץ Terraform ואימות
ב-Cloud Shell, מפעילים את Cloud Shell Editor.
יוצרים קובץ Terraform בשם
main.tf.מדביקים את הקוד הבא בקובץ:
terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 100 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 2 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = false }מחליפים את
PROJECT_IDבמזהה הפרויקט שיצרתם.ב-Cloud Shell, יוצרים את קובץ התוכנית מ-Terraform וממירים אותו לפורמט JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
יצירת דוח אימות IaC עבור
mainplan.json:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
הפקודה הזו מחזירה דוח אימות של IaC שמתאר את ההפרות הבאות:
- הערך של
mtuעבורexample_networkהוא לא 1000. - הערך של
initial_node_countעבורexample_node_poolהוא לא 3. - לא מופעלת גישה אחידה ברמת הקטגוריה
example_bucket. - הרישום ביומן לא מופעל ב-
example_bucket.
- הערך של
טיפול בהפרות
ב-Cloud Shell, מפעילים את Cloud Shell Editor.
מעדכנים את הקובץ
main.tfעם השינויים הבאים:terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 1000 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 3 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = true logging { log_bucket = "my-unique-logging-bucket" // Create a separate bucket for logs log_object_prefix = "tf-logs/" // Optional prefix for better structure } }מחליפים את
PROJECT_IDבמזהה הפרויקט שיצרתם.ב-Cloud Shell, יוצרים את קובץ התוכנית של Terraform וממירים אותו לפורמט JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
יוצרים מחדש את דוח האימות של IaC עבור
mainplan.json:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת הפרויקט
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID
המאמרים הבאים
- כדאי לעיין במאמר אימות של IaC בהתאם למדיניות הארגון.
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.