הענקת גישה לקטגוריות אחסון בפרויקטים וקבלת גישה אליהן

בדף הזה מוסבר איך לנהל את הגישה לקטגוריות אחסון בפרויקטים של Google Distributed Cloud (GDC) עם air gap, כדי שלאנשים הנכונים יהיו ההרשאות המתאימות. הוא כולל את הדרישות המוקדמות ואת השלבים לקבלת גישה לחשבון משתמש ולחשבון שירות, ולהענקת גישה אליהם, באמצעות קישורי תפקידים ותפקידים מוגדרים מראש. המידע הזה מאפשר לכם לשלוט ביעילות בגישה למשאבי האחסון שלכם, ולשמור על האבטחה ועל היעילות התפעולית.

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

לפני שמתחילים

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

מתן גישה לקטגוריה

אתם יכולים לתת גישה למשאבי S3 API, כמו קטגוריות ואובייקטים בקטגוריות האלה, לנושאי User ו-ServiceAccount. כדי לעשות את זה, צריך ליצור ולהחיל RoleBindings שמפנים לתפקידים מוגדרים מראש בשרת Management API.

תפקידים מוגדרים מראש

  • ‫project-bucket-object-viewer: מאפשר למשתמש להציג את כל הקטגוריות בפרויקט, להציג את האובייקטים בקטגוריות האלה ולקרוא אובייקטים ומטא-נתונים של אובייקטים. הוא לא מאפשר לכתוב פעולות על אובייקטים. לדוגמה: העלאה, החלפה, מחיקה. הרשאת קריאה בלבד בקטגוריות עם שני אזורים בארגון ובפרויקטים שלו, וגם הרשאת קריאה בלבד באובייקטים שבקטגוריות האלה.

  • ‫project-bucket-object-admin: מאפשר למשתמש להציג את כל הקטגוריות בפרויקט, ולבצע פעולות כתיבה וקריאה באובייקטים. לדוגמה: העלאה, החלפה, מחיקה. הרשאת קריאה בלבד בקטגוריות עם שני אזורים בארגון ובפרויקטים שלו, והרשאת קריאה וכתיבה באובייקטים שבקטגוריות האלה.

  • ‫project-bucket-admin: מאפשר למשתמשים לנהל את כל הקטגוריות במרחב השמות הנתון, וגם את כל האובייקטים בקטגוריות האלה. הרשאת קריאה בלבד בקטגוריות עם שני אזורים בארגון ובפרויקטים שלו, והרשאת קריאה וכתיבה באובייקטים שבקטגוריות האלה.

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

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

  1. יוצרים קובץ YAML במערכת, למשל rolebinding-object-admin-all-buckets.yaml.

    # Example file name:
    # rolebinding-object-admin-all-buckets.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      namespace: PROJECT_NAMESPACE
      name: readwrite-all-buckets
    roleRef:
      kind: Role
      name: project-bucket-object-admin
      apiGroup: rbac.authorization.k8s.io
    subjects:
    - kind: ServiceAccount
      namespace: PROJECT_NAMESPACE
      name: SA_NAME
    - kind: User
      namespace: PROJECT_NAMESPACE
      name: bob@example.com
      apiGroup: rbac.authorization.k8s.io
      # Could be bob or bob@example.com based on your organization settings.
    

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

    • ‫PROJECT_NAMESPACE: השם של מרחב השמות של הפרויקט
    • SA_NAME: השם של חשבון השירות

  2. מחילים את קובץ ה-YAML:

    kubectl apply \
    -f rolebinding-object-admin-all-buckets.yaml
    

קבלת פרטי כניסה לצורך גישה לקטגוריה

אחרי שנותנים גישה לקטגוריה, פרטי הכניסה נוצרים ב-Secret.

הפורמט של שם הסוד הוא object-storage-key-STORAGE_CLASS-SUBJECT_TYPE-SUBJECT_HASH.

  • הערכים של STORAGE_CLASS הם:
    • ‫std לסוג האחסון Standard.
  • הערכים של SUBJECT_TYPE הם:
    • ‫user למשתמש.
    • sa עבור ServiceAccount.
  • ‫SUBJECT_HASH הוא גיבוב SHA256 בקידוד base32 של שם הנושא.

לדוגמה, למשתמש bob@foo.com יש שני סודות בשמות:

  1. object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja

קבלת גישת משתמשים

לנושא משתמש, הסוד נמצא במרחב השמות object-storage-access-keys בשרת Management API.

  1. מריצים את הפקודה הבאה כדי למצוא את שם ה-Secret:

    kubectl auth can-i --list --namespace object-storage-access-keys | grep "object-storage-key-"
    

    הפלט אמור להיראות כך:

    secrets        []        [object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja]        [get]
    
  2. כדי לגשת לקטגוריות בסוג האחסון Standard, צריך לקבל את התוכן של ה-Secret התואם:

    kubectl get -o yaml --namespace object-storage-access-keys secret object-storage-key-std-user-oy6jdqd6bxfoqcecn2ozv6utepr5bgh355vfku7th5pmejqubdja
    

    הפלט אמור להיראות כך:

    data:
      access-key-id: MEhYM08wWUMySjcyMkVKTFBKRU8=
      create-time: MjAyMi0wNy0yMiAwMTowODo1OS40MTQyMTE3MDMgKzAwMDAgVVRDIG09KzE5OTAuMzQ3OTE2MTc3
      secret-access-key: Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==
    
  3. מפענחים את המזהה של מפתח הגישה ואת הסוד:

    echo "MEhYM08wWUMySjcyMkVKTFBKRU8=" | base64 -d \
        && echo \
        && echo "Ump0MVRleVN4SmhCSVJhbmlnVDAwbTJZc0IvRlJVendqR0JuYVhiVA==" | base64 -d
    

    הפלט אמור להיראות כך:

    0HX3O0YC2J722EJLPJEO
    Rjt1TeySxJhBIRanigT00m2YsB/FRUzwjGBnaXbT
    
  4. מבצעים את ההוראות בקטע הגדרת ה-gdcloud CLI, עם המידע שמתקבל.

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

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

בנושא של חשבון שירות (SA), מוצאים את השם הסודי מאשכול המשתמשים.

  1. ב-standard storage class, מריצים את הפקודה הבאה כדי לקבל את שם הסוד:

    kubectl get -n=<PROJECT-NAME> serviceaccount <SA-NAME> -o json | jq -r '.secrets[] | select(.name | test("object-storage-key-std"))'
    
  2. מחפשים ידנית ברשימת השמות של הסודות, או משתמשים ב-grep כדי למצוא את object-storage-key-(std|nl):

    kubectl get -n=PROJECT_NAME \
        serviceaccount SA_NAME \
        -o=jsonpath='{.secrets}{"\n"}' | grep -E 'object-storage-key-(std|nl)'
    

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

    • ‫PROJECT_NAME: שם הפרויקט.
    • ‫SA_NAME: השם של חשבון השירות.
  3. אפשר להפנות לסוד ב-Pod בתור משתני סביבה או קבצים.

הרשאות של תפקידים מוגדרים מראש

בשרת ה-API הגלובלי יש תפקידים מוגדרים מראש לגישה אדמיניסטרטיבית ותפעולית לקטגוריות בשני אזורים. התפקידים האלה גם מעניקים גישה לקטגוריות אזוריות, אבל רק אם משתמשים במשאב IAMRoleBinding ולא במשאב RoleBinding או ClusterRoleBinding. מידע נוסף על קישורי תפקידים זמין במאמר מתן גישה וביטול גישה.

הרשאות של project-bucket-object-viewer

התפקיד הזה נותן הרשאות לקבל ולהציג ברשימה אובייקטים ואת המטא-נתונים של האובייקטים בקטגוריה.

רשימה של כל ההרשאות לאחסון אובייקטים שניתנות על ידי project-bucket-object-viewer Role:

  • הרשאות API של קטגוריות:

    1. get
    2. list
    3. שעון
  • הרשאות לאחסון אובייקטים ב-S3:

    1. GetObject
    2. GetObjectAcl
    3. GetObjectLegalHold
    4. GetObjectRetention
    5. GetObjectTagging
    6. GetObjectVersion
    7. GetObjectVersionTagging
    8. ListBucket
    9. ListBucketVersions
    10. ListBucketMultipartUploads
    11. ListMultipartUploadParts

הרשאות אדמין של אובייקטים בקטגוריות של פרויקטים

התפקיד הזה מעניק הרשאות להוסיף ולמחוק אובייקטים, גרסאות של אובייקטים ותגים בקטגוריה. בנוסף, הוא מעניק את כל ההרשאות בתפקיד project-bucket-object-viewer.

רשימה של כל ההרשאות הנוספות לאחסון אובייקטים שניתנות על ידי Role:

  • הרשאות לאחסון אובייקטים ב-S3:

    1. AbortMultipartUpload
    2. DeleteObject
    3. DeleteObjectTagging
    4. DeleteObjectVersion
    5. DeleteObjectVersionTagging
    6. PutObject
    7. PutObjectTagging
    8. PutObjectVersionTagging
    9. PutOverwriteObject
    10. RestoreObject

הרשאות אדמין של קטגוריית הפרויקט

התפקיד הזה נותן הרשאות ליצור, לעדכן או למחוק משאבי Bucket במרחב השמות של הפרויקט. בנוסף, הוא מעניק את כל ההרשאות ב-project-bucket-object-admin.

רשימה של הרשאות נוספות שניתנות על ידי Role:

  • הרשאות API של קטגוריות:

    1. יצירה
    2. עדכון
    3. מחיקה