במסמך הזה מפורטת סקירה כללית על 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.
בשדה שם אוסף המפתחות, מזינים שם לאוסף המפתחות.
בקטע מיקום אוסף מפתחות, בוחרים מיקום כמו
"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# ולהתקין את Cloud KMS C# SDK.
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Java ולהתקין את Java SDK של Cloud KMS.
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 (הצפנה/פענוח סימטריים).
מאשרים את ערכי ברירת המחדל של Rotation period ו-Starting on.
לוחצים על יצירה.
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: השם של מכונת Cloud HSM לדייר יחיד שבה רוצים ליצור את המפתח. מידע נוסף על מכונות Cloud HSM לדייר יחיד זמין במאמר יצירה וניהול של מכונת Cloud HSM לדייר יחיד.
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח ב-C# ולהתקין את Cloud KMS C# SDK.
Go
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Go ולהתקין את Cloud KMS Go SDK.
Java
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Java ולהתקין את Java SDK של Cloud KMS.
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 לדייר יחיד, משתמשים ב-method 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: נתוני הטקסט הפשוט שרוצים להצפין. לפני שמפעילים את ה-methodencrypt, צריך לקודד את הטקסט הרגיל בפורמט Base64.
דוגמה למטען ייעודי (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 ולהתקין את Java SDK של Cloud KMS.
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: הנתונים המוצפנים שרוצים לפענח.
דוגמה למטען ייעודי עם נתונים שמקודדים ב-base64:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
השלבים הבאים
בדוגמה להצפנה שמופיעה בנושא הזה נעשה שימוש במפתח סימטרי עם רמת ההגנה של HSM. כדי להצפין באמצעות מפתח אסימטרי עם רמת ההגנה של HSM, פועלים לפי השלבים במאמר הצפנה ופענוח של נתונים באמצעות מפתח אסימטרי עם השינויים הבאים:
- יוצרים את אוסף המפתחות באחד מהאזורים הנתמכים ב-Cloud HSM.
- יוצרים את המפתח עם רמת ההגנה HSM.
כדי להשתמש במפתח אסימטרי עם רמת ההגנה של HSM לחתימה על עקומה אליפטית או לחתימת RSA, פועלים לפי השלבים שמפורטים במאמר יצירה ואימות של חתימות, עם השינויים הבאים:
- יוצרים את אוסף המפתחות באחד מהאזורים הנתמכים ב-Cloud HSM.
- יוצרים את המפתח עם רמת ההגנה HSM.
מתחילים להשתמש ב-API.
במדריכים מוסבר איך ליצור מפתחות, להחליף אותם ולהגדיר להם הרשאות.
כדאי לקרוא את המאמר מושגים כדי להבין טוב יותר את היררכיית האובייקטים, את מצבי המפתח ואת רוטציית המפתחות.
מידע ולמידה על רישום ביומן ב-Cloud KMS. שימו לב שהרישום ביומן מבוסס על פעולות, והוא חל על מפתחות עם רמות הגנה של HSM ושל תוכנה.
במאמר בנושא ארכיטקטורת Cloud HSM מוסבר איך Cloud HSM מגן על הנתונים שלכם.
מגבלות ידועות
גודל ההודעה מוגבל ל-8KiB (בניגוד ל-64KiB למפתחות תוכנה של Cloud KMS) לטקסט פשוט ולמידע מוצפן (ciphertext) שסופקו על ידי המשתמש, כולל נתונים מאומתים נוספים.
שירות Cloud HSM לא זמין במספר אזורים. במאמר מיקומים של Cloud KMS מופיעה רשימה של כל המיקומים שתומכים ב-Multi-tenant Cloud HSM. כדי לראות אותם, צריך לבחור באפשרות Supports multi-tenant HSM במסנן HSM support.
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 מספקת. למידע נוסף, פנו לאיש הקשר האחראי לחשבון.