ייבוא וייצוא של מפתחות

במאמר הזה מוסבר איך לייבא ולייצא מפתחות של מערכת לניהול מפתחות (KMS). הפעולות האלה משתמשות בממשק שורת הפקודה (CLI) של kubectl ומתקשרות עם משאבי Kubernetes הבאים:

לפרטים נוספים על המשאבים האלה, אפשר לעיין בסקירה הכללית על KMS API.

כדי לראות את הרשימה המלאה של מפתחות KMS נתמכים ואת הפרטים שלהם, אפשר לעיין בקטע מפתחות נתמכים במסמך בנושא מערכת לניהול מפתחות.

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

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

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

שליחת בקשה לתפקידי IAM

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

  • אדמין של ייבוא מפתחות KMS (kms-keyimport-admin): יצירה, עדכון ומחיקה של משאבי KeyImport.
  • KMS Key Export Admin (kms-keyexport-admin): create, update, and delete KeyExport resources.

הכנת הסביבה

ייבוא של מפתח שיוצא

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

  1. יוצרים קובץ YAML ומוסיפים את משאב KeyImport כערך של אובייקט kind:

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyImport
    metadata:
      name: KEY_IMPORT_NAME
      namespace: PROJECT
    spec:
      context:
        mechanism: MECHANISM
    

    מחליפים את המשתנים הבאים:

    • KEY_IMPORT_NAME: השם של משאב KeyImport – לדוגמה: key-import-test.
    • PROJECT: השם של מרחב השמות של הפרויקט ‒ לדוגמה: kms-test1.
    • MECHANISM: מנגנון שיתוף המפתחות של המפתח ‒ לדוגמה: EDCH_P521_AES256 .
  2. מחילים את התוכן של קובץ ה-YAML על KMS ויוצרים את משאב KeyImport:

    kubectl apply -f FILENAME.yaml
    

    מחליפים את FILENAME בשם של קובץ ה-YAML.

    בעזרת המפתח הציבורי של זוג מפתחות שנוצר באופן פנימי, KMS מעדכן את הסטטוס של משאב KeyImport ל-AwaitingKeyToImport. כדי להמשיך, צריך להציג את הסטטוס של המשאב ולקבל את המפתח הציבורי שנוצר על ידי KMS.

  3. כדי לראות את הסטטוס של משאב KeyImport ולקבל את המפתח הציבורי שנוצר על ידי KMS, מריצים את הפקודה הבאה:

    kubectl describe keyimport KEY_IMPORT_NAME --namespace PROJECT
    

    מחליפים את המשתנים הבאים:

    • KEY_IMPORT_NAME: שם המשאב KeyImport — לדוגמה, key-import-test.
    • PROJECT: שם מרחב השמות של הפרויקט ‒ לדוגמה: kms-test1.

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

    ...
    Status:
      Conditions:
        Last Transition Time:  2022-12-14T20:43:50Z
        Message:               waiting for user to provide KeyToImport
        Observed Generation:   1
        Reason:                AwaitingKeyToImport
        Status:                False
        Type:                  Ready
      Imported Key Ref:
        Kind: KeyImport
        Name: key-import-test
      Peer Context:
        Private Key:
        Public Key: PUBLIC_KEY
    Events:           <none>
    

    הערך PUBLIC_KEY מייצג את המפתח הציבורי שנוצר על ידי KMS. מעתיקים את המפתח הציבורי ומוסיפים אותו למשאב KeyExport בשלב הבא.

  4. יוצרים עוד קובץ YAML, מוסיפים את משאב KeyExport כערך של אובייקט kind, ואת התוכן הבא:

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyExport
    metadata:
      name: KEY_EXPORT_NAME
      namespace: PROJECT
    spec:
      context:
        mechanism: MECHANISM
        publicKey: PUBLIC_KEY
      keyToExport:
        kind: KEY_PRIMITIVE
        name: KEY_NAME
    

    מחליפים את המשתנים הבאים:

    • KEY_EXPORT_NAME: השם של משאב KeyExport – לדוגמה: key-export-test.
    • PROJECT: שם מרחב השמות של הפרויקט ‒ לדוגמה: kms-test1.

    • MECHANISM: מנגנון שיתוף המפתחות של המפתח ‒ לדוגמה: EDCH_P521_AES256 .

    • PUBLIC_KEY: המפתח הציבורי מ-keyImport.Status.PeerContext.PublicKey.

    • KEY_PRIMITIVE: ה-CRD של המפתח – לדוגמה, aeadkey ו-signingkey.

    • KEY_NAME: השם של המפתח, לדוגמה key-1.

  5. מחילים את התוכן של קובץ ה-YAML על KMS ויוצרים את משאב KeyExport:

    kubectl apply -f FILENAME.yaml
    

    מחליפים את FILENAME בשם של קובץ ה-YAML.

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

  6. כדי לראות את הסטטוס של המשאב, מריצים את הפקודה הבאה:

    kubectl describe keyexport KEY_EXPORT_NAME --namespace PROJECT
    

    מחליפים את המשתנים הבאים:

    • KEY_EXPORT_NAME: השם של משאב KeyExport – לדוגמה, key-export-test.
    • PROJECT: השם של מרחב השמות של הפרויקט – לדוגמה: kms-test1.

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

    ...
    Status:
    Conditions:
    Last Transition Time:  2022-12-14T20:45:57Z
    Message:               key successfully exported
    Observed Generation:   1
    Reason:                KeyExportCompleted
    Status:                True
    Type:                  Ready
    Exported Key: EXPORTED_KEY
    

    EXPORTED_KEY מייצג את המטא-נתונים של המפתח המיוצא. מעתיקים את התוכן ב-EXPORTED_KEY כדי להמשיך לשלב הבא.

  7. עורכים את קובץ ה-YAML שמכיל את המשאב KeyImport ומוסיפים את התוכן שהעתקתם מהפלט ב-keyexport.status.exportedkey.

    apiVersion: "kms.gdc.goog/v1"
    kind: KeyImport
    metadata:
      name: key-import-test
      namespace: kms-test1
    spec:
      context:
        mechanism: EDCH_P521_AES256
      keyToImport: EXPORTED_KEY
    
  8. אחרי עריכת קובץ ה-YAML, מחילים את התוכן על KMS:

    kubectl apply -f FILENAME.yaml
    

    אחרי שמריצים את הפקודה, מערכת KMS מייבאת את המפתח המיוצא שסיפקתם.

  9. כדי לראות את הפרטים של המפתח המיובא, מריצים את הפקודה הבאה:

    kubectl get keyimport KEY_IMPORT_NAME
    

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

    NAMESPACE   NAME             AGE    READY   REASON              KEY KIND
    kms-test1  KEY_IMPORT_NAME   60s    True    KeyImportCompleted  KEY_PRIMITIVE
    

    KEY_PRIMITIVE מייצג את סוג המפתח שיובא, בין מפתחות ה-AEAD למפתחות החתימה.