בקרת גישה בשירות מנוהל ל-Apache Kafka

במסמך הזה מוסבר איך פועלת בקרת הגישה בשירות מנוהל ל-Apache Kafka.

סוכן שירות של Managed Kafka

בשירות מנוהל ל-Apache Kafka נעשה שימוש בסוכן שירות כדי לגשת למשאבים של Google Cloud. אחרי שמפעילים את Managed Kafka API, נוצר סוכן של Managed Kafka Service.

סוכן השירות המנוהל של Kafka הוא חשבון ראשי עם המזהה service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com, כאשר PROJECT_NUMBER הוא מספר הפרויקט שלכם ב- Google Cloud .

סוכן השירות הזה צריך את תפקיד ה-IAM ‏Managed Kafka Service Agent‏ (roles/managedkafka.serviceAgent) בפרויקט. ההרשאה הזו ניתנת באופן אוטומטי כשמפעילים את ה-API. אם תבטלו את ההרשאה של התפקיד הזה, השירות המנוהל ל-Apache Kafka לא יוכל ליצור, לעדכן או למחוק אשכולות.

לביצוע חלק מהמשימות, לסוכן של שירות Kafka מנוהל נדרשים תפקידים נוספים. לדוגמה, אם אתם משתמשים ב-Kafka Connect, יכול להיות שתצטרכו להעניק לסוכן השירות הרשאה לגשת למקורות ולמטרות, כמו Pub/Sub או BigQuery.

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

בדרך כלל יש שתי דרכים לבצע פעולות במשאבים של השירות המנוהל ל-Apache Kafka:

  • ‫Managed Kafka API. האפשרות הזו כוללת קריאה ישירה לממשקי ה-API ל-REST, וגם שימוש ב-Google Cloud CLI, במסוף Google Cloud או בספריות הלקוח.

  • ממשק ה-API של Apache Kafka בקוד פתוח. הרבה לקוחות קוד פתוח של Kafka משתמשים ב-API הזה.

בקרת גישה באמצעות Managed Kafka API

כשמשתמשים ב-Managed Kafka API, האימות מתבצע על ידי ניהול זהויות והרשאות גישה (IAM). כדי לבצע פעולה במשאב, לחשבון המשתמש צריכות להיות הרשאות ה-API הנדרשות של Managed Kafka עבור הפעולה הזו. במסמכי התיעוד של כל משימה מפורטים התפקידים ב-IAM שנדרשים לביצוע המשימה. לדוגמה, כדי לאפשר לחשבון משתמש ליצור נושאים ב-Kafka, צריך להעניק לו את התפקיד Managed Kafka Topic Editor.

בקרת גישה באמצעות Apache Kafka API

לקוחות שמשתמשים ב-Apache Kafka API מאומתים באמצעות SASL או אימות TLS בו-זמני (mTLS).

  • אם לקוח מתחבר באמצעות SASL, לחשבון המשתמש שמבצע את האימות צריכה להיות הרשאת IAM‏ managedkafka.clusters.connect. כדי לתת את ההרשאה הזו, אפשר להקצות לחשבון המשתמש את התפקיד לקוח מנוהל של Kafka (roles/managedkafka.client).

  • אם לקוח מתחבר באמצעות mTLS, לא נדרשת ההרשאה managedkafka.clusters.connect. במקום זאת, הלקוחות משתמשים באישורי לקוח כדי לבצע אימות.

אחרי שהלקוח מתחבר, השירות משתמש ברשימות בקרת גישה (ACL) של Kafka כדי לאשר את הפעולות של הלקוח, כמו קריאה או שינוי של משאבים.

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

כדי להבטיח אבטחה מקיפה, צריך להגדיר את הדברים הבאים:

  • הרשאות IAM לגישת ניהול.

  • הרשאת IAM להתחבר לאשכול, אם הלקוחות משתמשים ב-SASL.

  • רשימות בקרת גישה (ACL) של Kafka לגישה לנתונים ולפעולות בתוך האשכול מלקוחות קוד פתוח של Apache Kafka, ללא קשר לשיטת האימות.

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

  • כדי למנוע מהגורם הראשי להשתמש ב-Managed Kafka API כדי לעדכן נושאים (לדוגמה, באמצעות מסוף Google Cloud ), צריך לשלול ממנו את ההרשאה managedkafka.topics.update.

  • אופציונלי: דחיית ההרשאה managedkafka.clusters.connect מחשבון המשתמש, כדי למנוע ממנו להתחבר לאשכול באמצעות אימות SASL.

  • אם לגורם הראשי נדרשת גישה ל-SASL מסיבות אחרות, או אם הגורם הראשי מתחבר באמצעות mTLS, צריך ליצור רשימת בקרת גישה (ACL) של Kafka שחוסמת פעולות של ALTER, ALTER_CONFIGS ו-DELETE בנושאים. דוגמאות ספציפיות מופיעות במאמר בנושא דחיית בקשה לשינוי כל הנושאים.

בקרת גישה ברמת המשאב

כדי להגביל את הרשאות ה-IAM של גורם ראשי למשאבים ספציפיים של שירות מנוהל ל-Apache Kafka בפרויקט, כמו אשכולות או נושאים ספציפיים, צריך להשתמש בתנאים של IAM.

בדוגמה הבאה מוצג תנאי IAM שמאפשר גישה רק אם סוג המשאב הוא managedkafka.googleapis.com/Topic ושם המשאב מסתיים ב-"test-topic":

{
    "expression": "resource.name.endsWith(\"topic-1\") &&\nresource.type == \"managedkafka.googleapis.com/Topic\"",
    "title": "topic-1",
    "description": "Grant access only to topic-1"
}

חלק מהבקשות בשירות המנוהל ל-Apache Kafka, כמו יצירה או עדכון של אשכולות, מחזירות פעולות שפועלות לזמן רב. אם נותנים גישה ברמת האשכול, צריך לכלול גישה לכל המשאבים מסוג managedkafka.googleapis.com/Operation, בנוסף לתנאי המשאב לכל אשכול. ההרשאה הזו מבטיחה שהגורם הראשי יוכל ליזום את הפעולה ולעקוב אחרי ההתקדמות שלה.

המאמרים הבאים

Apache Kafka®‎ הוא סימן מסחרי רשום של The Apache Software Foundation או של השותפים העצמאיים שלה בארצות הברית או במדינות אחרות.