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

בחירת גרסת תיעוד:

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

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

HashiCorp Vault KMS

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

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

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

Thales CipherTrust KMS

  • מגדירים את Thales CipherTrust Manager כדי לוודא שמפתח ההצפנה הסודי (KEK) נוצר וניתן לייצוא.
  • מוודאים שיש לכם חשבון משתמש ב-CipherTrust Manager (username ו-password) עם הרשאה לאימות ולייצוא של הסוד של ה-KEK.
  • אופציונלי: כדי לפרוס אשכול עם הצפנה שקופה של נתונים ב-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.

הגדרת הגישה ל-KMS

יוצרים את המשאבים ConfigMap ו-Secret של Kubernetes שמכילים את הנתיב של ה-KEK ואת פרטי הכניסה לאימות ב-KMS. חשוב ליצור את המשאבים האלה באותו מרחב שמות שבו אתם מתכננים לפרוס את DBCluster.

HashiCorp Vault KMS

יוצרים משאב ConfigMap שמכיל את כתובת ה-URL של ה-KEK ואת נתיב המארח לטוקן ה-JWT:

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

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

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

Thales CipherTrust KMS

יוצרים משאב ConfigMap שמכיל את כתובת ה-URL של ה-KEK ומשאב Secret שמכיל את פרטי הכניסה לאימות של Thales CipherTrust Manager:

apiVersion: v1
kind: ConfigMap
metadata:
  name: CONFIG_MAP_NAME
data:
  kek_url: "KEK_URL"
---
apiVersion: v1
kind: Secret
metadata:
  name: CREDENTIALS_SECRET_NAME
type: Opaque
stringData:
  username: "CIPHERTRUST_USERNAME"
  password: "CIPHERTRUST_PASSWORD"

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

  • ‫CONFIG_MAP_NAME: השם של ConfigMap. הערך שמוגדר ב-kek_url משמש בהגדרת המשאב TdeConfig.
  • ‫KEK_URL: כתובת ה-URL המלאה של ה-KEK ב-Thales CipherTrust Manager. כדי לציין את Thales CipherTrust Manager כספק ה-KMS, משתמשים בפרוטוקול ciphertrust, לדוגמה ciphertrust://ciphertrust.default.svc:443/api/v1/vault/secrets/alloydb_kek.
  • ‫CREDENTIALS_SECRET_NAME: השם של הסוד ב-Kubernetes שבו מאוחסנים פרטי הכניסה של CipherTrust Manager, לדוגמה ciphertrust-credentials.
  • ‫CIPHERTRUST_USERNAME: שם המשתמש שמשמש לאימות מול Thales CipherTrust Manager.
  • ‫CIPHERTRUST_PASSWORD: הסיסמה של המשתמש ב-Thales CipherTrust Manager.

יצירת סוד TLS

כדי ליצור סוד TLS לאחסון האישורים לאימות החיבור לשרת KMS (HashiCorp Vault או Thales CipherTrust Manager), מריצים את הפקודות הבאות:

kubectl create secret tls TLS_SECRET_NAME \
    --cert=CLIENT_CERT_FILE \
    --key=CLIENT_KEY_FILE

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

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

  • ‫TLS_SECRET_NAME: שם הסוד של TLS (לדוגמה, vault-secret או ciphertrust-tls-secret). משתמשים בשם הסוד הזה כשיוצרים את המשאב המותאם אישית TdeConfig.
  • ‫CLIENT_CERT_FILE: הנתיב לקובץ של אישור ה-TLS של הלקוח (שמאוחסן בתור tls.crt בסוד).
  • ‫CLIENT_KEY_FILE: הנתיב לקובץ של המפתח הפרטי של הלקוח ב-TLS (שנשמר כ-tls.key בסוד).
  • ‫CA_CERT_FILE: הנתיב לקובץ האישור של רשות האישורים (CA) שמשמש לאימות האישור של שרת ה-KMS (מאוחסן בתור ca.crt בסוד).

יצירת המשאב המותאם אישית TdeConfig

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

מוודאים שאפשר להגיע למכונה של KMS דרך הרשת מה-pods של מסד הנתונים.

HashiCorp Vault KMS

מוודאים שלמשתמש postgres יש גישה לנתיב אל טוקן ה-JWT בצומת המארח. יוצרים ומחילים מניפסט למשאב 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: "TLS_SECRET_NAME"

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

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

Thales CipherTrust KMS

יוצרים ומחילים מניפסט למשאב TdeConfig באמצעות הספק ciphertrust:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: TdeConfig
metadata:
  name: TDE_CONFIG_NAME
spec:
  kekUrlRef:
    name: CONFIG_MAP_NAME
    key: kek_url
  kmsProvider:
    ciphertrust:
      authType: "password"
      credentialsSecretRef:
        name: "CREDENTIALS_SECRET_NAME"
  tls:
    certSecret:
      name: "TLS_SECRET_NAME"

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

  • ‫TDE_CONFIG_NAME: השם של המשאב ב-TdeConfig.
  • ‫CONFIG_MAP_NAME: השם של ה-ConfigMap שמכיל את kek_url.
  • ‫CREDENTIALS_SECRET_NAME: השם של סוד Kubernetes שמכיל את המפתחות של CipherTrust Manager‏ username ו-password, לדוגמה ciphertrust-credentials.
  • ‫TLS_SECRET_NAME: שם הסוד שמכיל את אישורי ה-TLS לחיבור CipherTrust Manager, לדוגמה ciphertrust-tls-secret.

פריסת ה-DBCluster

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

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: DBCluster
    metadata:
      name: "DBCLUSTER_NAME"
    spec:
      databaseVersion: "18.4.0"
      primarySpec:
        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 מידע על TDE KEK.
  • ‫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 מספר הבלוקים המוצפנים במטמון ה-chill. לא רלוונטי מונה
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. לא רלוונטי מיקרו-שניות דלפק