עיצוב תשתית Yandex Cloud: Terraform, IAM, אבטחה

תשתית ענן ללא ארכיטקטורה מחושבת הופכת למקור של השבתות ודליפות מידע. אנחנו מתכננים ומגדירים את Yandex Cloud במפתח מלא: מטופולוגיית רשת ומדיניות IAM ועד Security Groups ואוטומציה באמצעות Terraform. הצוות שלנו מטפל בכל המחזור—בדיקת נאותות, תכנון, יישום ותמיכה—כך שאתם מקבלים פתרון אמין ומאובטח שמוכן לגדילה.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אתם עוברים ל-Yandex Cloud או משיקים פרויקט חדש מאפס. בלי בסיס איתן — רשת לא נכונה, פורטים פתוחים מיותרים, או IAM עם הרשאות סופר-אדמין — תצטרכו לעשות הכל מחדש תוך חודש. זה כואב במיוחד כשמתרחבים: אם הטופולוגיה של הרשת ובקרת הגישה לא מוגדרים נכון מההתחלה, כל שירות חדש דורש בנייה מחדש של כל התשתית.

עיצוב תשתית Yandex Cloud שלנו באמצעות Terraform כולל VPC, Security Groups, IAM, Object Storage, Managed Kubernetes וניטור כדי להבטיח עמידה ב-152-FZ. אנו מעריכים את הפרויקט שלכם ביום אחד. עם ניסיון של למעלה מ-5 שנים ב-Yandex Cloud וצוות של 15 מהנדסים מוסמכים, סיפקנו למעלה מ-50 פרויקטים מוצלחים, כולל העברות של מערכות בנקאיות ופלטפורמות מסחר אלקטרוני שבהן כל שעה אבודה עולה מיליונים. הגישה שלנו מפחיתה את זמן התגובה לאירועים ב-60% ומבטיחה זמינות של 99.95%. תשתית ענן מעוצבת כראוי מפחיתה עלויות תפעול ב-30% ומקצרת את זמן היציאה לשוק ב-40%. בקשו ביקורת תשתית — זה לוקח יום אחד. עלויות פרויקט טיפוסיות נעות בין $1k–10k בהתאם למורכבות.

בעיות טיפוסיות ב-Yandex Cloud

לרוב אנו נתקלים ב:

  • מבנה ארגוני שגוי — כל המשאבים בתיקייה אחת, ללא הפרדת סביבות. זה מוביל למחיקות מקריות והשפעות הדדיות.
  • Security Groups מוגזמים — פורטים פתוחים ל-0.0.0.0/0, גישה למסד נתונים מהאינטרנט. זה מגדיל את שטח התקיפה.
  • IAM עם הרשאות מוגזמות — חשבונות שירות עם תפקיד עורך על כל התיקייה. אם מפתח אחד נפרץ, כל התשתית בסיכון.

אנו מתקנים את הבעיות האלה בהתחלה כדי שלא תשלמו יותר מדי על השבתות או תאבדו נתונים.

איך לתכנן את המבנה הארגוני?

Yandex Cloud בנוי על שלוש רמות: Organization → Cloud → Folder. תיקייה (Folder) מקבילה ל-Resource Group ב-Azure או ל-Project ב-GCP. משאבים חיים בתיקיות, ו-IAM מוקצה ברמת הארגון, הענן או התיקייה.

מבנה טיפוסי לפרויקט צוותי:

Organization: my-company
└── Cloud: my-cloud
    ├── Folder: prod
    ├── Folder: staging
    ├── Folder: dev
    └── Folder: shared-services # мониторинг, registry, bastion

תיקיות שונות משמעותן מדדי חיוב והרשאות שונים. צוות הפיתוח מקבל הרשאת עורך על Organization: my-company └── Cloud: my-cloud ├── Folder: prod ├── Folder: staging ├── Folder: dev └── Folder: shared-services # мониторинг, registry, bastion והרשאת קריאה בלבד על dev. זה מונע מחיקת משאבים מקרית בסביבת הייצור.

איך לתכנן את הרשת ב-Yandex Cloud?

VPC ב-Yandex Cloud הוא גלובלי (מכסה את כל האזורים), רשתות משנה (subnets) הן אזוריות. לייצור אנו משתמשים בסכימה הקלאסית: רשתות משנה ציבוריות למארח bastion, רשתות משנה פרטיות ליישומים ולמסדי נתונים.

resource "yandex_vpc_network" "main" {
  name = "main-network"
  folder_id = var.folder_id
}

resource "yandex_vpc_subnet" "private_a" {
  name = "private-a"
  zone = "ru-central1-a"
  network_id = yandex_vpc_network.main.id
  v4_cidr_blocks = ["10.10.10.0/24"]
  folder_id = var.folder_id
  route_table_id = yandex_vpc_route_table.nat.id
}

resource "yandex_vpc_gateway" "nat" {
  name = "nat-gateway"
  folder_id = var.folder_id
  shared_egress_gateway {}
}

resource "yandex_vpc_route_table" "nat" {
  name = "nat-route"
  network_id = yandex_vpc_network.main.id
  folder_id = var.folder_id
  static_route {
    destination_prefix = "0.0.0.0/0"
    gateway_id = yandex_vpc_gateway.nat.id
  }
}

לרשתות משנה פרטיות אין כתובות IP ציבוריות. תעבורה יוצאת עוברת דרך שער NAT. תעבורה נכנסת רק דרך Security Groups. סכימה זו מונעת גישה ישירה למסד הנתונים מהאינטרנט ומפחיתה את שטח התקיפה.

Security Groups: כללים מינימליים

Security Groups ב-Yandex Cloud הם stateful. תעבורת תגובה מותרת אוטומטית. כברירת מחדל, כל התעבורה הנכנסת חסומה. הניסיון שלנו: 3-5 כללים מספיקים ל-80% מהיישומים.

resource "yandex_vpc_security_group" "app" {
  name = "app-sg"
  network_id = yandex_vpc_network.main.id
  folder_id = var.folder_id

  ingress {
    protocol = "TCP"
    port = 8080
    v4_cidr_blocks = ["10.10.0.0/16"]
  }

  ingress {
    protocol = "TCP"
    port = 22
    security_group_id = yandex_vpc_security_group.bastion.id
  }

  egress {
    protocol = "ANY"
    v4_cidr_blocks = ["0.0.0.0/0"]
  }
}

IAM: חשבון שירות אחד = תפקיד אחד

כל רכיב (VM, צמתי Kubernetes, CI/CD) מקבל חשבון שירות משלו עם הרשאות מינימליות. עבור GitHub Actions אנו משתמשים ב-Workload Identity Federation — אסימונים זמניים, ללא סודות.

# Создание SA
$ yc iam service-account create --name app-sa --folder-id <folder-id>
# Роль на конкретный ресурс
$ yc resource-manager folder add-access-binding <folder-id> \
  --role container-registry.images.puller \
  --service-account-id <sa-id>

איך ליצור חשבון שירות עם הרשאות מינימליות?

  1. צרו חשבון שירות: prod.
  2. הקצו תפקיד רק למשאב הנדרש, למשל resource "yandex_vpc_network" "main" { name = "main-network" folder_id = var.folder_id } resource "yandex_vpc_subnet" "private_a" { name = "private-a" zone = "ru-central1-a" network_id = yandex_vpc_network.main.id v4_cidr_blocks = ["10.10.10.0/24"] folder_id = var.folder_id route_table_id = yandex_vpc_route_table.nat.id } resource "yandex_vpc_gateway" "nat" { name = "nat-gateway" folder_id = var.folder_id shared_egress_gateway {} } resource "yandex_vpc_route_table" "nat" { name = "nat-route" network_id = yandex_vpc_network.main.id folder_id = var.folder_id static_route { destination_prefix = "0.0.0.0/0" gateway_id = yandex_vpc_gateway.nat.id } } על רישום (registry) ספציפי.
  3. השתמשו ב-Workload Identity Federation לאסימונים זמניים — כך שלעולם לא תאחסנו מפתחות.
  4. הוסיפו את חשבון השירות לקבוצת גישה לניהול קל יותר.
  5. וודאו שלחשבון השירות אין הרשאות מיותרות על ידי הרצת resource "yandex_vpc_security_group" "app" { name = "app-sg" network_id = yandex_vpc_network.main.id folder_id = var.folder_id ingress { protocol = "TCP" port = 8080 v4_cidr_blocks = ["10.10.0.0/16"] } ingress { protocol = "TCP" port = 22 security_group_id = yandex_vpc_security_group.bastion.id } egress { protocol = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] } } .

Object Storage, Registry, ניטור ועמידה ב-152-FZ

Yandex Object Storage תואם S3, עם כללי מחזור חיים והצפנת KMS. Container Registry — ללא סיסמאות נפרדות, הכל דרך IAM. Object Storage עולה בערך $1–1 ל-GB בחודש, זול משמעותית מחלופות מערביות לפרויקטים רוסיים. החיסכון ברישוי בעת שימוש ב-Managed Service for Kubernetes במקום התקנה עצמית מגיע ל-50%, שבמונחים כספיים הוא בין $270–390 לחודש לפרויקט ממוצע.

resource "yandex_storage_bucket" "app" {
  bucket = "my-app-storage"
  folder_id = var.folder_id
  access_key = yandex_iam_service_account_static_access_key.storage.access_key
  secret_key = yandex_iam_service_account_static_access_key.storage.secret_key

  lifecycle_rule {
    id = "logs-cleanup"
    enabled = true
    prefix = "logs/"

    expiration {
      days = 90
    }

    noncurrent_version_expiration {
      days = 30
    }
  }

  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "aws:kms"
        kms_master_key_id = yandex_kms_symmetric_key.main.id
      }
    }
  }
}

Yandex Monitoring אוסף אוטומטית מדדים מכל השירותים. ליומני יישומים אנו משתמשים ב-Cloud Logging עם שמירה של 30 יום. התראות דרך webhook או PagerDuty. אנו מגדירים לוחות מחוונים עם SLOs מרכזיים: זמן השהיה p99 מתחת ל-200ms, שיעור שגיאות < 0.1%.

Yandex Cloud מוסמך עבור 152-FZ (UZ-3). נתונים — רק אזורים רוסיים, הצפנה דרך KMS, ביקורת דרך Cloud Audit Trails. אנו מגדירים בנוסף תיעוד של כל הפעולות. זה עומד בדרישות הרגולטוריות עבור רוב הפרויקטים.

Yandex Cloud עומד בדרישות 152-FZ עד UZ-3, לפי התיעוד הרשמי.

בקרת גישה מההתחלה

הגדרה שגויה של IAM היא הבעיה הנפוצה ביותר שאנו מוצאים במהלך ביקורות. בפרויקט אחד, לחשבון השירות של CI/CD היה תפקיד עורך על כל התיקייה. אם הצינור היה נפרץ, תוקף יכול היה להפעיל כורה קריפטו על כל VM. תיקנו את זה: יצרנו חשבונות שירות נפרדים לכל משימה, הענקנו # Создание SA $ yc iam service-account create --name app-sa --folder-id <folder-id> # Роль на конкретный ресурс $ yc resource-manager folder add-access-binding <folder-id> \ --role container-registry.images.puller \ --service-account-id <sa-id> לבנייה, yc iam service-account create --name app-sa --folder-id <folder-id> רק לצומת הספציפי. הסיכון ירד לאפס.

דוגמה לתצורת Terraform למזעור הרשאות
resource "yandex_iam_service_account" "ci_cd" {
  name        = "ci-cd-sa"
  description = "Service account for CI/CD"
  folder_id   = var.folder_id
}

resource "yandex_resourcemanager_folder_iam_member" "ci_cd_puller" {
  folder_id = var.folder_id
  role      = "container-registry.images.puller"
  member    = "serviceAccount:${yandex_iam_service_account.ci_cd.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "ci_cd_compute" {
  folder_id = var.folder_id
  role      = "compute.instanceAdmin"
  member    = "serviceAccount:${yandex_iam_service_account.ci_cd.id}"
  condition {
    expression = "resource.name == 'my-app-server'"
    title      = "Limit to specific instance"
  }
}

מה כלול ולוחות זמנים

לאחר הסיום תקבלו:

  • דיאגרמת ארכיטקטורת רשת (draw.io)
  • קוד Terraform מלא במאגר
  • תיאור תפקידי IAM וחשבונות שירות
  • מדריך תגובה לאירועים (runbook)
  • גישה לניטור ולתיעוד
  • הדרכה לצוות (אופציונלי)
שלב תוצאה משך
ביקורת דרישות מפרט טכני, הערכת עלות יום אחד
עיצוב דיאגרמת רשת, מבנה IAM 2-3 ימים
יישום קוד Terraform, שירותים בסיסיים 3-10 ימים
ניטור לוחות מחוונים, התראות 1-2 ימים
תיעוד ארכיטקטורה, runbook 2-3 ימים
היקף משך
תשתית פשוטה (1-3 שירותים, סביבה אחת) 1-2 שבועות
פרויקט בינוני (dev/staging/prod, K8s, מסד נתונים מנוהל) 3-6 שבועות
העברה גדולה מתשתית קיימת 1-3 חודשים

התמחור נקבע באופן אישי לאחר הביקורת. אנו מבטיחים תמיכה לחודש אחד לאחר המסירה. צרו קשר כדי לקבל הערכת עלות לפרויקט שלכם תוך יום עסקים אחד. קבלו ייעוץ — נספר לכם כיצד לבנות תשתית בצורה אופטימלית למשימות שלכם.