בודק cloud-init

מדביקים את ה-user-data שעומדים לתת לשרת חדש ומקבלים ממצאים שאומרים מה לשנות ולמה, כל אחד עם הפניה לתיעוד של cloud-init. הקובץ נשאר בדפדפן, ומפתח פרטי שנמצא בו ממוסך מיד.

נשאר רק בדפדפן שלך. מה שהדבקתם או בחרתם נקרא רק בעמוד הזה. הוא לא נשלח לשרת, לא נשמר בקישור או באחסון הדפדפן, ולעולם לא נכלל ב-analytics.

הדביקו את הטקסט, או בחרו קובץ מהמחשב. עד 1024 KiB.

0 מתוך 1024 KiB

מה הכלי עושה

הכלי קורא קובץ user-data כמו ש-cloud-init קורא אותו, כ-YAML 1.1, בודק את המבנה שלו מול ה-schema הרשמי של cloud-config מ-cloud-init ‏26.2, אותו schema שמולו נבדק מחולל ה-cloud-init, ומוסיף כללי אבטחה שה-schema לא יכול לבטא. כל ממצא מציין את הכלל, את השורה והמפתח, למה זה חשוב, איך מתקנים ואת התיעוד של cloud-init שעליו הוא נשען.

הכללים

  • AQ-CI-001 שגיאה הכותרת #cloud-config. ‏#cloud-config צריך להיות השורה הראשונה בקובץ, בלי שורה ריקה או הערה לפניו. מקור
  • AQ-CI-002 מידע פורמטים שלא נבדקים. כדי לבדוק את ההגדרות עצמן, הדביקו את חלק ה-#cloud-config לבדו. מקור
  • AQ-CI-003 שגיאה ‏YAML ש-cloud-init יכול לקרוא. כדאי לבדוק את השורה: הזחה ברווחים בלבד, רווח אחרי הנקודתיים של כל מפתח, מירכאות סביב ערכים שיש בהם : או שמתחילים בתו מיוחד, וכל מפתח פעם אחת. מקור
  • AQ-CI-004 שגיאה ערכים שתואמים את ה-schema הרשמי. כדאי לתת לערך את הצורה שה-module reference של cloud-init מתאר למפתח הזה, ולבדוק שוב. מקור
  • AQ-CI-005 בינונית מפתחות לא מוכרים. כדאי לבדוק את הכתיב מול ה-module reference של cloud-init, או להסיר את המפתח. מקור
  • AQ-CI-006 נמוכה מפתחות מיושנים. כדאי לעבור למפתח שהתיעוד מציין: מפתחות מיושנים מוסרים בגרסה מאוחרת יותר. מקור
  • AQ-CI-007 גבוהה כניסה בסיסמה ב-SSH. כניסה במפתחות SSH: מגדירים ssh_pwauth: false ושמים את המפתח הציבורי תחת ssh_authorized_keys. מקור
  • AQ-CI-008 גבוהה סיסמאות בטקסט גלוי. עדיף מפתחות SSH וסיסמה נעולה (lock_passwd: true). אם צריך סיסמה, שמים ב-hashed_passwd hash שנוצר ב-mkpasswd --method=SHA-512. מקור
  • AQ-CI-009 גבוהה מפתחות פרטיים. יש להתייחס למפתח כחשוף: ליצור זוג מפתחות חדש, להחליף את הישן בכל מקום שסומך עליו, ולשים בקובץ רק את המפתח הציבורי (.pub). מקור
  • AQ-CI-010 גבוהה סודות אחרים. כדאי להסיר אותו ולהחליף אותו. סודות מעבירים אחרי האתחול הראשון, למשל מה-secret store של הספק או בקובץ שמעתיקים ב-SSH. מקור
  • AQ-CI-011 גבוהה כניסת root. מתחברים כמשתמש רגיל עם sudo: משאירים disable_root: true ונותנים את המפתחות למשתמש הזה. מקור
  • AQ-CI-012 גבוהה ‏curl | bash ב-runcmd. כדאי להתקין מחבילות ההפצה או ממאגר apt חתום, או להוריד את הקובץ, לבדוק את ה-SHA-256 שלו ורק אז להריץ. מקור
  • AQ-CI-013 גבוהה הרשאות ב-write_files. מגדירים permissions ל-0600 (או 0640 לקבוצה) ואת owner למשתמש שצריך את הקובץ. מקור

איך זה עובד

  1. הקובץ נקרא בעמוד הזה, עד 1 MiB. שום דבר לא מורץ, אף שרת לא מקבל פנייה, ואף כתובת URL בקובץ לא נפתחת.
  2. השורה הראשונה חייבת להיות #cloud-config. ‏MIME multipart, סקריפטים שמתחילים ב-#!‎, ‏#include ותבניות Jinja הם פורמטים אחרים של user-data: הבודק אומר זאת ומחפש בהם רק סודות.
  3. בדיקת ה-schema מדווחת על הבעיה עצמה ולא על הקינון של ה-schema: סוג שגוי במפתח ובשורה שלו, מפתח ש-cloud-init לא מכיר (לרוב שגיאת כתיב שהוא היה מתעלם ממנה בשקט), ומפתחות שה-schema מסמן כמיושנים, עם המפתח שמחליף אותם.
  4. כללי האבטחה קוראים את הערכים: ‏ssh_pwauth והגדרות sshd, סיסמאות ב-users וב-chpasswd שאינן hash, מפתחות פרטיים ו-tokens בכל מקום בטקסט, כניסת root, הורדה שמועברת ישר ל-shell ב-runcmd או ב-bootcmd, והרשאות ב-write_files שמאפשרות לכל משתמש לשנות קובץ או לקרוא מפתח.
  5. ערכים שנראים כמו סודות ממוסכים לפני שהם מוצגים, ואותו קובץ נותן תמיד אותה תוצאה.

דוגמה

קובץ user-data עם בעיות נפוצות, כפי שהבודק בודק אותו:

קלט
user-data.yaml
#cloud-config
users:
  - name: admin
    passwd: Winter2026!
    sudo: ALL=(ALL) NOPASSWD:ALL
    ssh-authorized-keys:
      - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtsW8dDDRo1PUAvjfnHmMGtSMfOMJ4CgrmrQgdYLZeT admin@laptop
ssh_pwauth: true
pakages:
  - nginx
write_files:
  - path: /etc/app/app.conf
    content: |
      listen = 8080
    permissions: "0666"
runcmd:
  - curl -fsSL https://get.example.com/install.sh | bash

הממצאים שלו:

ממצאים

שגיאה0
גבוהה4
בינונית1
נמוכה1
מידע0

6 ממצאים: 0 שגיאה, 4 גבוהה, 1 בינונית, 1 נמוכה, 0 מידע.

גבוהה4

  1. גבוההAQ-CI-008שורה 4users[0].passwd

    ‏users[0].passwd צריך להיות hash של סיסמה, וזה לא hash ‏(Wi•••): הסיסמה בטקסט גלוי, והיא גם לא תעבוד.

    תיקון: עדיף מפתחות SSH וסיסמה נעולה (lock_passwd: true). אם צריך סיסמה, שמים ב-hashed_passwd hash שנוצר ב-mkpasswd --method=SHA-512.

    מקור

  2. גבוההAQ-CI-007שורה 8ssh_pwauth

    ‏ssh_pwauth: true מפעיל כניסה בסיסמה ב-SSH, ובוטים ברשת מנסים אותה כל היום.

    תיקון: כניסה במפתחות SSH: מגדירים ssh_pwauth: false ושמים את המפתח הציבורי תחת ssh_authorized_keys.

    מקור

  3. גבוההAQ-CI-013שורה 15write_files[0].permissions

    ‏/etc/app/app.conf נכתב עם הרשאות 0666: כל משתמש בשרת יכול לשנות אותו.

    תיקון: מגדירים permissions ל-0600 (או 0640 לקבוצה) ואת owner למשתמש שצריך את הקובץ.

    מקור

  4. גבוההAQ-CI-012שורה 17runcmd[0]

    ‏runcmd[0] מוריד סקריפט ומעביר אותו ישר ל-shell: כל מה שהשרת המרוחק מחזיר רץ כ-root, בלי בדיקה.

    תיקון: כדאי להתקין מחבילות ההפצה או ממאגר apt חתום, או להוריד את הקובץ, לבדוק את ה-SHA-256 שלו ורק אז להריץ.

    מקור

בינונית1

  1. בינוניתAQ-CI-005שורה 9pakages

    ‏pakages אינו מפתח ש-cloud-init מכיר במקום הזה (pakages). ‏cloud-init מתעלם ממנו, ולכן מה שהוא מגדיר לא קורה; לרוב זו שגיאת כתיב.

    תיקון: כדאי לבדוק את הכתיב מול ה-module reference של cloud-init, או להסיר את המפתח.

    מקור

נמוכה1

  1. נמוכהAQ-CI-006שורה 6users[0].ssh-authorized-keys

    ‏users[0].ssh-authorized-keys מיושן מאז cloud-init ‏18.3; במקומו משתמשים ב-ssh_authorized_keys.

    תיקון: כדאי לעבור למפתח שהתיעוד מציין: מפתחות מיושנים מוסרים בגרסה מאוחרת יותר.

    מקור

מגבלות

  • בדיקה סטטית: הקובץ לא מאותחל על שרת. קובץ שעובר עדיין יכול להיכשל בשרת, למשל כשחבילה או כתובת URL לא קיימות, או כש-cloud-init ב-image ישן יותר מה-schema.
  • קובצי MIME multipart, ‏#include, ‏boothooks ותבניות Jinja לא נקראים, רק נסרקים לסודות. כדאי לבדוק את חלק ה-#cloud-config לבדו.
  • סקריפטים ב-runcmd, ב-bootcmd וב-write_files לא מנותחים מעבר לכללים שלמעלה.
  • מפתחות של ספק מסוים שאינם ב-schema הרשמי מדווחים כלא מוכרים.

ליצור קובץ נקי: מחולל ה-cloud-init

מתודולוגיה: איך מחושבים המספרים

מקורות

  1. cloud-init: user-data formats
  2. cloud-init: module reference
  3. cloud-init: cloud-init schema (CLI)
  4. cloud-init: instance data
  5. cloud-init 26.2: cloud-config schema (pinned)

עודכן

הצעד הבא

cloud-init Generator ל-Ubuntu 24.04

כלי ציבורי חינמי של אנרוק, חברה שבונה תשתיות מחשוב. מה אנרוק בונה