יצירת אשכול עם TDE

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

האופרטור AlloyDB Omni Kubernetes מבצע אוטומציה של מחזור החיים של אשכולות של הצפנת נתונים שקופה (TDE) באמצעות המשאב המותאם אישית TdeConfig. המשאב הזה מאחסן את פרטי החיבור של Key Management Service‏ (KMS), ומאפשר למפעיל להחדיר בצורה מאובטחת את פרטי הכניסה הנדרשים ל-pods של מסד הנתונים.

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

  • מגדירים את מנוע הסודות KV-V2 של HashiCorp Vault כדי לוודא שנתיב מפתח ההצפנה (KEK) ואסימון האינטרנט מסוג JSON‏ (JWT) זמינים.
  • מוודאים של-AlloyDB Omni יש הרשאה לקרוא את קובץ ה-JWT.
  • אופציונלי: כדי לפרוס אשכול עם TDE ב-OpenShift, צריך להעניק את hostmount-anyuid Security Context Constraint (SCC) לחשבון השירות DBCluster שמריץ את אשכול מסד הנתונים.

    oc adm policy add-scc-to-user hostmount-anyuid -z DBCLUSTER_NAME-sa -n DBCLUSTER_NAMESPACE

    מחליפים את DBCLUSTER_NAME בשם של DBCluster ואת DBCLUSTER_NAMESPACE במרחב השמות שבו רוצים ליצור את משאב DBCluster.

הגדרת גישה לכספת

יוצרים משאב סודי שמכיל את הנתיב של KEK ואת פרטי האימות.

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
  token_path: "JWT_TOKEN_PATH"

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

  • CONFIG_MAP_NAME: השם של מפת ההגדרות. הערכים שמוגדרים ב-kek_url וב-token_path משמשים בהגדרת המשאב TdeConfig.
  • KEK_URL: כתובת ה-URL המלאה של מפתח ה-KEK ב-HashiCorp Vault. משתמשים ב-vault כפרוטוקול כדי לציין את HashiCorp Vault כספק KMS – לדוגמה, vault.vault://vault.default.svc:8200/v1/secrets/data/alloydb_kek
  • JWT_TOKEN_PATH: הנתיב לאסימון JWT בצומת. לדוגמה, /tmp/token. נתיב הגישה של אסימון ה-JWT צריך להיות זהה בכל הצמתים באשכול.

יצירת סוד TLS

כדי ליצור סוד TLS לאחסון האישורים, מריצים את הפקודות הבאות:

kubectl create secret tls VAULT_SECRET_NAME \
    --cert=vault.crt \
    --key=vault.key

kubectl patch secret VAULT_SECRET_NAME \
    -p '{"data":{"ca.crt":"'$(base64 -w 0 vault.crt)'"}}' \
    --type=merge

מחליפים את VAULT_SECRET_NAME בשם של ה-Secret של TLS. משתמשים בשם הסוד הזה כשיוצרים את TdeConfig המשאב המותאם אישית.

יצירת TdeConfig CRD

יוצרים משאב TdeConfig שמגדיר איך AlloyDB Omni מתקשר עם הכספת כדי לאחזר את מפתח הצפנה של מפתח. סוג האימות הנתמך היחיד הוא jwt. חשוב לוודא שיוצרים את המשאב TdeConfig באותו מרחב שמות שבו נוצר המשאב DbCluster.

מוודאים שלמשתמש postgres יש גישה לנתיב של אסימון ה-JWT, ושאפשר להגיע למופע של הכספת דרך הרשת.

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

יוצרים ומחילים קובץ מניפסט עבור המשאב TdeConfig.

  apiVersion: alloydbomni.dbadmin.goog/v1
  kind: TdeConfig
  metadata:
    name: TDE_CONFIG_NAME
  spec:
    kekUrlRef:
      name: CONFIG_MAP_NAME
      key: kek_url
    kmsProvider:
      vault:
        authType: "jwt"
        authMount: "JWT_AUTH_MOUNT_PATH"
        jwt:
          pathRef:
            name: "CONFIG_MAP_NAME"
            key: "token_path"
          role: "VAULT_ROLE"
    tls:
      certSecret:
        name: "VAULT_SECRET_NAME"

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

  • TDE_CONFIG_NAME: השם של משאב TdeConfig.
  • JWT_AUTH_MOUNT_PATH: הנתיב שבו מותקן מנוע האימות ב-HashiCorp Vault, כפי שמוגדר בתצורה. לדוגמה, auth/kms.
  • ‫(Optional) VAULT_ROLE: תפקיד הלקוח שמוגדר בהגדרות של Vault. תפקיד הלקוח מאמת את ה-JWT ומשקף את זכויות הגישה והזהות הספציפיות שהתפקיד מקבל ב-HashiCorp Vault.
  • VAULT_SECRET_NAME: השם של הסוד שמכיל את האישורים לחיבור לכספת. לדוגמה, vault-secret.

פריסת ה-DBCluster

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

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.3.0"
      features:
        transparentDataEncryption:
          tdeConfigRef:
            name: "TDE_CONFIG_NAME"
    
    [...]
    

    מחליפים את TDE_CONFIG_NAME בשם של משאב TdeConfig ואת DBCLUSTER_NAME בשם של DBCluster שרוצים ליצור.

  2. אופציונלי: אם אתם פורסים את DBCluster בסביבת OpenShift, אתם צריכים להוסיף הערה למשאב DBCluster עם ההערה hostmount-anyuid.

    kubectl annotate dbclusters.alloydbomni.dbadmin.goog `DBCLUSTER_NAME` -n `DBCLUSTER_NAMESPACE` openshift.io/scc=anyuid
    

    מחליפים את DBCLUSTER_NAME בשם של DBClusterהמשאב ואת DBCLUSTER_NAMESPACE במרחב השמות שבו רוצים ליצור את משאב DBCluster.

כדי להפעיל TDE למטמון עמודות שגולש ל-SSD, צריך להחיל תיקון על DBCluster באופן הבא:

kubectl patch dbcluster `DBCLUSTER_NAME` \
  -n `DBCLUSTER_NAMESPACE` \
  -p '{"spec":{"primarySpec":{"parameters": {"google_columnar_engine.enable_tde_for_storage_cache": "on"}}}}' \
  --type=merge

הפניות למדדי TDE

אפשר לראות את כל מדדי ה-TDE בסוכן המעקב של AlloyDB Omni. בטבלה הבאה מוסבר מה המשמעות של כל מדד.

שם תיאור תווית יחידה סוג
alloydb_omni_database_tde_data_blocks_decrypted_count_total מספר בלוקי הנתונים שפוענחו. לא רלוונטי מונה
alloydb_omni_database_tde_data_blocks_encrypted_count_total מספר בלוקי הנתונים שהוצפנו. לא רלוונטי מונה
alloydb_omni_database_tde_data_decryption_time_us_total הזמן הכולל שנדרש לפענוח בלוק הנתונים. לא רלוונטי מיקרו-שניות מונה
alloydb_omni_database_tde_data_encryption_time_us_total הזמן הכולל שהוקדש להצפנת בלוק נתונים. לא רלוונטי מיקרו-שניות מונה
alloydb_omni_database_tde_enabled סטטוס ההפעלה של TDE. לא רלוונטי מד
alloydb_omni_database_tde_kek_info פרטי KEK של TDE.
  • kek_version: הגרסה של מפתח ה-KEK
    שנמצאת בשימוש לאריזת המפתח.
  • kek_url: נתיב מוגדר במלואו
    למפתח להצפנת מפתחות הצפנה (KEK) ב-KMS
  • kek_creation_timestamp:
    זמן היצירה של גרסת ה-KEK שבשימוש.
מד
alloydb_omni_database_tde_temp_blocks_decrypted_count_total מספר החסימות הזמניות שפוענחו. לא רלוונטי מונה
alloydb_omni_database_tde_temp_blocks_encrypted_count_total מספר החסימות הזמניות שהוצפנו. לא רלוונטי מונה
alloydb_omni_database_tde_temp_decryption_time_us_total הזמן הכולל שהוקדש לפענוח של חסימה זמנית. לא רלוונטי מיקרו-שניות מונה
alloydb_omni_database_tde_temp_encryption_time_us_total הזמן הכולל שהוקדש להצפנה של חסימה זמנית. לא רלוונטי מיקרו-שניות מונה
alloydb_omni_database_tde_wal_blocks_decrypted_count_total מספר בלוקים של WAL שפוענחו. לא רלוונטי מונה
alloydb_omni_database_tde_wal_blocks_encrypted_count_total מספר בלוקים של WAL שהוצפנו. לא רלוונטי מונה
alloydb_omni_database_tde_wal_decryption_time_us_total הזמן הכולל שהוקדש לפענוח של בלוקים ב-WAL. לא רלוונטי מיקרו-שניות מונה
alloydb_omni_database_tde_wal_encryption_time_us_total הזמן הכולל שהוקדש להצפנת בלוקים ב-WAL. לא רלוונטי מיקרו-שניות מונה
tde_chill_cache_blocks_encrypted מספר הבלוקים במטמון המקורר שהוצפנו. לא רלוונטי מונה
tde_chill_cache_blocks_decrypted מספר הבלוקים במטמון המקורר שפוענחו. לא רלוונטי מונה
tde_chill_cache_blocks_total_encryption_time_us הזמן הכולל שהוקדש להצפנת בלוקים במטמון במצב לא פעיל. לא רלוונטי מיקרו-שניות מונה
tde_chill_cache_blocks_total_decryption_time_us הזמן הכולל שחלף בפענוח של בלוקים במטמון במצב המתנה. לא רלוונטי מיקרו-שניות מונה
tde_ce_cache_ssd_blocks_encrypted מספר בלוקים של מטמון עמודות שנשפכו לאחסון SSD שהוצפנו. לא רלוונטי מונה
tde_ce_cache_ssd_blocks_decrypted מספר בלוקים של מטמון עמודות שנשפכו לאחסון SSD ופוענחו. לא רלוונטי מונה
tde_ce_cache_ssd_blocks_total_encryption_time_us משך הזמן הכולל שנדרש להצפנת בלוקים של מטמון עמודות שגולשים לאחסון SSD. לא רלוונטי מיקרו-שניות מונה
tde_ce_cache_ssd_blocks_total_decryption_time_us משך הזמן הכולל שנדרש לפענוח של בלוקים של מטמון עמודות שנשפכו לאחסון SSD. לא רלוונטי מיקרו-שניות מונה