במסמך הזה מפורטת סקירה כללית על Cloud HSM ומוסבר איך ליצור מפתחות הצפנה שמוגנים על ידי HSM ב-Cloud Key Management Service ולהשתמש בהם.
מה זה Cloud HSM?
Cloud HSM הוא שירות של מודול אבטחה לחומרה (HSM) שמארח מפתחות הצפנה ומבצע פעולות קריפטוגרפיות באשכול של מודולים של HSM עם אישור FIPS 140-2 ברמה 3. Google מנהלת את אשכול ה-HSM בשבילכם, כך שלא צריך לדאוג לגבי אשכולות, שינוי גודל או תיקון. מכיוון ש-Cloud HSM משתמש ב-Cloud KMS כממשק קצה שלו, אתם יכולים ליהנות מכל היתרונות והתכונות ש-Cloud KMS מספק.
יצירת אוסף מפתחות
כשיוצרים מפתח, מוסיפים אותו לאוסף מפתחות במיקום Google Cloud מסוים. אתם יכולים ליצור מחזיק מפתחות חדש או להשתמש במחזיק מפתחות קיים. בנושא הזה, נסביר איך ליצור אוסף מפתחות חדש ולהוסיף לו מפתח חדש.
יוצרים אוסף מפתחות ב Google Cloud מיקום שתומך ב-Cloud HSM.
המסוף
נכנסים לדף Key Management במסוף Google Cloud .
לוחצים על Create key ring (יצירת מחזיק מפתחות).
בשדה Key ring name, מזינים שם לאוסף המפתחות.
בקטע מיקום מחזיק המפתחות, בוחרים מיקום כמו
"us-east1".לוחצים על יצירה.
gcloud
-
במסוף Google Cloud , מפעילים את Cloud Shell.
-
בסביבה שלכם, מריצים את הפקודה
gcloud kms keyrings create:gcloud kms keyrings create KEY_RING \ --location LOCATIONמחליפים את מה שכתוב בשדות הבאים:
-
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל
--help. -
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את ה-SDK של Cloud KMS C# .
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Java ולהתקין את Cloud KMS Java SDK.
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Cloud KMS Node.js SDK.
PHP
כדי להריץ את הקוד הזה, קודם צריך לקרוא על שימוש ב-PHP ב- Google Cloud ולהתקין את Cloud KMS PHP SDK.
Python
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Python ולהתקין את Cloud KMS Python SDK.
Ruby
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את Cloud KMS Ruby SDK.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \
--request "POST" \
--header "authorization: Bearer TOKEN"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות.
מידע נוסף מופיע במאמרי העזרה של KeyRing.create API.
יצירת מפתח
כדי ליצור מפתח Cloud HSM באוסף המפתחות ובמיקום שצוינו, פועלים לפי השלבים הבאים.
המסוף
נכנסים לדף Key Management במסוף Google Cloud .
לוחצים על השם של אוסף המפתחות שעבורו רוצים ליצור מפתח.
לוחצים על Create key.
בקטע What type of key do you want to create? (איזה סוג מפתח רוצים ליצור?), בוחרים באפשרות Generated key (מפתח שנוצר).
בשדה שם המפתח, מזינים את השם של המפתח.
לוחצים על התפריט הנפתח רמת ההגנה ובוחרים באפשרות HSM או Single-tenant HSM.
אם בחרתם באפשרות Single-tenant HSM, בוחרים את המופע של Single-tenant HSM שבו רוצים ליצור את המפתח.
לוחצים על התפריט הנפתח Purpose (מטרה) ובוחרים באפשרות Symmetric encrypt/decrypt (הצפנה/פענוח סימטריים).
מאשרים את ערכי ברירת המחדל של תקופת הרוטציה והתחלה בתאריך.
לוחצים על יצירה.
gcloud
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
כדי ליצור מפתח Cloud HSM מרובה דיירים, מריצים את הפקודה kms keys create עם רמת ההגנה hsm.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm"
מחליפים את מה שכתוב בשדות הבאים:
-
KEY_NAME: השם שרוצים להשתמש בו עבור המפתח. -
KEY_RING: השם של אוסף המפתחות שבו רוצים ליצור את המפתח. -
LOCATION: המיקום של אוסף המפתחות.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.
כדי ליצור מפתח Cloud HSM בדייר יחיד, מריצים את הפקודה kms keys create עם רמת ההגנה hsm-single-tenant ומציינים את מופע Cloud HSM בדייר יחיד שבו רוצים ליצור את המפתח. מופע Cloud HSM עם דייר יחיד צריך להיות באותו מיקום שבו נמצא אוסף המפתחות.
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm-single-tenant" \
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
מחליפים את מה שכתוב בשדות הבאים:
-
KEY_NAME: השם שרוצים להשתמש בו עבור המפתח. -
KEY_RING: השם של אוסף המפתחות שבו רוצים ליצור את המפתח. -
LOCATION: המיקום של אוסף המפתחות. -
PROTECTION_LEVEL: רמת ההגנה של המפתח שרוצים ליצור. -
INSTANCE_PROJECT: המזהה של הפרויקט שבו נמצא מופע Cloud HSM עם דייר יחיד. -
INSTANCE_NAME: השם של מופע Single-tenant Cloud HSM שבו רוצים ליצור את המפתח. מידע נוסף על מכונות Cloud HSM עם דייר יחיד זמין במאמר יצירה וניהול של מכונת Cloud HSM עם דייר יחיד.
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את ה-SDK של Cloud KMS C# .
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Java ולהתקין את Cloud KMS Java SDK.
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Cloud KMS Node.js SDK.
PHP
כדי להריץ את הקוד הזה, קודם צריך לקרוא על שימוש ב-PHP ב- Google Cloud ולהתקין את Cloud KMS PHP SDK.
Python
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Python ולהתקין את Cloud KMS Python SDK.
Ruby
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את Cloud KMS Ruby SDK.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
כדי ליצור מפתח Cloud HSM רב-דיירים, משתמשים בשיטה CryptoKey.create עם רמת ההגנה HSM:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM", "algorithm": "ALGORITHM" }}'
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
KEY_NAME: השם של המפתח. -
ALGORITHM: האלגוריתם שבו רוצים להשתמש, לדוגמהGOOGLE_SYMMETRIC_ENCRYPTION. כדי לראות את כל האלגוריתמים הנתמכים, אפשר לעיין במאמר בנושא מטרות ואלגוריתמים של מפתחות.
כדי ליצור מפתח Cloud HSM בדייר יחיד, משתמשים בשיטה CryptoKey.create עם רמת ההגנה HSM_SINGLE_TENANT:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": {
"protectionLevel": "HSM_SINGLE_TENANT", "algorithm": "ALGORITHM",
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את מחזיק המפתחות. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
KEY_NAME: השם של המפתח. -
ALGORITHM: האלגוריתם שבו רוצים להשתמש, לדוגמהGOOGLE_SYMMETRIC_ENCRYPTION. כדי לראות את כל האלגוריתמים הנתמכים, אפשר לעיין במאמר בנושא מטרות ואלגוריתמים של מפתחות. -
INSTANCE_PROJECT: המזהה של הפרויקט שבו נמצא מופע Cloud HSM עם דייר יחיד. -
INSTANCE_NAME: השם של מופע Single-tenant Cloud HSM שבו רוצים ליצור את המפתח. מידע נוסף על מכונות Cloud HSM עם דייר יחיד זמין במאמר יצירה וניהול של מכונת Cloud HSM עם דייר יחיד.
הצפנת נתונים
אחרי שיש לכם מפתח, אתם יכולים להשתמש בו כדי להצפין תוכן טקסטואלי או בינארי.
gcloud
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
gcloud kms encrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--plaintext-file FILE_TO_ENCRYPT \
--ciphertext-file ENCRYPTED_OUTPUT
מחליפים את מה שכתוב בשדות הבאים:
-
KEY_NAME: השם של המפתח שרוצים להשתמש בו להצפנה. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
FILE_TO_ENCRYPT: הנתיב לקובץ שרוצים להצפין. -
ENCRYPTED_OUTPUT: הנתיב שבו רוצים לשמור את הפלט המוצפן.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את ה-SDK של Cloud KMS C# .
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Java ולהתקין את Cloud KMS Java SDK.
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Cloud KMS Node.js SDK.
PHP
כדי להריץ את הקוד הזה, קודם צריך לקרוא על שימוש ב-PHP ב- Google Cloud ולהתקין את Cloud KMS PHP SDK.
Python
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Python ולהתקין את Cloud KMS Python SDK.
Ruby
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את Cloud KMS Ruby SDK.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
כשמשתמשים ב-JSON וב-API בארכיטקטורת REST, צריך לקודד את התוכן ב-Base64 לפני שאפשר להצפין אותו באמצעות Cloud KMS.
כדי להצפין נתונים, שולחים POSTבקשה, מציינים את הפרויקט המתאים ואת פרטי המפתח, ומזינים את הטקסט בקידוד Base64 שרוצים להצפין בשדה plaintext של גוף הבקשה.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: המזהה של הפרויקט שמכיל את מחזיק המפתחות ואת המפתח שרוצים להשתמש בהם להצפנה. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
KEY_RING: אוסף המפתחות שמכיל את המפתח שרוצים להשתמש בו להצפנה. -
KEY_NAME: השם של המפתח שרוצים להשתמש בו להצפנה. -
PLAINTEXT_TO_ENCRYPT: נתוני הטקסט הפשוט שרוצים להצפין. צריך לקודד את הטקסט הפשוט ב-Base64 לפני שמפעילים את שיטתencrypt.
זוהי דוגמה למטען ייעודי (payload) עם נתונים בקידוד base64:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
פענוח טקסט מוצפן
כדי לפענח תוכן מוצפן, צריך להשתמש באותו מפתח ששימש להצפנת התוכן.
gcloud
כדי להשתמש ב-Cloud KMS בשורת הפקודה, קודם צריך להתקין את הגרסה האחרונה של Google Cloud CLI או לשדרג אליה.
gcloud kms decrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file FILE_TO_DECRYPT \
--plaintext-file DECRYPTED_OUTPUT
מחליפים את מה שכתוב בשדות הבאים:
-
KEY_NAME: השם של המפתח שרוצים להשתמש בו לפענוח. -
KEY_RING: השם של אוסף המפתחות שמכיל את המפתח. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
FILE_TO_DECRYPT: הנתיב לקובץ שרוצים לפענח. -
DECRYPTED_OUTPUT: הנתיב שבו רוצים לשמור את הפלט המפוענח.
כדי לקבל מידע על כל הדגלים והערכים האפשריים, מריצים את הפקודה עם הדגל --help.
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את ה-SDK של Cloud KMS C# .
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-Java ולהתקין את Cloud KMS Java SDK.
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Cloud KMS Node.js SDK.
PHP
כדי להריץ את הקוד הזה, קודם צריך לקרוא על שימוש ב-PHP ב- Google Cloud ולהתקין את Cloud KMS PHP SDK.
Python
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Python ולהתקין את Cloud KMS Python SDK.
Ruby
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Ruby ולהתקין את Cloud KMS Ruby SDK.
API
בדוגמאות האלה נעשה שימוש ב-curl כלקוח HTTP כדי להדגים את השימוש ב-API. מידע נוסף על בקרת גישה זמין במאמר גישה ל-Cloud KMS API.
הטקסט המפוענח שמוחזר ב-JSON מ-Cloud KMS מקודד ב-Base64.
כדי לפענח נתונים מוצפנים, שולחים בקשת POST, מציינים את הפרויקט המתאים ואת פרטי המפתח, ומזינים את הטקסט המוצפן (שנקרא גם טקסט מוצפן) שרוצים לפענח בשדה ciphertext של גוף הבקשה.
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: המזהה של הפרויקט שמכיל את מחזיק המפתחות ואת המפתח שרוצים להשתמש בהם לפענוח. -
LOCATION: המיקום ב-Cloud KMS שבו נמצא אוסף המפתחות. -
KEY_RING: אוסף המפתחות שמכיל את המפתח שרוצים להשתמש בו לפענוח. -
KEY_NAME: השם של המפתח שרוצים להשתמש בו לפענוח. -
ENCRYPTED_DATA: הנתונים המוצפנים שרוצים לפענח.
זוהי דוגמה למטען ייעודי (payload) עם נתונים בקידוד base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
השלבים הבאים
בדוגמה להצפנה שמופיעה בנושא הזה נעשה שימוש במפתח סימטרי עם רמת ההגנה של HSM. כדי להצפין באמצעות מפתח אסימטרי עם רמת ההגנה של HSM, פועלים לפי השלבים במאמר הצפנה ופענוח של נתונים באמצעות מפתח אסימטרי עם השינויים הבאים:
- יוצרים את אוסף המפתחות באחד מהאזורים הנתמכים ב-Cloud HSM.
- יוצרים את המפתח עם רמת ההגנה HSM.
כדי להשתמש במפתח אסימטרי עם רמת ההגנה של HSM לחתימה של עקומות אליפטיות או לחתימת RSA, פועלים לפי השלבים במאמר יצירה ואימות של חתימות עם השינויים הבאים:
- יוצרים את אוסף המפתחות באחד מהאזורים הנתמכים ב-Cloud HSM.
- יוצרים את המפתח עם רמת ההגנה HSM.
מתחילים להשתמש ב-API.
אפשר לעיין בהפניית Cloud KMS API.
כדי להתחיל ליצור מפתחות, להחליף אותם ולהגדיר הרשאות, אפשר לקרוא את מדריכי ההוראות.
כדאי לקרוא את המאמר מושגים כדי להבין טוב יותר את ההיררכיה של האובייקטים, את מצבי המפתח ואת רוטציית המפתחות.
מידע נוסף על רישום ביומן ב-Cloud KMS חשוב לציין שהרישום ביומן מבוסס על פעולות, והוא חל על מפתחות עם רמות הגנה של HSM ושל תוכנה.
בסקירה המפורטת על ארכיטקטורת Cloud HSM אפשר לקרוא מידע נוסף על האופן שבו Cloud HSM מגן על הנתונים שלכם.
מגבלות ידועות
גודל ההודעה מוגבל ל-8KiB (לעומת 64KiB למפתחות תוכנה של Cloud KMS) עבור טקסט לא מוצפן ומידע מוצפן (ciphertext) שסופקו על ידי המשתמש, כולל נתונים מאומתים נוספים.
שירות Cloud HSM לא זמין בכל האזורים המרובים. לרשימת כל המיקומים שתומכים ב-Cloud HSM מרובה דיירים, ראו מיקומים של Cloud KMS, ובחרו באפשרות Supports multi-tenant HSM (תומך ב-HSM מרובה דיירים) במסנן HSM support (תמיכה ב-HSM).
Cloud HSM עם דייר יחיד זמין בחלק מהמיקומים שבהם זמין Cloud HSM עם מספר דיירים. רשימה של כל המיקומים שתומכים ב-Cloud HSM עם דייר יחיד מופיעה במאמר מיקומים ב-Cloud KMS. כדי לראות את הרשימה, בוחרים באפשרות Supports single-tenant HSM במסנן HSM support.
אם אתם משתמשים במפתחות Cloud HSM עם שילובים של מפתחות הצפנה בניהול הלקוח (CMEK) בשירותים אחרים Google Cloud , המיקומים שבהם אתם משתמשים בשירותים צריכים להיות זהים בדיוק למיקומים של מפתחות Cloud HSM. זה חל על מיקומים אזוריים, מיקומים בשני אזורים ומיקומים במספר אזורים.
מידע נוסף על שילובים של CMEK זמין בקטע הרלוונטי במאמר בנושא הצפנה במנוחה.
יכול להיות שפעולות על מפתחות אסימטריים שמאוחסנים ב-Cloud HSM יגרמו לזמן אחזור ארוך יותר באופן משמעותי בהשוואה לשימוש במפתחות תוכנה של Cloud KMS.
Bare Metal Rack HSM
Google Cloud מציע אפשרויות נוספות של HSM, כמו דיירות יחידה. Bare Metal Rack HSM זמין ללקוחות שרוצים לארח את ה-HSM שלהם במקום ש-Google מספקת. לקבלת מידע נוסף, אפשר לפנות לאיש הקשר שאחראי לחשבון.