Google ממליצה להשתמש בשיטות firewallPolicies להגדרת כללי מדיניות של Cloud Next Generation Firewall. במאמר הזה מוסבר איך להעביר את ההגדרות של Terraform לשימוש בשיטות firewallPolicies במקום בשיטות organizationSecurityPolicies.
השיטות של firewallPolicies מספקות אפשרויות לניהול הארגון עם אמצעי בקרה פרטניים. אנחנו ממליצים להשתמש בשיטות firewallPoliciesלניהול משאבים באמצעות Terraform. ההנחה במאמר הזה היא שאתם מכירים את השיטות המומלצות לעבודה עם Terraform ואת הפעולות הבסיסיות ב-Terraform.
בעזרת מדיניות חומת האש אפשר לקבץ כמה כללים של חומת האש שיכולים לאסור או להתיר חיבורים באופן מפורש. מידע נוסף על מדיניות וכללים של חומת אש
היתרונות של מעבר לשיטות firewallPolicies
השיטות firewallPolicies מספקות חוויה עקבית של חומת האש בהיררכיית המשאביםGoogle Cloud ומציעות יתרונות תפעוליים רבים.
אבטחה משופרת של הארגון: השיטות של
firewallPoliciesמחילות אבטחה על הארגון באמצעות אמצעי בקרה מתקדמים של הרשאות גישה (IAM).קלות התפעול: השיטות של
firewallPoliciesתומכות בשימוש בתכונות מתקדמות – כמו אובייקטים של שם דומיין שמוגדר במלואו (FQDN), אובייקטים של מיקום גיאוגרפי, זיהוי איומים, מניעת פריצות וקבוצות של כתובות – כדי להקל על התפעול ולשפר את היעילות.
איך ההעברה פועלת
לפני שמתחילים בתהליך ההעברה, צריך לבצע את השלבים הבאים, שמתוארים בקטע לפני שמתחילים:
- מוודאים שאתם משתמשים בגרסה 6.16.0 ואילך של ספק Terraform עבור Google Cloud.
- מוודאים שמצב Terraform תואם להגדרה הנוכחית.
- זיהוי המשאבים שנכללים בהיקף ההעברה, כולל כללי מדיניות, כללים ושיוכים.
- מכינים פקודות לייבוא המשאבים החדשים
firewallPoliciesלמצב של Terraform באופן ידני או באמצעות סקריפט אוטומטי. - בודקים את הגיבוי המומלץ ואת נהלי השחזור לגרסה של Terraform שבה אתם משתמשים, ויוצרים גיבוי של מצב Terraform הנוכחי.
תהליך ההגדרה מחדש של Terraform להעברת המשאבים organizationSecurityPolicies כולל את השלבים הבאים:
הסרת משאבים קיימים ממצב Terraform. מסירים משאבי
organizationSecurityPoliciesקיימים ממצב Terraform.מעדכנים את ההגדרות של Terraform. עורכים את קובצי ההגדרות של Terraform כדי להחליף את סוג המשאב, השמות והמאפיינים הקיימים בסוג המשאב, השמות והמאפיינים החדשים.
ייבוא משאבים חדשים למצב של Terraform. מייבאים את משאבי
firewallPoliciesהחדשים למצב של Terraform.
לפני שמתחילים
בקטע הזה מוסבר על הדרישות המוקדמות לתהליך ההעברה.
מוודאים שספק Terraform נתמך
מומלץ להשתמש בגרסה 6.16.0 ואילך של ספק Terraform עבורGoogle Cloud לצורך ההעברה. יכול להיות שגרסאות קודמות לא יצליחו לייבא בהגדרות מסוימות, כמו הגדרות עם לוכסנים בשמות של שיוכים.
אחרי ההעברה, צריך להשתמש בגרסה 4.0.0 ואילך, שכוללת את המשאבים הבאים ממאגר Terraform:
- google_compute_firewall_policy
- google_compute_firewall_policy_association
- google_compute_firewall_policy_rule
מוודאים שמצב Terraform עדכני
מריצים את הפקודה הבאה ב-Terraform כדי לוודא שהמצב של Terraform תואם להגדרות הנוכחיות.
terraform plan
כדי למנוע אי-התאמות, מומלץ להחיל את כל השינויים או הפעולות שממתינים לאישור לפני שממשיכים בתהליך ההעברה.
זיהוי המשאבים להעברה
מריצים את פקודת Terraform הבאה כדי ליצור רשימה של משאבים שנכללים בהיקף ההעברה, כולל מדיניות, כללים ושיוכים.
terraform state list | grep ^google_compute_organization_security_policy
הפלט אמור להיראות כך:
google_compute_organization_security_policy.policy google_compute_organization_security_policy_association.association["folders/45678"] google_compute_organization_security_policy_rule.rule["allow-inbound-ssh"] google_compute_organization_security_policy_rule.rule["deny-all-egress"]
כדי לעבור לשיטות של firewallPolicies, צריך להשתמש במשאבים האלה. שומרים אותם למועד מאוחר יותר.
הכנת פקודות ייבוא באמצעות סקריפט אוטומטי
כדי למנוע שגיאות או הגדרות חסרות במהלך המיגרציה, מומלץ להשתמש בסקריפט אוטומטי כדי ליצור את הפקודות שנדרשות לייבוא משאבי firewallPolicies למצב של Terraform.
מריצים את סקריפט Terraform הבא כדי לבצע את המשימות האלה:
- יצירת כתובות חדשות למשאבים מכתובות קיימות למשאבים.
- מקבלים מזהי משאבים מכתובות המשאבים הקיימות.
- יוצרים מזהים לייבוא (או מזהים לייבוא) ממזהי המשאבים.
- הצגת פקודות הייבוא של כל משאבי
firewallPoliciesהחדשים.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource_address; do
# Generate the new resource address for google_compute_firewall_policy
new_address=$(echo "$resource_address" | sed 's/google_compute_organization_security_policy/google_compute_firewall_policy/')
# Get the full resource ID from terraform state and remove quotes
resource_id=$(echo "$resource_address.id" | terraform console | tr -d '"')
# Use awk to parse the resource_id and generate the correct import identifier
import_id=$(echo "$resource_id" | awk -F'/' '
/association/ {
split($0, a, "/association/");
assoc_name = a[2];
gsub(/\//, "%2F", assoc_name);
print $4 "/" assoc_name;
next
}
/priority/ {
print $4 "/" $6;
next
}
{
print $4
}
')
# Print the final import command
echo "terraform import '$new_address' '$import_id'"
done
צריך את הפלט מהסקריפט הזה כדי לייבא את המשאבים. שומרים את הפלט למועד מאוחר יותר.
הכנת פקודות ייבוא באופן ידני
אם הגישה האוטומטית לא מתאימה, אפשר ליצור את הפקודות לייבוא של משאבי firewallPolicies באופן ידני. אפשר להשתמש בפקודה terraform console כדי לקבל את המזהים (ID) של המשאבים.
הפקודה הבאה של Terraform מציגה את מזהה המשאב של המשאב google_compute_organization_security_policy.policy:
echo google_compute_organization_security_policy.policy.id | terraform console
הפלט אמור להיראות כך:
"locations/global/securityPolicies/12345"
באופן דומה, מקבלים את מזהי המשאבים של שאר המשאבים שזיהיתם בקטע זיהוי המשאבים להעברה.
לחלופין, אפשר להשתמש בפקודת Terraform הבאה כדי לקבל את מזהי המשאבים של כל המשאבים שזוהו יחד:
terraform state list | grep ^google_compute_organization_security_policy | while read -r line; do echo "$line".id | terraform console; done
הפלט אמור להיראות כך:
"locations/global/securityPolicies/12345" "locations/global/securityPolicies/12345/association/locations/global/securityPolicies/23456-folders/56789" "locations/global/securityPolicies/12345/priority/1000" "locations/global/securityPolicies/12345/priority/65535"
כדי לייבא את המשאבים firewallPolicies, צריך את מזהי הייבוא שלהם. מזהי ייבוא מורכבים ממזהה מספרי שנקרא מספר מדיניות, משם שיוך וממספר עדיפות של כלל, כפי שמתואר בסעיף הזה.
המזהה המספרי אחרי התו השלישי של קו נטוי (/) הוא מספר הפוליסה, שמייצג את מזהה הייבוא של הפוליסות. בטבלה הבאה מוצגת דוגמה למזהה משאב ולמזהה ייבוא של מדיניות.
מזהה המשאב מזהה ייבוא "locations/global/securityPolicies/12345"12345מספר המדיניות יחד עם שם השיוך מייצגים את מזהה הייבוא של השיוכים. שם השיוך הוא החלק של מזהה המשאב שמופיע אחרי הרכיב
/association/.מחליפים כל תו של לוכסן (/) בשם השיוך ב-
%2Fכדי לאפשר לפקודהterraform importלפרש את שם השיוך כישות אחת. בטבלה הבאה מוצגות דוגמאות למזהה משאב ולמזהה ייבוא של שיוכים.מזהה המשאב מזהה ייבוא "locations/global/securityPolicies/12345/association/assoc-name"12345/assoc-name"locations/global/securityPolicies/12345/association/locations/global/securityPolicies/23456-folders/56789"12345/locations%2Fglobal%2FsecurityPolicies%2F23456-folders%2F56789מספר הפוליסה יחד עם מספר העדיפות של הכלל מייצגים את מזהה הייבוא של הכללים. בטבלה הבאה מוצגת דוגמה למזהה משאב ולמזהה ייבוא של כלל.
מזהה המשאב מזהה ייבוא "locations/global/securityPolicies/12345/priority/1000"12345/1000
כדי לייבא את המשאבים firewallPolicies, צריך את השמות המעודכנים של מופעי המשאבים. כדי ליצור את שמות המכונות של המשאבים, מחליפים את הקידומת google_compute_organization_security_policy ב-google_compute_firewall_policy עבור כל המשאבים שזיהיתם בקטע זיהוי משאבים להעברה. בדוגמה הבאה אפשר לראות את השמות המעודכנים של מופעי המשאבים:
google_compute_firewall_policy.policy google_compute_firewall_policy_association.association["folders/45678"] google_compute_firewall_policy_rule.rule["allow-inbound-ssh"] google_compute_firewall_policy_rule.rule["deny-all-egress"]
משלבים את שמות המופעים של המשאבים עם מזהי הייבוא המשויכים כדי לקבל את הפקודות terraform import. בדוגמה הבאה אפשר לראות את הפקודות terraform import:
terraform import 'google_compute_firewall_policy.policy' '12345' terraform import 'google_compute_firewall_policy_association.association["folders/23456"]' '12345/locations%2Fglobal%2FsecurityPolicies%2F23456-folders%2F56789' terraform import 'google_compute_firewall_policy_rule.rule["allow-inbound-ssh"]' '12345/1000' terraform import 'google_compute_firewall_policy_rule.rule["deny-all-egress"]' '12345/65535'
כדאי לשמור את פקודות הייבוא האלה לעיון בהמשך.
גיבוי של מצב Terraform
לפני שממשיכים בתהליך ההעברה, מומלץ ליצור גיבוי של מצב Terraform. כדי ליצור גיבוי בקובץ terraform.tfstate.backup, משתמשים בפקודת Terraform הבאה.
terraform state pull > terraform.tfstate.backup
אם שיניתם את קובץ המצב של Terraform בדרכים לא מכוונות, אתם יכולים להשתמש בקובץ הגיבוי terraform.tfstate.backup כדי לשחזר את קובץ המצב המקורי של Terraform באמצעות הפקודה הבאה:
terraform state push terraform.tfstate.backup
העברת organizationSecurityPolicies משאבים
בקטע הזה מוסבר איך להעביר את ההגדרות של Terraform משיטות organizationSecurityPolicies לשיטות firewallPolicies.
הסרת משאבים קיימים ממצב Terraform
כדי להסיר את המשאבים organizationSecurityPolicies שנמצאים בקטע זיהוי משאבים להעברה ממצב Terraform, מריצים את פקודת Terraform הבאה.
terraform state list | grep ^google_compute_organization_security_policy | while read -r resource; do terraform state rm "$resource" done
עדכון ההגדרה של Terraform
כדי לעדכן את קובץ התצורה של Terraform, מחפשים את ההגדרות של המשאבים שצוינו בקטע זיהוי משאבים להעברה. משתמשים בפקודה הבאה כדי למצוא את ההגדרות.
grep -r google_compute_organization_security_policy .
לדוגמה, קובץ התצורה של Terraform מגדיר את המדיניות google_compute_organization_security_policy.policy באופן הבא:
resource "google_compute_organization_security_policy" "policy" {
…
}
אפשר להשתמש בטבלה הבאה כדי לערוך את ההגדרה של משאב מדיניות אבטחה של הארגון וליצור משאב חדש של מדיניות חומת אש היררכית.
| משאב Terraform קיים | משאב חדש של Terraform | |
|---|---|---|
| שם משאב | google_compute_organization_security_policy | google_compute_firewall_policy |
| שם השדה במדיניות | display_name |
short_name |
אפשר להשתמש בטבלה הבאה כדי לערוך את ההגדרה של משאב שיוך של מדיניות אבטחה בארגון, כדי ליצור משאב שיוך חדש של מדיניות חומת אש היררכית.
| משאב Terraform קיים | משאב חדש של Terraform | |
|---|---|---|
| שם משאב | google_compute_organization_security_policy_association | google_compute_firewall_policy_association |
| שם השדה באסוציאציה | policy_id |
firewall_policy |
| שם השדה באסוציאציה | attachment_id |
attachment_target |
אפשר להשתמש בטבלה הבאה כדי לערוך את ההגדרה של משאב כלל במדיניות אבטחה של ארגון, וכך ליצור משאב חדש של כלל במדיניות חומת אש היררכית.
| משאב Terraform קיים | משאב חדש של Terraform | |
|---|---|---|
| שם משאב | google_compute_organization_security_policy_rule | google_compute_firewall_policy_rule |
| שם השדה בכלל | policy_id (מזהה מדיניות האבטחה) |
firewall_policy |
| שם השדה שהוסר מהכלל | versioned_expr |
— (field does not exist) |
הגדרה של אובייקט match:
הסרת config והחלפת layer4_config ב-layer4_configs |
match {
config {
src_ip_ranges = SRC_IP_RANGES
dest_ip_ranges = DEST_IP_RANGES
layer4_config {
ip_protocol = IP_PROTOCOL
ports = [PORT1, PORT2]
}
layer4_config {
ip_protocol = IP_PROTOCOL
}
}
}
|
match {
src_ip_ranges = SRC_IP_RANGES
dest_ip_ranges = DEST_IP_RANGES
layer4_configs {
ip_protocol = IP_PROTOCOL
ports = [PORT1, PORT2]
}
layer4_configs {
ip_protocol = IP_PROTOCOL
}
}
|
| שם השדה בכלל | layer4_config |
layer4_configs |
כדי לוודא שההגדרות של Terraform ששיניתם תקינות, מריצים את הפקודה הבאה של Terraform:
terraform validate
ייבוא משאבים למצב של Terraform
כדי לייבא משאבי firewallPolicies לקובץ ההגדרות של Terraform, מריצים את פקודות הייבוא של Terraform שנוצרו בקטע הכנת פקודות ייבוא באמצעות סקריפט אוטומטי או בקטע הכנת פקודות ייבוא באופן ידני.
אחרי שמייבאים את משאבי firewallPolicies, Terraform ניגש אליהם באמצעות השיטות firewallPolicies.
אימות ההגדרות של Terraform ותיקון אי התאמות
מריצים את פקודת Terraform הבאה כדי לבדוק אם יש פעולות כלשהן.
terraform plan
מכיוון שההעברה לא משנה משאבים בסיסיים Google Cloud , התוכנית ש-Terraform יוצרת לא צריכה להכיל פעולות.
לדוגמה, בפלט הבא שמתקבל מהרצת הפקודה terraform plan, פעולות Terraform מציינות שצריך לעדכן את name במשאב google_compute_firewall_policy_association.
Terraform will perform the following actions:
# google_compute_firewall_policy_association.association["folders/23456"] must be replaced
-/+ resource "google_compute_firewall_policy_association" "association" {
~ firewall_policy = "12345" -> "locations/global/firewallPolicies/12345"
~ id = "locations/global/firewallPolicies/12345/associations/locations%2Fglobal%2FsecurityPolicies%2F12345-folders%2F23456" -> (known after apply)
~ name = "locations/global/securityPolicies/12345-folders/23456" -> "locations/global/firewallPolicies/12345-folders/23456" # forces replacement
+ short_name = (known after apply)
# (1 unchanged attribute hidden)
}
במקרה כזה, צריך לאמת ולעדכן את קובץ ההגדרות של Terraform כך שהמאפיין name יהיה זהה לשם שכבר מותקן.
אפשר להגדיר את Terraform כך שישנה את הערך הצפוי name במשאב google_compute_firewall_policy_association לערך המקורי locations/global/securityPolicies/12345-folders/23456 על ידי החלפת השדה name בהגדרה באופן הבא:
name = "${replace(local.policy_id, "firewallPolicies", "securityPolicies")}-${each.value}"
בשינוי הקודם נעשה שימוש בפונקציית ההחלפה כדי לעדכן את הערך של local.policy_id ל-securityPolicies במקום ל-firewallPolicies. מכיוון ש-Terraform מצפה עכשיו ל-locations/global/securityPolicies/12345-folders/23456 במאפיין name, הפעלת terraform plan לא מציגה יותר פעולת Terraform שקשורה למאפיין name.
אם הפקודה terraform plan לא מציינת שינויים או פעולות של Terraform, המיגרציה הושלמה.