במאמר הזה מוסבר איך להשתמש ברשימות של בקרת גישה (ACL) של Apache Kafka כדי לשלוט בגישה בשירות המנוהל של Google Cloud ל-Apache Kafka.
רשימות בקרת גישה (ACL) של Apache Kafka מספקות בקרת גישה פרטנית בתוך אשכול Kafka.
השירות המנוהל ל-Apache Kafka מאפשר שימוש ב-StandardAuthorizer, שמאחסן את רשימות בקרת הגישה במטא-נתונים של אשכול Kafka שמבוסס על KRaft.
רשימות בקרת הגישה האלה קובעות אילו משתמשים מאומתים יכולים לבצע פעולות ספציפיות במשאבי Kafka ספציפיים, כמו יצירה או צריכה של הודעות בנושא מסוים.
רשימות בקרת הגישה האלה שימושיות לשליטה באינטראקציות עם האשכול באמצעות לקוחות רגילים של Apache Kafka, שחלים עליהם רק בדיקת IAM ברמת האשכול לחיבור הראשוני. מידע נוסף זמין במאמר בקרת גישה באמצעות IAM.
איך פועלת בקרת הגישה של רשימות ACL ב-Kafka
הלקוח מקיים אינטראקציה עם מנגנון ההרשאה של רשימת בקרת הגישה (ACL) הרגילה של Kafka באשכול. הכלי לאישור הרשאות מעריך את רשימות בקרת הגישה (ACL) הרלוונטיות של Apache Kafka כדי לאשר פעולות ספציפיות שהמשתמש מבקש לבצע, כמו יצירת נתונים בנושא מסוים או צריכת נתונים מקבוצה. המשתמש שמשמש לבדיקת ה-ACL נגזר מאחת משיטות האימות הבאות:
SASL: הישות המורשית ב-IAM, כמו כתובת האימייל בחשבון שירות.
mTLS: השם הייחודי (DN) מאישור הלקוח, שאולי עבר שינוי על ידי כללי מיפוי של ישויות.
כדי להבטיח אבטחה מקיפה, צריך להגדיר את הדברים הבאים:
הרשאות IAM לגישת ניהול. מידע נוסף זמין במאמר בקרת גישה באמצעות IAM.
רשימות בקרת גישה (ACL) של Kafka לגישה לנתונים ולפעולות בתוך האשכול מלקוחות קוד פתוח של Apache Kafka, ללא קשר לשיטת האימות.
שימוש ברשימות ACL של Apache Kafka
קישורי ACL של Apache Kafka מופיעים בפורמט הבא:
Principal P is [Allowed/Denied] Operation O From Host H on any resource matching Resource Pattern RP.
בהמשך מפורט מידע חשוב על הפורמט:
הגורם המרכזי(P): זהות המשתמש שמקבל הרשאה. הקידומת של הכותרת היא
User:.באימות SASL, זהו חשבון המשתמש ב-IAM, כמו
User:my-service-account@my-project.iam.gserviceaccount.com.באימות mTLS, זהו השם הייחודי (DN) מאישור הלקוח, כמו
User:CN=my-client,OU=my-org-unit. הפורמט המדויק תלוי בנושא של האישור. אפשר להשתמש בכללים למיפוי של גורם מרכזי כדי לשנות את הערך הזה.
סוג ההרשאה(מאושרת/נדחית): האם הקישור של רשימת ה-ACL מאפשר או דוחה גישה. לביטולי קישור יש עדיפות גבוהה יותר.
פעולה(O): הפעולה שבוצעה, כמו קריאה, כתיבה או יצירה. מידע על הפעולות שחלות על משאבים שונים בפרוטוקולי Kafka שונים זמין במאמר Operations and Resources on Protocols (פעולות ומשאבים בפרוטוקולים) במסמכי התיעוד של Apache Kafka.
מארח(H): המכונה שממנה מגיעה הבקשה. מכיוון שהשירות המנוהל ל-Apache Kafka מתרגם כתובות רשת של לקוחות, השימוש במארחים שאינם
'*'לא נתמך.תבנית משאב(RP): תבנית שמשמשת להתאמה של משאבים ספציפיים. דפוס משאב מורכב מסוג משאב, שם משאב וסוג דפוס (
LITERALאוPREFIXED).
הרשאות גישה המוגדרות כברירת מחדל
אשכולות של שירות מנוהל ל-Apache Kafka פועלים עם המאפיין Apache Kafka
allow.everyone.if.no.acl.found שמוגדר לערך true. הנוכחות או היעדר של Kafka ACLs קובעות ישירות את רמת הגישה למשאבים:
אם לא מוגדרות רשימות ACL של Kafka למשאב ספציפי כמו נושא, כל החשבונות המאומתים מקבלים גישה אליו. ההגדרה הזו מאפשרת להפעיל מיד אשכולות של שירות מנוהל ל-Apache Kafka, בלי שצריך להגדיר ACL.
ברגע שמגדירים ACL של Kafka למשאב, הגישה אליו מוגבלת. רק לחשבונות משתמשים שקיבלו הרשאה מפורשת באמצעות רשומה ב-ACL של Kafka יש גישה למשאבים תואמים (אלא אם הם נחסמו באופן ספציפי על ידי רשומה ב-ACL של
DENY).ALLOW
השירות המנוהל ל-Apache Kafka מעניק לסוכן השירות גישת אדמין לאשכול. הגישה הזו מאפשרת לסוכן השירות לבצע פעולות שמתבקשות על ידי ה-API של השירות המנוהל ל-Apache Kafka, ללא קשר לרשימות בקרת גישה אחרות שהוגדרו באשכול.
השירות המנוהל ל-Apache Kafka עושה זאת על ידי שינוי ההטמעה של StandardAuthorizer. השינוי מעניק לסוכן השירות הרשאות דומות לאלה של משתמשי סופר, למעט פעולות קריאה וכתיבה. אי אפשר לשנות את ההגדרה הזו.
Kafka principals
חשבונות המשתמשים ב-Kafka באשכולות של שירות מנוהל ל-Apache Kafka מצוינים עם הקידומת "User:" של Kafka StandardAuthorizer.
ב-SASL/IAM: החשבון הראשי הוא חשבון Google Cloud. לדוגמה, כדי להעניק גישה לחשבון השירות
test-kafka-client@test-project.iam.gserviceaccount.com, משתמשים בחשבון המשתמש של Kafka"User:test-kafka-client@test-project.iam.gserviceaccount.com". בחשבונות משתמשים של Kafka ACL צריך לציין משתמש, חשבון שירות או חשבון משתמש ב-IAM, אבל לא קבוצה או קבוצת חשבונות משתמשים. רשימות בקרת גישה (ACL) ב-Kafka לא תומכות בפענוח של חברות בקבוצות עבור משתמשי Google Cloud .ב-mTLS: העיקרון נגזר מהשם המובחן (DN) של הנושא באישור הלקוח. לדוגמה,
User:CN=client1,OU=dev,O=MyOrg,L=City,ST=State,C=US. אתם יכולים להשתמש בכללי מיפוי של mTLS principal כדי להמיר את ה-DN למחרוזת principal ידידותית יותר למשתמשים עבור רשימות ACL.
כדי ליצור ACL שחל על כל החברים בקבוצת Google או על קבוצת חשבונות משתמש, אפשר להשתמש בחשבון משתמש של שרת proxy ולהתחזות לחשבון שירות:
יוצרים חשבון שירות לשימוש כפרוקסי לקבוצה.
מקצים לקבוצת Google או לחשבון המשתמש את התפקיד 'יצירת אסימונים בחשבון שירות' בחשבון השירות. ניהול הגישה לחשבונות שירות
מוסיפים רשימות בקרת גישה (ACL) של Kafka לחשבון השירות של ה-proxy. דוגמה לישות ראשית:
User:group-proxy@test-project.iam.gserviceaccount.com.להשתמש בהתחזות לחשבון שירות בלקוחות Kafka כדי לבצע אימות ב-Kafka בתור חשבון השירות. Google Cloud IAM מאשר לחשבון משתמש ספציפי להיות חבר בקבוצה שמורשית להתחזות לחשבון השירות של ה-proxy. מערכת Kafka מאשרת את חשבון השירות של שרת ה-proxy מול רשימות בקרת הגישה (ACL) הקיימות באשכול.
פעולות Kafka עבור צרכנים ומפיקים
פעולה היא פעולה שמבוצעת במשאב. לכל משאב, פעולה ממופה לבקשה אחת או יותר של פרוטוקול Kafka עבור אותו משאב.
לדוגמה, פעולת READ עבור סוג המשאב topic ממופה לפרוטוקולים Fetch, OffsetCommit ו-TxnOffsetCommit של Apache Kafka.
כדי לתת לחשבון ראשי הרשאת הפקה בנושא, מבצעים את השלבים הבאים:
במשאב הנושא, מאשרים את הפעולות
WRITEו-CREATE.אם משתמשים במזהי עסקאות, במשאב של מזהה העסקה צריך לאפשר את הפעולה
WRITE.
כדי להעניק לחשבון משתמש גישת צריכה לנושא, מבצעים את השלבים הבאים:
במשאב הנושא, מאשרים את הפעולה
READ.במשאב של קבוצת הצרכנים, מאשרים את הפעולה
READ.
מידע נוסף על הפעולות התקפות במשאבים שה-Kafka API תומך בהן זמין במאמר Operations and Resources on Protocols במסמכי התיעוד של Apache Kafka.
הגדרת רשימות ACL להתנהגות של דחייה כברירת מחדל
אשכולות מנוהלים של Kafka מוגדרים עם allow.everyone.if.no.acl.found =
true. לכן, כברירת מחדל, אם לא מוגדרות רשימות ACL במשאב, לכל חשבונות המשתמש יש גישה למשאב.
כדי להגדיר התנהגות של default-deny שדומה לזו של IAM, אפשר קודם להגדיר גישה למשתמש אדמין לכל המשאבים באשכול. כתוצאה מכך, לכל משאב מוגדרת רשימת בקרת גישה (ACL), וההתנהגות של allow.everyone.if.no.acl.found מבוטלת. כברירת מחדל, הגישה נדחית לכל גורם (principal) שלא קיבל אישור מפורש מרשימת ACL של ALLOW.
לדוגמה, כדי להגדיר רשימות ACL בכל המשאבים באשכול עבור חשבון השירות clusterAdmin@test-project.iam.gserviceaccount.com, צריך ליצור את רשומות ה-ACL הבאות.
הפקודה הבאה ב-CLI של gcloud מעניקה לחשבון שירות בשם clusterAdmin@test-project.iam.gserviceaccount.com
גישת אדמין מלאה (--operation=ALL) לאשכול Kafka ספציפי שנמצא באזור מסוים. ההרשאה הזו מאפשרת לחשבון השירות לבצע כל פעולה באשכול מכל מארח.
gcloud managed-kafka acls add-acl-entry cluster \
--principal=`User:clusterAdmin@test-project.iam.gserviceaccount.com` \
--operation=ALL \
--permission-type=ALLOW \
--host=* \
--cluster=CLUSTER_ID \
--location=LOCATION
הפקודה הבאה ב-CLI של gcloud מעניקה לחשבון שירות בשם clusterAdmin@test-project.iam.gserviceaccount.com גישת אדמין מלאה (--operation=ALL) לכל הנושאים באשכול Kafka ספציפי שנמצא באזור מסוים. ההרשאה הזו מאפשרת לחשבון השירות לבצע כל פעולה בכל הנושאים מכל מארח.
gcloud managed-kafka acls add-acl-entry allTopics \
--principal=`User:clusterAdmin@test-project.iam.gserviceaccount.com` \
--operation=ALL \
--permission-type=ALLOW \
--host=* \
--cluster=CLUSTER_ID \
--location=LOCATION
הפקודה הבאה ב-CLI של gcloud מעניקה לחשבון שירות בשם clusterAdmin@test-project.iam.gserviceaccount.com
גישת אדמין מלאה (--operation=ALL) לכל קבוצות הצרכנים באשכול Kafka ספציפי שנמצא באזור מסוים. ההרשאה הזו מאפשרת לחשבון השירות לבצע כל פעולה בכל קבוצות הצרכנים מכל מארח.
gcloud managed-kafka acls add-acl-entry allConsumerGroups \
--principal=`User:clusterAdmin@test-project.iam.gserviceaccount.com` \
--operation=ALL \
--permission-type=ALLOW \
--host=* \
--cluster=CLUSTER_ID \
--location=LOCATION
הפקודה הבאה ב-CLI של gcloud מעניקה לחשבון שירות בשם clusterAdmin@test-project.iam.gserviceaccount.com גישת אדמין מלאה (--operation=ALL) לכל מזהי העסקאות באשכול Kafka ספציפי שנמצא באזור מסוים. ההרשאה הזו מאפשרת לחשבון השירות לבצע כל פעולה על כל מזהי העסקאות מכל מארח.
gcloud managed-kafka acls add-acl-entry allTransactionalIds \
--principal=`User:clusterAdmin@test-project.iam.gserviceaccount.com` \
--operation=ALL \
--permission-type=ALLOW \
--host=* \
--cluster=CLUSTER_ID \
--location=LOCATION
בהמשך מופיעה רשימה של פרטים חשובים על הפקודות:
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com': חשבון המשתמש שעליו חלה רשימת ה-ACL. החשבון הראשי הוא חשבון עם הקידומת Kafka StandardAuthorizerUser:. Google Cloud
--operation=all: פעולת Kafka שההרשאה ניתנת לגביה, שהיא גישה מלאה במקרה הזה.
--permission-type=ALLOW: רשומת ה-ACL הזו מעניקה גישה.
--host='*': המארח שממנו חשבון המשתמש יכול לגשת למשאב.'*'מאפשרת גישה מכל מארח. שירות מנוהל ל-Apache Kafka תומך רק ב-ACL עם מארח'*'.CLUSTER_ID: השם של האשכול שלכם בשירות המנוהל ל-Apache Kafka.
LOCATION: האזור שבו נמצא האשכול שלכם בשירות המנוהל ל-Apache Kafka, כמו
us-central1. Google Cloud
הגדרת רשימות ACL
אפשר להגדיר ACLs של Apache Kafka באמצעות ממשקי ה-API של ACLs של השירות המנוהל ל-Apache Kafka, או באמצעות כלים של Apache Kafka בקוד פתוח, כמו Apache Kafka authorizer cli kafka-acls.sh או Admin Client.
שירות מנוהל ל-Apache Kafka מארגן את רשימות בקרת הגישה לפי דפוסי משאבים של Kafka. תבנית המשאב מוגדרת לפי:
סוג המשאב: אשכול, נושא, קבוצת צרכנים או מזהה טרנזקציה
סוג התבנית: מילולי או עם קידומת (כל המשאבים שהשם שלהם מתחיל במחרוזת שצוינה)
שם המשאב: שם המשאב או הקידומת שעליהם חלות רשומות ה-ACL.
משאב ACL של שירות מנוהל ל-Apache Kafka מייצג את כל בקרת הגישה שהוגדרה לתבנית משאב יחידה של Kafka, כרשימה חוזרת של רשומות ACL. השם של משאב ACL מזהה באופן ייחודי את תבנית המשאב של הקישור ל-ACL. מידע נוסף זמין במאמר בנושא מזהה ACL.
אפשר לנהל רשימות ACL של שירות מנוהל ל-Apache Kafka ברמת משאב ה-ACL (כל רשומות ה-ACL של תבנית משאב), או באופן מצטבר על ידי הוספה והסרה של רשומות ACL בודדות של תבנית משאב ACL.
מידע נוסף זמין במאמרים בנושא יצירה של רשימת ACL מנוהלת ב-Kafka והוספה של רשומה לרשימת ACL מנוהלת ב-Kafka.
מתן הרשאה לקריאה מתוך נושא
כדי לאפשר ללקוחות Apache Kafka בקוד פתוח שפועלים כחשבון השירות test-kafka-client@test-project.iam.gserviceaccount.com לקרוא מהנושא topic-name, יוצרים רשומה של רשימת בקרת גישה (ACL) בשירות המנוהל ל-Apache Kafka באמצעות הפקודה managed-kafka acls add-acl-entry:
gcloud managed-kafka acls add-acl-entry topic/topic-name \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=READ \
--permission-type=ALLOW \
--host='*'
בהמשך מפורט מידע חשוב על הפקודה:
topic/topic-name: מציין את הנושא בשירות המנוהל ל-Apache Kafka שרוצים לתת לו גישה. מחליפים אתtopic-nameבשם הנושא בפועל. הקידומתtopic/מציינת שהרשומה הזו ברשימת ה-ACL חלה על תבנית משאב ספציפית (מילולית) של נושא.
LOCATION: האזור שבו נמצא האשכול שלכם בשירות המנוהל ל-Apache Kafka, לדוגמהus-central1. Google Cloud
CLUSTER_ID: השם של האשכול שלכם בשירות המנוהל ל-Apache Kafka.
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com': חשבון המשתמש שעליו חלה רשימת ה-ACL. החשבון הראשי הוא חשבון עם הקידומת Kafka StandardAuthorizerUser:. Google Cloud
--operation=READ: פעולת Kafka שניתנת, שהיאREADבמקרה הזה.
--permission-type=ALLOW: מציין שרשומת ה-ACL הזו מעניקה גישה.
--host='*': מציין את המארח שממנו לחשבון המשתמש יש גישה למשאב.'*'מאפשרת גישה מכל מארח. שירות מנוהל ל-Apache Kafka תומך רק ב-ACL עם מארח'*'.
כדי להסיר את הרשאת הגישה לקריאה, אפשר להשתמש בפקודה remove-acl-entry עם אותם פרמטרים.
gcloud managed-kafka acls remove-acl-entry topic/topic-name \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=READ \
--permission-type=ALLOW \
--host='*'
אפשר לכתוב לכל הנושאים עם קידומת משותפת
כדי לאפשר ללקוחות Apache Kafka בקוד פתוח שפועלים כחשבון השירות test-kafka-client@test-project.iam.gserviceaccount.com לכתוב לכל הנושאים שהשם שלהם מתחיל בקידומת topic-prefix, מוסיפים רשומה של ACL מנוהל של Kafka באופן הבא:
gcloud managed-kafka acls add-acl-entry topicPrefixed/topic-prefix \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=WRITE \
--permission-type=ALLOW \
--host='*'
בהמשך מפורט מידע חשוב על הפקודה:
topicPrefixed/topic-prefix: מציין את תבנית המשאבים של השירות המנוהל ל-Apache Kafka שרוצים להעניק לה גישה. מחליפים אתtopic-prefixבקידומת בפועל של הנושאים. הקידומתtopicPrefixed/מציינת שרשומת ה-ACL הזו חלה על תבנית משאב עם קידומת: כל הנושאים שתואמים לקידומת הנתונה.
PROJECT: מזהה הפרויקט ב- Google Cloud שבו נמצא האשכול של השירות המנוהל ל-Apache Kafka.
LOCATION: האזור שבו נמצא האשכול שלכם בשירות המנוהל ל-Apache Kafka, כמוus-central1. Google Cloud
CLUSTER_ID: השם של האשכול שלכם בשירות המנוהל ל-Apache Kafka.
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com': חשבון המשתמש שעליו חלה רשימת ה-ACL. החשבון הראשי הוא חשבון עם הקידומת Kafka StandardAuthorizerUser:. Google Cloud
--operation=WRITE: פעולת Kafka שניתנת, שהיאWRITEבמקרה הזה.
--permission-type=ALLOW: רשומת ה-ACL הזו מעניקה גישה.
--host='*': המארח שממנו חשבון המשתמש יכול לגשת למשאב.'*'מאפשרת גישה מכל מארח. שירות מנוהל ל-Apache Kafka תומך רק ב-ACL עם מארח'*'.
כדי להסיר את הרשאת הכתיבה לחשבון השירות הזה, מסירים את הרשומה ב-ACL:
gcloud managed-kafka acls remove-acl-entry topicPrefixed/topic-prefix \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=WRITE \
--permission-type=ALLOW \
--host='*'
דחיית בקשה לשינוי כל הנושאים
כדי למנוע מלקוחות Apache Kafka בקוד פתוח שפועלים כחשבון שירות test-kafka-client@test-project.iam.gserviceaccount.com לשנות את כל הנושאים באשכול, אפשר ליצור משאב ACL של שירות מנוהל ל-Apache Kafka עם רשימה של משאבי AclEntry כדי לדחות את הפעולות ALTER, ALTER_CONFIGS ו-DELETE בכל הנושאים. בגישה הזו, מגדירים את המצב הנדרש בהגדרה אחת.
אפשרות אחרת היא להוסיף שלוש רשומות ACL נפרדות באופן אימפרטיבי באמצעות הפקודה gcloud managed-kafka acls add-acl-entry. בשיטה הזו מריצים את הפקודה כדי לדחות את הגישה לכל אחת מהפעולות ALTER, ALTER_CONFIGS ו-DELETE, באופן הבא:
gcloud managed-kafka acls add-acl-entry allTopics \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=ALTER \
--permission-type=DENY \
--host='*'
gcloud managed-kafka acls add-acl-entry allTopics \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=ALTER_CONFIGS \
--permission-type=DENY \
--host='*'
gcloud managed-kafka acls add-acl-entry allTopics \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=DELETE \
--permission-type=DENY \
--host='*'
המידע הבא רלוונטי לכל אחת מהפקודות add-acl-entry:
allTopics: מציין שה-ACL הזה חל על כל הנושאים באשכול של שירות מנוהל ל-Apache Kafka.
LOCATION: האזור שבו נמצא האשכול שלכם בשירות המנוהל ל-Apache Kafka, כמוus-central1. Google Cloud
CLUSTER_ID: השם של האשכול שלכם בשירות המנוהל ל-Apache Kafka.
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com': מציין את חשבון המשתמש שה-ACL חל עליו. החשבון הראשי הוא חשבון Google Cloud , עם הקידומתStandardAuthorizerשל KafkaUser:.
--operation: מציין את פעולת Kafka שנמנעת:
ALTER: כולל פעולות כמו שינוי מספר המחיצות או גורם השכפול.
ALTER_CONFIGS: כולל שינוי של הגדרות ברמת הנושא.
DELETE: כולל מחיקת נושאים.
--permission-type=DENY: מציין שרשומות ה-ACL האלה חוסמות את הגישה לפעולות שצוינו.
--host='*': מציין שהדחייה הזו חלה בלי קשר למארח שממנו מגיעה הבקשה. השירות המנוהל ל-Apache Kafka תומך רק ב-ACL עם מארח'*'.
כדי להסיר את ההגבלות האלה, משתמשים בפקודה remove-acl-entry לכל אחת מהרשומות שנוספו, עם אותם פרמטרים. לדוגמה, כדי לאפשר שוב מחיקת נושא:
gcloud managed-kafka acls remove-acl-entry allTopics \
--cluster=CLUSTER_ID \
--location=LOCATION
--principal='User:test-kafka-client@test-project.iam.gserviceaccount.com' \
--operation=DELETE \
--permission-type=DENY \
--host='*'
פתרון בעיות שקשורות לרשימות ACL
הכלי Apache Kafka Standard Authorizer כותב יומני ביקורת כברירת מחדל על דחיות הרשאה. אם אתם מקבלים שגיאת הרשאה של Kafka, אתם יכולים לאשר את העיקרון, המשאב והפעולה שנדחו על ידי חיפוש ביומני האשכול של StandardAuthorizerData logAuditMessage.
לדוגמה, הנה יומן של אשכול לדוגמה.
org.apache.kafka.metadata.authorizer.StandardAuthorizerData logAuditMessage\n
INFO: Principal = User:556291496362-compute@developer.iam.gserviceaccount.com is
Denied operation = DESCRIBE from host = 172.16.0.20 on resource = Topic:LITERAL:t1
for request = Metadata with resourceRefCount = 1 based on rule DefaultDeny