לקוחות יכולים להתחבר לאשכולות של שירות מנוהל ל-Apache Kafka באמצעות Apache Kafka API בקוד פתוח. כל החיבורים צריכים להיות מוצפנים באמצעות TLS. לא ניתן להשתמש בתקשורת בטקסט רגיל. האימות מתבצע באמצעות אחד משני מנגנונים נתמכים, שלכל אחד מהם יש סוג שונה של פרטי כניסה: SASL או mTLS.
במאמר הזה מוסבר איך לבצע אימות באמצעות שיטת SASL. הלקוחות עוברים אימות באמצעות פרטי הכניסה של חשבון משתמש מורשה לניהול זהויות והרשאות גישה (IAM), כמו חשבון שירות. בשירות המנוהל ל-Apache Kafka מנוהלים אישורי הברוקר בצד השרת לכל החיבורים.
לפני שמתחילים
מידע נוסף על הנושאים הבאים:
מקצים לחשבון השירות את התפקיד Managed Kafka client (לקוח מנוהל של Kafka).
צריך להקצות את תפקיד ה-IAM roles/managedkafka.client בפרויקט שמכיל את האשכול לחשבון השירות שבו תשתמשו כדי להתחבר לאשכול.
התפקיד 'לקוח מנוהל של Kafka' כולל את ההרשאה managedkafka.clusters.connect שנדרשת לכל החיבורים.
כדי להעניק לחשבון השירות את התפקיד Managed Kafka client:
המסוף
- נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - מוודאים שהפרויקט מוגדר כפרויקט הצרכן שאליו יתבצעו גישות של לקוח השירות המנוהל ל-Apache Kafka.
- לוחצים על הענקת גישה.
- בדף החדש, בשדה Add Principals (הוספת חשבונות משתמשים), מזינים את כתובת האימייל של חשבון השירות שבו אתם משתמשים.
- בקטע Assign roles (הקצאת תפקידים), בוחרים בתפקיד Managed Kafka client (לקוח מנוהל של Kafka).
- לוחצים על Save.
CLI של gcloud
-
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
-
מריצים את הפקודה
gcloud projects add-iam-policy-binding:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/managedkafka.client
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID הוא מזהה הפרויקט.
-
SERVICE_ACCOUNT_EMAIL היא כתובת האימייל של חשבון השירות.
-
הגדרת לקוח Kafka לאימות ב- Google Cloud
אפשר לאמת לקוחות של Kafka אל Google Cloud באמצעות אחד מהמנגנונים הבאים:
OAUTHBEARER (מומלץ): המנגנון הזה מחייב שימוש ב-Application Default Credentials (ADC). השירות ADC משמש את ספריות האימות כדרך למצוא את פרטי הכניסה באופן אוטומטי על סמך הסביבה שבה פועלת האפליקציה. למידע נוסף לגבי סדר החיפוש של פרטי הכניסה ב-ADC במיקומים השונים, תוכלו לקרוא את המאמר הסבר על Application Default Credentials.
SASL/PLAIN: מנגנון זה דורש שימוש בשם משתמש ובסיסמה שאפשר לגזור מקובץ JSON של מפתח חשבון שירות או מאסימון גישה.
באופן כללי, מומלץ להשתמש ב-OAUTHBEARER. עם זאת, יכול להיות שמנגנון SASL/PLAIN יהיה נוח יותר לבדיקה.
אימות OAuthBearer
מידע על אימות ל-Kafka API בקוד פתוח זמין במאמרי העזרה ב-GitHub.
אימות SASL/PLAIN
השירות המנוהל ל-Apache Kafka תומך באימות SASL/PLAIN באמצעות קובץ JSON של מפתח חשבון שירות או אסימון גישה.
קובץ JSON של מפתח חשבון שירות
השיטה הזו רלוונטית לכל לקוחות Kafka.
מורידים קובץ JSON של מפתח חשבון שירות עבור חשבון השירות שבו רוצים להשתמש עבור הלקוח.
מקודדים את קובץ חשבון השירות באמצעות קידוד base64 כדי להשתמש בו כמחרוזת האימות. נניח ששם הקובץ הוא
my_service_account_key.json.במערכות Linux או macOS, משתמשים בפקודה
base64(שמותקנת בדרך כלל כברירת מחדל) באופן הבא:base64 -w 0 < my_service_account_key.json > password.txtהפקודה הזו מבצעת את הפעולות הבאות:
base64 < my_service_account_key.json: קורא את התוכן של הקובץ שנקראmy_service_account_key.json.מקודד את תוכן הקובץ באמצעות קידוד base64. קידוד Base64 הוא דרך לייצג נתונים בינאריים (כמו נתוני JSON בקובץ חשבון השירות) כטקסט ASCII. השימוש הזה נפוץ להעברת נתונים בערוצים שמיועדים לטקסט.
> password.txt: מפנה את הפלט של הפקודהbase64(הגרסה המקודדת ב-base64 של קובץ חשבון השירות) לקובץ חדש בשםpassword.txt.
אפשר להשתמש בתוכן של קובץ הסיסמה לאימות עם הפרמטרים הבאים.
security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="SERVICE_ACCOUNT_EMAIL_ADDRESS" \ password="CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE";מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_ACCOUNT_EMAIL_ADDRESS: כתובת האימייל של חשבון השירות שבו רוצים להשתמש לאימות. -
CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: התוכן של קובץ הסיסמה בקידוד base64 שהשגתם בשלב הקודם. הערך הזה צריך להיות בשורה אחת.
-
כשמאמתים חיבורים נכנסים לאשכול, השירות המנוהל ל-Apache Kafka בודק את הדברים הבאים:
שם המשתמש שצוין תואם לחשבון השירות שהמפתח שלו משמש בסיס לסיסמה.
לחשבון המשתמש של חשבון השירות שצוין יש את ההרשאה
managedkafka.clusters.connect(שכלולה בתפקיד ה-IAMroles/managedkafka.client) באשכול.
טוקן גישה
מקבלים אסימון גישה לחשבון המשתמש שרוצים להשתמש בו לאימות. לדוגמה, מקבלים אסימון גישה עבור הגורם הראשי הנוכחי ב-CLI של gcloud:
gcloud auth print-access-tokenאפשר להשתמש באסימון הגישה לאימות עם הפרמטרים הבאים.
security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \ username="PRINCIPAL_EMAIL_ADDRESS" \ password="ACCESS_TOKEN_VALUE";מחליפים את מה שכתוב בשדות הבאים:
PRINCIPAL_EMAIL_ADDRESS: כתובת האימייל של הגורם המרכזי ששימש לקבלת אסימון הגישה.-
ACCESS_TOKEN_VALUE: הערך של אסימון הגישה שקיבלתם בשלב הקודם.
כשמאמתים חיבורים נכנסים לאשכול, השירות המנוהל ל-Apache Kafka בודק את הדברים הבאים:
טוקן הגישה תקף ולא פג תוקפו.
שם המשתמש שצוין תואם לאימייל של חשבון המשתמש שאליו משויך אסימון הגישה.
למשתמש הראשי של אסימון הגישה יש את ההרשאה
managedkafka.clusters.connect(שכלולה בתפקידroles/managedkafka.clientב-IAM) באשכול.
איחוד זהויות של עומסי עבודה ל-GKE
השירות המנוהל ל-Apache Kafka תומך באימות ל-API של Apache Kafka בקוד פתוח באמצעות איחוד זהויות של עומסי עבודה ל-GKE. יש תמיכה באימות גם ב-SASL/PLAIN וגם ב-SASL/OAUTHBEARER.
כדי להשתמש באיחוד שירותי אימות הזהות של עומסי עבודה ב-GKE עם שירות מנוהל ל-Apache Kafka, אתם צריכים לעמוד בדרישות הבאות:
- משתמשים ב-GKE מגרסה
1.31.1-gke.1241000ואילך. מוסיפים הערה לחשבון השירות של Kubernetes עם
iam.gke.io/return-principal-id-as-email: "true". לדוגמה:apiVersion: v1 kind: ServiceAccount metadata: name: kafka-service-account annotations: iam.gke.io/return-principal-id-as-email: "true"אם אתם משתמשים בשרת אימות מקומי, עליכם לוודא שאתם משתמשים גם בגרסה
2.40.3ואילך של חבילת google-auth.
מוודאים שלחשבון המשתמש ב-GKE יש את ההרשאה managedkafka.clusters.connect (שכלולה בתפקיד roles/managedkafka.client ב-IAM).
השירות המנוהל ל-Apache Kafka לא תומך באימות ל-API של Apache Kafka בקוד פתוח באמצעות Fleet Workload Identity. אפשרות נוספת היא לקשר את חשבון השירות של Kubernetes לחשבון שירות של IAM.
פתרון בעיות
מידע על פתרון בעיות באימות SASL מופיע במאמר שגיאות אימות.