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

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

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

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

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

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

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

בקשת תפקידים ב-IAM

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

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

הכנת הסביבה

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

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

  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 למפתחות חתימה.