מבוא ל-mTLS ב-Apigee

התכונה Apigee mTLS מוסיפה אבטחה לתקשורת בין רכיבים באשכול Edge for the Private Cloud. הוא מספק דרך סטנדרטית בתעשייה להגדיר ולהתקין את רשת השירותים. הוא תומך בניהול חבילות ובאוטומציה של הגדרות.

סקירה כללית של הארכיטקטורה

כדי לספק תקשורת מאובטחת בין רכיבים, ב-Apigee mTLS נעשה שימוש ברשת שירותים שיוצרת חיבורי TLS מאובטחים ומאומתים הדדית בין רכיבים.

בתמונה הבאה מוצגים חיבורים בין רכיבי Apigee שמאובטחים באמצעות Apigee mTLS (in red). היציאות שמוצגות בתמונה הן דוגמאות. לרשימת טווחי היציאות שכל רכיב יכול להשתמש בהם, אפשר לעיין במאמר בנושא שימוש ביציאות.

(שימו לב שהיציאות שמסומנות באות M משמשות לניהול הרכיב וחייבות להיות פתוחות ברכיב כדי ששרת הניהול יוכל לגשת אליהן).

כפי שאפשר לראות בתרשים שלמעלה, Apigee mTLS מוסיף אבטחה לחיבורים בין רוב הרכיבים באשכול, כולל:

מקור יעד
שרת ניהול נתבים, MP,‏ QPid,‏ LDAP,‏ Postgres,‏ Zookeeper וצמתים של Cassandra
נתב Loopback; Qpid, Zookeeper, and Cassandra nodes
מעבד בקשות Loopback; Qpid, Zookeeper, and Cassandra nodes
‫ZooKeeper ו-Cassandra צמתים אחרים של Zookeeper ו-Cassandra
ממשק משתמש של Edge ‫SMTP (ל-IdP חיצוני בלבד)
Postgres צמתים אחרים של Postgres,‏ Zookeeper ו-Cassandra

הצפנה או פענוח של הודעות

תשתית ה-Service mesh של Apigee mTLS מורכבת משרתי Consul שפועלים בכל צומת של ZooKeeper באשכול, ומשירותי Consul הבאים בכל צומת באשכול:

  • שרת proxy ליציאה שמיירט הודעות יוצאות בצומת המארח. השירות הזה מצפין הודעות יוצאות לפני שהוא שולח אותן ליעד.
  • פרוקסי לכניסת נתונים שמיירט הודעות נכנסות בצומת המארח. השירות הזה מפענח הודעות נכנסות לפני שהוא שולח אותן ליעד הסופי שלהן.

לדוגמה, כששרת הניהול שולח הודעה לנתב, שירות ה-proxy ליציאה מיירט את ההודעה היוצאת, מצפין אותה ואז שולח אותה לנתב. כשצומת הנתב מקבל את ההודעה, שירות ה-proxy של הכניסה מפענח את ההודעה ואז מעביר אותה לרכיב הנתב לעיבוד.

התהליך הזה מתבצע בצורה שקופה לרכיבי Edge: הם לא מודעים לתהליך ההצפנה והפענוח שמבצעים שירותי ה-proxy של Consul.

בנוסף, ב-Apigee mTLS נעשה שימוש בכלי iptables, שירות חומת אש של Linux שמנהל את ההפניה מחדש של הטראפיק.

דרישות

כדי להתקין את Apigee mTLS, הסביבה שלכם צריכה לעמוד בדרישות הבאות:

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

דרישות לגבי טופולוגיה

כדי להשתמש ב-mTLS ב-Apigee, הטופולוגיה של הסביבה צריכה לכלול לפחות שלושה צמתים של Zookeeper. לכן, אפשר להתקין את Apigee mTLS רק בטופולוגיות שמשתמשות ב-5, ב-9, ב-12 (multi-data center) או ב-13 צמתים. מידע נוסף זמין במאמר בנושא טופולוגיות של התקנות.

תוכניות שירות/חבילות

כדי להשתמש ב-mTLS ב-Apigee, צריך לוודא שהחבילות הבאות מותקנות ומופעלות בכל מכונה באשכול, כולל מכונת הניהול, לפני שמתחילים בתהליך ההתקנה:

שירות/חבילה תיאור האם אפשר להסיר אחרי ההתקנה?
base64 מאמת את הנתונים בסקריפטים של ההתקנה.
gnu-bash
gnu-sed
gnu-grep
משמש את סקריפט ההתקנה ואת כלים נפוצים אחרים.
iptables מחליף את חומת האש שמוגדרת כברירת מחדל, firewalld.
iptables-services מספק פונקציונליות לכלי iptables.
lsof הסקריפט משמש להתקנה.
nc אימות של מסלולי iptables.
openssl חתימה על אישורים באופן מקומי במהלך תהליך האתחול הראשוני.

במהלך ההתקנה, חבילת Consul מותקנת גם במכונת הניהול, כדי שתוכלו ליצור פרטי כניסה ומפתח הצפנה.

חבילת apigee-mtls מתקינה ומגדירה את שרתי Consul, כולל פרוקסי הכניסה והיציאה בצמתי ZooKeeper באשכול.

הרשאות בחשבון משתמש

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

החשבון שמבצע את ההתקנה של Apigee mTLS בכל צומת באשכול צריך להיות בעל ההרשאות הבאות:

  • התחלה, עצירה, הפעלה מחדש ואתחול של רכיבי Apigee
  • הגדרת כללים לחומת האש
  • יצירת חשבון משתמש חדש במערכת ההפעלה
  • הפעלה, השבתה, הפעלה, עצירה והסתרה של שירותים באמצעות systemctl

מכונת ניהול (מומלץ)

ב-Apigee מומלץ להשתמש בצומת באשכול שבו אפשר לבצע משימות ניהול שונות שמתוארות במסמך הזה, כולל:

  1. מתקינים את HashiCorp Consul 1.6.2.
  2. יצירה והפצה של זוג מפתחות/אישור ומפתח הצפנה של gossip.
  3. מעדכנים ומפיצים את קובץ ההגדרות.

כשמגדירים את מכונת הניהול:

  • מוודאים שיש לכם גישת root אליו.
  • מורידים ומתקינים את כלי השירות apigee-service ו-apigee-setup במחשב, כמו שמתואר במאמר התקנת כלי השירות apigee-setup של Edge.
  • מוודאים שאפשר להשתמש ב-scp/ssh כדי לגשת לכל הצמתים באשכול ממכונת הניהול. ההרשאה הזו נדרשת כדי שתוכלו להפיץ את קובץ ההגדרות ואת פרטי הכניסה.

שימוש ביציאות והקצאה שלהן

בקטע הזה מוסבר על השימוש ביציאות ועל הקצאת יציאות לתמיכה בתקשורת של Consul עם Apigee mTLS.

שימוש ביציאות: כל הצמתים שבהם פועל apigee-mtls

כל הצמתים באשכול שמשתמשים בשירות apigee-mtls צריכים לאפשר חיבורים משירותים ב-localhost ‏ (127.0.0.1). כך פרוקסי Consul יכולים לתקשר עם שאר השירותים בזמן שהם מעבדים הודעות נכנסות ויוצאות.

שימוש ביציאה: צמתי שרת Consul (צמתים שמריצים ZooKeeper)

כדי לאפשר קבלת בקשות מכל הצמתים באשכול, צריך לפתוח את רוב הפורטים הבאים בצמתי שרת Consul (הצמתים שבהם פועל ZooKeeper):

צומת יציאת שרת Consul תיאור פרוטוקול אפשר להשתמש בסוכני mtls חיצוניים
*
שרת Consul (צמתי ZooKeeper) 8300 מחבר את כל שרתי Consul באשכול. הכנסה לקליק
8301 מטפל בחברות ובשידורי הודעות בתוך האשכול. UDP/TCP
8302 יציאת WAN שמטפלת בהודעות על חברות ובהודעות שידור בהגדרה של כמה מרכזי נתונים. UDP/TCP
8500 מטפל בחיבורי HTTP ל-Consul Server APIs מתהליכים באותו צומת.

היציאה הזו לא משמשת לתקשורת או לתיאום מרחוקים, והיא מאזינה רק ל-localhost.

HTTP
8502 מטפל בחיבורי gRPC+HTTPS ל-Consul Server APIs מצמתים אחרים באשכול. gRPC+HTTPS
8503 מטפל בחיבורי HTTPS ל-Consul Server APIs מצמתים אחרים באשכול. HTTPS
8600 מטפל ב-DNS של שרת Consul. UDP/TCP
* מומלץ ב-Apigee להגביל את הבקשות הנכנסות לחברים באשכול בלבד (כולל מאגרי נתונים שונים). אפשר לעשות את זה באמצעות iptables.

כפי שמוצג בטבלה הזו, הצמתים שמריצים את רכיב consul-server (צמתי ZooKeeper) צריכים לפתוח את הפורטים 8301,‏ 8302,‏ 8502 ו-8503 לכל חברי האשכול שמריצים את שירות apigee-mtls, גם אם הם נמצאים במרכזי נתונים שונים. לא צריך לפתוח את היציאות האלה בצמתים שלא מריצים את ZooKeeper.

הקצאות של יציאות לכל צמתי Consul (כולל צמתים שמריצים ZooKeeper)

כדי לתמוך בתקשורת של Consul, הצמתים שמריצים את רכיבי Apigee הבאים צריכים לאפשר חיבורים חיצוניים ליציאות בטווחים הבאים:

רכיב Apigee טווח מספר היציאות הנדרש לכל צומת
Apigee mTLS ‫10700 עד 10799 1
Cassandra ‫10100 עד 10199 2
מעבד בקשות ‫10,500 עד 10,599 2
SymasLDAP ‫10200 עד 10299 1
Postgres ‫10300 עד 10399 3
Qpid ‫10400 עד 10499 2
נתב ‫10600 עד 10699 2
ZooKeeper ‫10,000 עד 10,099 3

‫Consul מקצה יציאות בצורה לינארית פשוטה. לדוגמה, אם באשכול יש שני צמתי Postgres, הצומת הראשון משתמש בשני פורטים, ולכן Consul מקצה לו את הפורטים 10300 ו-10301. גם הצומת השני משתמש בשתי יציאות, ולכן המסוף מקצה לצומת הזה את היציאות 10302 ו-10303. ההגדרה הזו חלה על כל סוגי הרכיבים.

כפי שאפשר לראות, מספר הפורטים בפועל תלוי בטופולוגיה: אם באשכול יש שני צמתי Postgres, תצטרכו לפתוח ארבעה פורטים (שני צמתים כפול שני פורטים כל אחד).

שימו לב לנקודות הבאות:

  • פרוקסי של Consul לא יכולים להאזין באותן יציאות כמו שירותי Apigee.
  • ל-Consul יש רק מרחב כתובות יציאה אחד. הקצאות הפורטים של Consul proxy צריכות להיות ייחודיות בכל האשכול, כולל מרכזי נתונים. המשמעות היא שאם שרת Proxy A במארח A מאזין ליציאה 15000, שרת Proxy B במארח B לא יכול להאזין ליציאה 15000.
  • מספר היציאות שבשימוש משתנה בהתאם לטופולוגיה, כפי שמתואר למעלה.

בתצורה של כמה מרכזי נתונים, כל המארחים שמריצים mTLS צריכים גם לפתוח את יציאה 8302.

אפשר להתאים אישית את יציאות ברירת המחדל שמשמשות את Apigee mTLS. במאמר התאמה אישית של טווח יציאות ל-proxy מוסבר איך עושים את זה.

מגבלות

יש מגבלות מסוימות ל-mTLS ב-Apigee:

  • לא מוצפןות תקשורות בין צמתים של Cassandra (יציאה 7000)
  • קביעת התצורה וההגדרה לא אידמפוטנטיות. המשמעות היא שאם מבצעים שינוי בצומת אחד, צריך לבצע את אותו שינוי בכל הצמתים. המערכת לא תבצע את השינוי הזה בשבילכם בצומת אחר. מידע נוסף זמין במאמר בנושא שינוי הגדרת apigee-mtls קיימת.

הסברים על המונחים

הקטע הזה כולל את המונחים הבאים:

מונח הגדרה
cluster קבוצת המכונות שמרכיבות את Edge להתקנה בענן פרטי.
Consul רשת השירות שבה נעשה שימוש ב-mTLS של Apigee. למידע על האופן שבו Consul מאבטח את התקשורת בענן הפרטי, אפשר לעיין במודל האבטחה של Consul.
mTLS אימות TLS בו-זמני (mTLS).
service mesh רשת שכבת-על (או רשת בתוך רשת).
TLS אבטחת שכבת התעבורה. פרוטוקול אימות סטנדרטי בתעשייה לתקשורת מאובטחת.