תשתית כקוד: Terraform, Anable
תשתית כקוד: Terraform, Anable
1) מדוע IC וכיצד כלים שונים
Terraform - תזמור הצהרתי: יוצר/משנה תשתית ענן (VPC, K8s, LB, DB, IAM) באמצעות ספקים. מנהל משאבי חיים ומחסן את המדינה.
Ansible - פרוצדורלי קונפיג-IC וניהול הגדרות: הגדרות מארחים/תוכנה (חבילות, קבצים, שירותים), יודע איך לספק יישומים, תבנית, תזמור של צעדים. ללא סוכן (SSH/WinRM), עם אידמפוטנטיות של משימות.
שילוב: Terraform - ”ממה עשויה הפלטפורמה,” Ansible - ”איך היא מוגדרת ומושקת”.
2) מבנה של מחסומים ושכבות
אנחנו ממליצים על 3 שכבות:1. רשתות, IAM, KMS, יומני בסיס/ניטור.
2. פלטפורמה: אשכולות קוברנטס, מסדי נתונים, תורים, ערימת תצפית.
3. עומסי עבודה: רווחים/שמות, חשבונות שירות, מדיניות, תצורות.
Repo:- מודולים וסביבות ('מודולים/',' קנאה/').
- תפקידים ('תפקידים/'), ספרי משחק (' ספרי משחק/'), מלאי ('המצאות/').
- חוקים של אופ "א/קונסטלציה.
- תסריטי CI/CD (מוך/תוכנית/יישום/מבחן).
3) טרה פורם: מודולים, מצב, סביבות
3. 1 מודולים
קטן, בשימוש חוזר: "vpc", "eks'," rds "," redis "," alb "," iam-face ".
כניסות ”משתנים”. TF ', Outputs = "Outfuts. tf ', גרסאות - דרך הרישום של מודולים/git-תגיות.
hcl module "vpc" {
source = "git::ssh://git@repo/iac. git//modules/vpc? ref=v1. 6. 0"
name = "prod-core"
cidr = "10. 0. 0. 0/16"
azs = ["eu-central-1a","eu-central-1b"]
}
3. 2 מצב
אחורי מרוחק (S3/GCS + DynamOdB/LockTable) + מנעולים.
הפרדה לפי סביבה: Tfstate ',' היערכות. Tfstate '.
מצב-דריפט: ”תכנית טרפורם” במודיעה על לוח זמנים; התראה כאשר נסחף.
hcl terraform {
backend "s3" {
bucket = "iac-state"
key = "prod/network/terraform. tfstate"
region = "eu-central-1"
dynamodb_table = "iac-locks"
encrypt = true
}
}
3. 3 מרחבי עבודה/קנאות
אפשרויות:- ספריות נפרדות 'קנאה/פרוד', 'קנאה/שלב' (ויזואלי).
- מקומות עבודה עבור וריאציות אור, אבל להימנע מערבוב סודות.
- פרמטרים באמצעות 'tfvars': "pod. Tfvars', 'במה. Tfvares '.
4) Ansible: תפקידים, ממציאים, Idempotence
4. 1 תפקידים וספרי שעשועים
תקן גלקסיה:
roles/
nginx/
tasks/main. yml templates/.j2 handlers/main. yml defaults/main. yml playbooks/
site. yml
דוגמא לספר מהלכים:
yaml
- hosts: web become: true roles:
- role: nginx vars:
nginx_listen_port: 8080
4. 2 מלאי ודינמיקה
'inventory/prod/מארחים. yml' + משתנים 'קבוצה _ vars/host _ vars'.
מלאי דינמי: ”aws _ ec2”, ”gcp _ compute”, ”kubernetes”. ליבה ".
4. 3 אידמפוטנטיות
השתמש במודולים (לא ”מעטפת”) היכן שאפשר.
'שינוי _ כאשר '/' check _ mode' עבור ריצות יבשות.
מפעילים רק להרהר בשינויים.
5) סודות ותצורות
Terraform: הפרשת ערכים באמצעות ”רגישות = אמת”; הסודות עצמם אינם נמצאים במדינה (חנות ב-AWS Secrets Manager/HashiCorp Vault/KMS).
Ansible: כספת להצפנה משתנה (”Ansible-vault הצפנה”), אינטגרציה עם HashiCorp Vault/KMS.
GitOps: סודות בריפו/אחסון נפרד, גישה על ידי חיסיון מינימלי.
6) מדיניות כקוד
OPA/Confest עבור תוכניות Terraform: איסור על S3 ציבורי, SG פתוח, משאבים לא מתוגגים (תגיות).
Terraform ענן/Enterprise - סנטינל כאלטרנטיבה.
מוך Ansible: סגנון וביטחון (ללא 'סודו: כן' איפה לא צריך, ללא raw-shell).
rego package terraform. security
deny[msg] {
input. resource_type == "aws_security_group_rule"
input. values. cidr_blocks[_] == "0. 0. 0. 0/0"
input. values. from_port == 22 msg:= "SSH from 0. 0. 0. 0/0 is forbidden"
}
7) בדיקת ICAC
Terraform: 'tflint',' tfsec '/' checov ', Terratest (Go) לבדיקות אינטגרציה.
"Ansible-wint', מולקולה (+ Docker/Podman/EC2) לבדיקת תפקידים.
בדיקות עשן לאחר התקף: גשושיות HTTP, פורט/תהליכים, זכויות.
8) CI/CD -GitOps
צינור (בקשת משיכה/מיזוג):1. מוך/סק: tflint, tfsec/checkov, ansible-wint.
2. תכנית: ”תכנית טרפורמית” עם פרסום של חפץ (תגובה במר).
3. שער המדיניות: Confest/Sentinel.
4. יישום (ידני/מאושר): רק על ראשי עם חתימה של חפצים.
5. פריסה בלתי אפשרית: "- צ 'ק" על הבמה, ואז - "diff' in prod.
6. פוסט-בדיקות: סינתטי/גשוש, לשחרר לוח מחוונים.
GitOps:- שמור על מניפסטים כמקור של אמת; Argo CD/Flux עבור קוברנטס, אבל אשכולות/פרימיטיבים בסיסיים דרך Terraform.
9) תבניות עבור קוברנטס, רשתות, מסדי נתונים
9. 1 קוברנטס
TERRAFORM: EKS/GKE/AKS אשכולות, צמתים, IAM, LAID, LB.
Ansible: AMI/bastion preduction, image assembly/repositories, postainall (חוטבי עצים/סוכנים/אוטל).
9. 2 רשתות והיקף
Terraform: VPC/subnets/NAT/Transit-Gateway/WAF, מסלולים.
Ansible: NGINX/Transfoy/HAPROXY config, TLS, WAF rules config.
9. 3 בסיסים/מטמונים/תורים
Terraform: RDS/CloudSQL group parmeter, Redis/ElastiCache, Kafka/MSK.
חימום מטמון, עבודות נדידה, הגדרת גיבויים/סוכנים.
10) דוגמאות של תצורות
10. 1 Terraform - RDS PostgreSQL + SG
hcl module "db" {
source = "terraform-aws-modules/rds/aws"
engine = "postgres"
engine_version = "15. 4"
instance_class = "db. m6g. large"
allocated_storage = 100 name = "core"
username = var. db_user password = var. db_password # см. secret data source vpc_security_group_ids = [module. db_sg. security_group_id]
multi_az = true backup_retention = 7
}
module "db_sg" {
source = "terraform-aws-modules/security-group/aws"
name = "db-core"
vpc_id = module. vpc. vpc_id ingress_cidr_blocks = ["10. 0. 0. 0/8"]
ingress_rules = ["postgresql-tcp"]
}
10. 2 טרה ־ פורם - מקור המידע של הסוד
hcl data "aws_secretsmanager_secret_version" "db" {
secret_id = "prod/db/core"
}
variable "db_password" {
type = string sensitive = true default = jsondecode(data. aws_secretsmanager_secret_version. db. secret_string). password
}
10. 3 Ansible - תפקיד postgresql-client (מקטע)
yaml
- name: Install packages apt:
name: [ "postgresql-client-15" ]
state: present update_cache: yes
- name: Create. pgpass copy:
dest: /home/deploy/.pgpass mode: '0600'
content: "{{ db_host }}:5432:core:{{ db_user }}:{{ db_password }}"
no_log: true
- name: Smoke query shell: psql -h {{ db_host }} -U {{ db_user }} -d core -c "select 1"
register: psql_out changed_when: false
10. 4 קביל - NGINX עם תבנית
yaml
- name: Deploy nginx. conf template:
src: templates/nginx. conf. j2 dest: /etc/nginx/nginx. conf notify: Restart nginx
- name: Ensure nginx running service:
name: nginx state: started enabled: true
handlers:
- name: Restart nginx service: { name: nginx, state: restarted }
11) סחיפה וניהול ציות
תוכנית טרפורם תקופתית במפתח קריאה בלבד; יוצר כרטיס כשיש אי התאמה.
צ 'ק שנקבע לתפקידים קריטיים (מצב ביקורת).
דיווחים: מדיניות OPA/Confest נכשלה, לא מתויגת/גיבוי/ניטור משאבים.
12) יכולת תצפית וביקורת
טריפורם יישום 'יומנים ותכנון חפצים - לחסוך לאחסון אובייקטים.
Ansible: "callback _ plugins' (json) # log מרכזי/ELK; כולל תעודה מזהה, בצע סיוע, trace_id.
מטריצות: זמן ביצוע של תוכניות/ספרי משחק, תדירות של שינויים, כיסוי מבחן.
13) בטיחות
מודול/חתימת תפקיד או תגיות/חשיש קבועים.
זכויות ה-IAM המינימליות (”plan” with ”apply”), מפרידים בין תפקידי המודיעים לבין האפליקציה האנושית.
הצפנה של מצב/יומנים, רשמים פרטיים של מודולים/תפקידים.
מדיניות ”אין סודות בטקסט ישיר בווידאו”, סורקים סודיים (gitleaks/trafflehog).
14) אנטי דפוסים
מודול מפלצות טרפורמי אחד ”לכל דבר”; גרסאות מודול חסרות.
מקומי 'terraform. אין מנעולים.
עריכה ידנית בענן מעל IC = סחף נצחי.
Ansible 'shell'/' command' במקום modules (שובר אידמפוטנטיות).
מלאי ”בקובץ אחד” ללא קבוצות/משתנים, ערבוב פרוד/שלב.
סודות בארס/מאגרים, היעדר כספת/KMS.
להגיש בקשה ללא תוכנית וללא ביקורת עמיתים.
15) רשימת יישומים (0-45 ימים)
0-10 ימים
הגדרת backend/lock מרוחק, הרחבת מודולי Terraform.
אפשר tflint/tfsec/checkov, Ansible-wint; משא ומתן תגי משאבים/תוויות.
צור תפקידים אפשריים עבור NGINX/סוכנים/לוגרים; לארגן מלאי.
11-25 ימים
הוספת קונפסט/אופ "א, טרטסט ומולקולה למודולים/תפקידים קריטיים.
מודיע: "תכנית על מר, פריט תכנית, ידני ליישום עם אישור; אנסופי '- צ' ק 'בשלב.
אינטגרציה אחסון סודי (מנהל כספת/KMS/סודות).
26-45 ימים
לוח זמנים אוטומטי לזיהוי סחיפה, דו "חות מדיניות.
ספרייה של מודולים/תפקידים עם וריאציות; "לקרוא אותי. md' בכל אחד.
GitOps: הערות של שחרור, שילוב עם ניטור ושערים התראה.
16) מדדי בגרות
% של סביבות עם מדינה מרוחקת ומנעולים = 100%.
הנתח של מודולים/תפקידים עם בדיקות (טרטסט/מולקולה) הוא 70%.
הזמן הממוצע ממר ליישם הוא שעות, לא ימים.
אפס ”סחף ידני” (כל השינויים עוברים דרך מר).
100% מהמשאבים הקריטיים מכוסים על ידי מדיניות כקוד (תגיות, הצפנה, גיבוי).
17) מסקנה
Terraform מפרט בסיס תשתית ניתן לחיזוי; קביל מביא מארחים ושירותים למדינה הרצויה. הוסף מדיניות כקוד, מדינה מרוחקת עם מיקום, בדיקות, ניהול סודי ו-CI/CD עם תוכנית סקירה _ תקפה - ולולאת ה-ICC שלך הופכת לניתנת לשליטה, מאובטחת ומהירה, ושחרורים הם אטומיים והפיכים.