ניהול אימות IAM

בדף הזה מוסבר איך לבצע משימות נפוצות שקשורות לתכונת האימות של IAM ב-Memorystore for Redis Cluster. למידע נוסף על התכונה, קראו את המאמר מידע על אימות IAM.

יצירת מכונה עם אימות IAM

כדי ליצור מכונה של Memorystore for Redis Cluster שמשתמשת באימות IAM, מריצים את הפקודה create:

gcloud redis clusters create INSTANCE_ID --region=REGION_ID --network=NETWORK --node-type=NODE_TYPE --shard-count=SHARD_COUNT --auth-mode=iam-auth

מחליפים את מה שכתוב בשדות הבאים:

  • ‫INSTANCE_ID הוא המזהה של מכונת Memorystore for Redis Cluster שאתם יוצרים. מזהה המכונה צריך להיות באורך של 1 עד 63 תווים, ולהכיל רק אותיות קטנות, מספרים או מקפים. הוא צריך להתחיל באות קטנה ולהסתיים באות קטנה או במספר.

  • ‫REGION_ID הוא האזור שבו רוצים למקם את המכונה.

  • ‫NETWORK היא הרשת שמשמשת ליצירת המכונה. הפורמט צריך להיות: projects/NETWORK_PROJECT_ID/global/networks/NETWORK_ID. מזהה הרשת שמשתמשים בו כאן צריך להיות זהה למזהה הרשת שמשתמשים בו במדיניות החיבור לשירות. אחרת, הפעולה create תיכשל. לפרטים נוספים, ראו רשתות.

  • ‫NODE_TYPE הוא סוג הצומת של האשכול.

  • ‫SHARD_COUNT קובע את מספר הרסיסים במופע. מספר השברים (shards) קובע את קיבולת הזיכרון הכוללת לאחסון נתוני האשכול. פרטים נוספים על מפרט האשכול זמינים במאמר מפרט האשכול והצומת.

מתן הרשאות לאימות ב-IAM

כדי לתת גישה ל-IAM, פועלים לפי ההוראות במאמר הקצאת תפקיד ב-IAM כדי להקצות את התפקיד roles/redis.dbConnectionUser לחשבון המשתמש. חשבון משתמש הוא זהות שאפשר להעניק לה גישה למשאבים ב- Google Cloud. לדוגמה, חשבון משתמש יכול להיות חשבון שירות שיכול לגשת לפרויקט Google Cloud .

כברירת מחדל, כשמקצים לחשבון משתמש את התפקיד roles/redis.dbConnectionUser, הוא מקבל גישה לכל המכונות בפרויקט.

יצירת תפקיד אדמין מוגבל ב-IAM למופע

יכול להיות שתרצו ליצור תפקיד שמאפשר לשנות את הרשאות ה-IAM של חיבור למכונה, בלי לתת הרשאת אדמין מלאה ב-IAM. כדי לעשות את זה, אפשר ליצור אדמין IAM מוגבל לתפקיד roles/redis.dbConnectionUser. פרטים נוספים זמינים במאמר בנושא יצירת אדמינים מוגבלים ב-IAM.

התחברות למכונה שמשתמשת באימות ב-IAM

  1. אם עדיין אין לכם מכונה וירטואלית ב-Compute Engine שמשתמשת באותה רשת מורשית כמו אשכול Redis, אתם יכולים ליצור מכונה וירטואלית ולהתחבר אליה באמצעות המדריך להתחלה מהירה בנושא שימוש במכונה וירטואלית עם Linux.

  2. בפרויקט, משתמשים בפקודה gcloud compute instances set-service-account כדי להגדיר חשבון שירות ולהפעיל את היקף ההרשאות של Cloud Platform API למכונה הווירטואלית של Compute Engine.

    gcloud compute instances set-service-account VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=SCOPE
    

    מחליפים את הפרטים הבאים:

    • ‫VM_NAME: השם של המכונה הווירטואלית של Compute Engine
    • ‫SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות
    • ‫SCOPE: היקף Cloud Platform API של המכונה הווירטואלית (cloud-platform)

    לדוגמה, הפקודה הבאה מקצה את חשבון השירות my-sa-123@my-project-123.iam.gserviceaccount.com למכונה וירטואלית בשם example-VM ומגדירה את היקף הגישה במכונה הווירטואלית הזו ל-Cloud Platform API:

    gcloud compute instances set-service-account example-VM \
    --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \
    --scopes=cloud-platform
    

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

  3. מפעילים את Memorystore for Redis API בפרויקט.

    ‫Memorystore for Redis API

  4. מתקינים את redis-cli במכונה וירטואלית ב-Compute Engine על ידי הרצת הפקודה הבאה מטרמינל ה-SSH של Compute Engine:

    sudo apt-get install redis-tools
    
  5. מריצים את הפקודה הבאה כדי לאחזר אסימון גישה למשתמש IAM:

    gcloud auth print-access-token
    

    התוקף של טוקני הגישה פג אחרי שעה. מידע נוסף מופיע במאמר מסגרת הזמן של אסימון הגישה של IAM.

  6. מתחברים לנקודת הקצה לזיהוי של המכונה:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫NETWORK_ADDRESS: כתובת הרשת של המכונה. כדי לראות את כתובת הרשת, אפשר לעיין במאמר בנושא הצגת פרטי האשכול.

    • ‫PORT: מספר היציאה של המכונה. כדי לראות את מספר היציאה, עיינו במאמר הצגת פרטי האשכול.

    • ‫ACCESS_TOKEN: אסימון הגישה שאחזרתם בשלב הקודם.

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

    אם מפעילים הצפנה במעבר באשכול, צריך להוסיף את הדגלים של Transport Layer Security ‏ (TLS). לדוגמה:

    redis-cli -h NETWORK_ADDRESS -p PORT -a ACCESS_TOKEN -c --tls --cacert /tmp/server_ca.pem
    
  7. מריצים את הפקודה CLUSTER SHARDS כדי להציג את הטופולוגיה של האשכול. שימו לב לאחת מכתובות ה-IP ומספרי היציאות של הצומת.

  8. כדי להשתמש ב-redis-cli לאימות ולהתחברות לצומת, משתמשים בפקודה הבאה:

    redis-cli -h NODE_IP_ADDRESS -p NODE_PORT -a ACCESS_TOKEN -c
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫NODE_IP_ADDRESS: כתובת ה-IP של הצומת שציינתם בשלב הקודם
    • ‫NODE_PORT: מספר היציאה של הצומת שציינתם בשלב הקודם
    • ‫ACCESS_TOKEN: טוקן הגישה של IAM שאחזרתם קודם בתהליך הזה
  9. כדי לוודא שיש לכם חיבור מאומת לצומת, מריצים פקודה של Redis‏ SET ושל GET.

  10. מוחקים את המכונה הווירטואלית של Compute Engine ששימשה להתחברות לאשכול. כך תוכלו להימנע מצבירת חיובים בחשבון לחיוב ב-Cloud.

אחזור אוטומטי של טוקן גישה

  1. (אופציונלי) אם עדיין לא עשיתם זאת, צרו חשבון שירות לאפליקציה (ראו יצירה וניהול של חשבון שירות).

    gcloud iam service-accounts create SA_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫SA_NAME הוא השם של חשבון השירות.
    • ‫DESCRIPTION הוא תיאור אופציונלי של חשבון השירות.
    • ‫DISPLAY_NAME הוא שם חשבון השירות שיוצג במסוףGoogle Cloud .
  2. מקצים לחשבון השירות את התפקיד redis.dbConnectionUser בפרויקט.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \
    --role=roles/"ROLE_NAME"
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט.
    • ‫SA_NAME: השם של חשבון השירות.
    • ‫ROLE_NAME: שם התפקיד. בדוגמה הזו: redis.dbConnectionUser.
  3. מאמתים את האפליקציה כחשבון השירות שצוין. מידע נוסף זמין במאמר חשבונות שירות.

דוגמת קוד לחיבור למופע שמשתמש באימות IAM

בדוגמת הקוד הזו מוסבר איך לאמת את האפליקציה באמצעות ספריות לקוח פופולריות. בנוסף, תוכלו לראות איך להשתמש בדוגמת הקוד הזו כדי להתחבר למכונה שמשתמשת באימות IAM.

פתרון בעיות שקשורות להודעות שגיאה באימות IAM

הודעת השגיאה הפעולה המומלצת תיאור

-WRONGPASS invalid username-password pair or user is disabled

מאמתים את טוקן הגישה שסופק לשרת Memorystore for Redis Cluster ומוודאים שמשתמש ה-ACL התואם מופעל.

לחשבון המשתמש ב-IAM אין את ההרשאות הנדרשות, טוקן הגישה שסיפקתם לא תקין או שהמשתמש התואם ברשימת ה-ACL מושבת.

מוודאים שתוקף טוקן הגישה לא פג ושאחזרתם את הטוקן לפי ההוראות במאמר התחברות למכונה שמשתמשת באימות IAM.

אם שיניתם לאחרונה את הרשאות ה-IAM, יכול להיות שיעברו כמה דקות עד שההרשאות יתעדכנו.

-NOAUTH Authentication required

מוודאים שהאפליקציה מוגדרת לספק אסימון גישה של IAM לשרת Memorystore for Redis Cluster.

האפליקציה לא מספקת טוקן גישה לשרת Memorystore for Redis Cluster.

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

-ERR (ERR_IAM_EXHAUSTED) Memorystore IAM authentication backend quota exceeded.

צריך לנסות שוב עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

הקצה העורפי של IAM עמוס מדי והחזיר שגיאה על חריגה ממכסה לשרת Memorystore for Redis Cluster.

כדי למנוע כשלים נוספים בחיבור, מומלץ שאפליקציות ינסו שוב לבצע את הפעולה שגרמה לשגיאה באמצעות השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

-ERR (ERR_IAM_OTHER) Memorystore IAM authentication backend error.

צריך לאמת את שם המשתמש או לנסות שוב עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff).

השגיאה הזו מתרחשת מהסיבות הבאות:

  • שם המשתמש שציינת לא תקין. אפשר להשתמש בשם המשתמש default, להשמיט את שם המשתמש או להשתמש בכתובת האימייל של חשבון המשתמש ב-IAM.
  • ה-backend של IAM החזיר שגיאה זמנית לשרת של Memorystore for Redis Cluster.

אם שם המשתמש תקין, מומלץ שהאפליקציה תנסה שוב את השגיאה הזו עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff) כדי למנוע כשלים נוספים בחיבור.