במאמר הזה מוסבר איך להגן על מידע אישי רגיש שרוצים לציין עבור משימה באצווה באמצעות סודות של Secret Manager.
סודות ב-Secret Manager מגנים על מידע אישי רגיש באמצעות הצפנה. במשימה באצווה, אפשר לציין סוד אחד או יותר כדי להעביר בצורה מאובטחת את המידע האישי הרגיש שהם מכילים. אפשר להשתמש בנתונים האלה כדי לבצע את הפעולות הבאות:
הגדרת משתני סביבה מותאמים אישית שמכילים מידע אישי רגיש בצורה מאובטחת.
אפשר לציין באופן מאובטח את פרטי הכניסה ל-Docker Registry כדי לאפשר לקבצים להרצה של משימה לגשת לקובצי האימג' הפרטיים של הקונטיינרים.
לפני שמתחילים
- אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
- יוצרים סוד או מזהים סוד לנתונים הרגישים שרוצים לציין בצורה מאובטחת למשימה.
-
כדי לקבל את ההרשאות שדרושות ליצירת משימה, אתם צריכים לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- הכלי לעריכת משימות באצווה (
roles/batch.jobsEditor) בפרויקט - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בחשבון השירות של המשימה, שמוגדר כברירת מחדל כחשבון השירות של Compute Engine שמוגדר כברירת מחדל
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
- הכלי לעריכת משימות באצווה (
-
כדי לוודא שלחשבון השירות של המשימה יש את ההרשאות שנדרשות לגישה לסודות, צריך לבקש מהאדמין להקצות לחשבון השירות של המשימה את תפקיד ה-IAM Secret Manager Secret Accessor (
roles/secretmanager.secretAccessor) בסוד.
העברה מאובטחת של מידע אישי רגיש למשתני סביבה מותאמים אישית
כדי להעביר בצורה מאובטחת נתונים רגישים מסודות ב-Secret Manager למשתני סביבה מותאמים אישית, צריך להגדיר כל משתנה סביבה בשדה המשנה של משתני הסוד (secretVariables) בסביבה ולציין סוד לכל ערך.
בכל פעם שמציינים סוד בעבודת הפעלה, צריך להגדיר אותו כנתיב לגרסת סוד:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
אפשר ליצור משימה שמגדירה משתני סוד באמצעות ה-CLI של gcloud, Batch API, Java, Node.js או Python.
בדוגמה הבאה מוסבר איך ליצור ג'וב שמגדיר משתנה סודי ומשתמש בו בסביבה של כל הרכיבים הניתנים להרצה (שדה המשנה environment של taskSpec).
gcloud
יוצרים קובץ JSON שמציין את פרטי ההגדרה של המשימה וכולל את שדה המשנה
secretVariablesעבור סביבה אחת או יותר.לדוגמה, כדי ליצור משימת סקריפט בסיסית שמשתמשת במשתנה סודי בסביבה לכל הפריטים שניתנים להרצה, יוצרים קובץ JSON עם התוכן הבא:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo This is the secret: ${SECRET_VARIABLE_NAME}" } } ], "environment": { "secretVariables": { "{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION" } } } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }מחליפים את מה שכתוב בשדות הבאים:
SECRET_VARIABLE_NAME: השם של משתנה סודי. לפי המוסכמה, שמות משתני הסביבה הם באותיות רישיות.כדי לגשת בצורה מאובטחת למידע אישי רגיש מהסוד של Secret Manager של המשתנה, צריך לציין את שם המשתנה הזה בקבצים הניתנים להרצה של העבודה הזו. משתנה הסוד נגיש לכל הקבצים להרצה שנמצאים באותה סביבה שבה מגדירים את משתנה הסוד.
PROJECT_ID: מזהה הפרויקט של הפרויקט.
SECRET_NAME: השם של סוד קיים ב-Secret Manager.
VERSION: הגרסה של הסוד שצוין ומכילה את הנתונים שרוצים להעביר לעבודה. זה יכול להיות מספר הגרסה אוlatest.
כדי ליצור ולהריץ את העבודה, משתמשים בפקודה
gcloud batch jobs submit:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEמחליפים את מה שכתוב בשדות הבאים:
JOB_NAME: שם המשימה.
LOCATION: המיקום של המשרה.
JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של העבודה.
API
שולחים בקשת POST ל-method jobs.create שמציינת את שדה המשנה secretVariables עבור סביבה אחת או יותר.
לדוגמה, כדי ליצור משימת סקריפט בסיסית שמשתמשת במשתנה סודי בסביבה לכל הפריטים שניתנים להרצה, שולחים את הבקשה הבאה:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo This is the secret: ${SECRET_VARIABLE_NAME}"
}
}
],
"environment": {
"secretVariables": {
"{SECRET_VARIABLE_NAME}": "projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION"
}
}
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט של הפרויקט.
LOCATION: המיקום של המשרה.
JOB_NAME: שם המשימה.
SECRET_VARIABLE_NAME: השם של משתנה סודי. לפי המוסכמה, שמות משתני הסביבה הם באותיות רישיות.כדי לגשת בצורה מאובטחת למידע אישי רגיש מהסוד של Secret Manager של המשתנה, צריך לציין את שם המשתנה הזה בקבצים הניתנים להרצה של העבודה הזו. משתנה הסוד נגיש לכל הקבצים להרצה שנמצאים באותה סביבה שבה מגדירים את משתנה הסוד.
SECRET_NAME: השם של סוד קיים ב-Secret Manager.
VERSION: הגרסה של הסוד שצוין ומכילה את הנתונים שרוצים להעביר לעבודה. זה יכול להיות מספר הגרסה אוlatest.
Java
Node.js
Python
גישה מאובטחת לקובצי אימג' של קונטיינרים שנדרשים להם פרטי כניסה ל-Docker Registry
כדי להשתמש בקובץ אימג' של קונטיינר ממאגר Docker פרטי, צריך לציין ב-Runnable פרטי כניסה שיאפשרו לו לגשת למאגר Docker הזה.
בפרט, לכל קונטיינר שאפשר להפעיל עם הערך של השדה image URI (imageUri) שמוגדר לקובץ אימג' ממאגר Docker פרטי, צריך לציין את כל פרטי הכניסה שנדרשים לגישה למאגר Docker הזה באמצעות השדה username (username) והשדה password (password).
כדי להגן על פרטי כניסה רגישים במאגר Docker, אפשר לציין סודות קיימים שמכילים את המידע במקום להגדיר את השדות האלה ישירות.
בכל פעם שמציינים סוד בעבודת הפעלה, צריך להגדיר אותו כנתיב לגרסת סוד:
projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION.
אפשר ליצור משימה שמשתמשת בתמונות קונטיינר ממאגר Docker פרטי באמצעות ה-CLI של gcloud או Batch API. בדוגמה הבאה מוסבר איך ליצור משימה שמשתמשת בקובץ אימג' של קונטיינר ממאגר Docker פרטי, על ידי ציון שם המשתמש ישירות והסיסמה כסוד.
gcloud
יוצרים קובץ JSON שמציין את פרטי ההגדרה של העבודה. אם יש קונטיינרים שניתנים להפעלה ומשתמשים בתמונות ממאגר פרטי של Docker, צריך לכלול את פרטי הכניסה שנדרשים כדי לגשת אליו בשדות
usernameו-password.לדוגמה, כדי ליצור עבודת קונטיינר בסיסית שמציינת תמונה ממאגר Docker פרטי, יוצרים קובץ JSON עם התוכן הבא:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "PRIVATE_IMAGE_URI", "commands": [ "-c", "echo This runnable uses a private image." ], "username": "USERNAME", "password": "PASSWORD" } } ], } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }מחליפים את מה שכתוב בשדות הבאים:
PRIVATE_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ממאגר Docker פרטי. אם התמונה הזו דורשת הגדרות אחרות של מאגר התגים, צריך לכלול גם אותן.
USERNAME: שם המשתמש במאגר Docker הפרטי, שאפשר לציין אותו כסוד או ישירות.
PASSWORD: הסיסמה למאגר Docker הפרטי, שאפשר לציין אותה כסוד (מומלץ) או ישירות.לדוגמה, כדי לציין את הסיסמה כסוד, מגדירים את
PASSWORDבאופן הבא:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONמחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט של הפרויקט.
SECRET_NAME: השם של סוד קיים ב-Secret Manager.
VERSION: הגרסה של הסוד שצוין ומכילה את הנתונים שרוצים להעביר לעבודה. זה יכול להיות מספר הגרסה אוlatest.
כדי ליצור ולהריץ את העבודה, משתמשים בפקודה
gcloud batch jobs submit:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILEמחליפים את מה שכתוב בשדות הבאים:
JOB_NAME: שם המשימה.
LOCATION: המיקום של המשרה.
JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של העבודה.
API
שולחים בקשת POST אל ה-method jobs.create.
אם יש קונטיינרים שניתנים להפעלה ומשתמשים בתמונות ממאגר פרטי של Docker, צריך לכלול את פרטי הכניסה שנדרשים כדי לגשת אליו בשדות username ו-password.
לדוגמה, כדי ליצור משימת קונטיינר בסיסית שמציינת תמונה ממאגר Docker פרטי, שולחים את הבקשה הבאה:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "PRIVATE_IMAGE_URI",
"commands": [
"-c",
"echo This runnable uses a private image."
],
"username": "USERNAME",
"password": "PASSWORD"
}
}
],
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
מחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט של הפרויקט.
LOCATION: המיקום של המשרה.
JOB_NAME: שם המשימה.
PRIVATE_IMAGE_URI: ה-URI של קובץ אימג' של קונטיינר ממאגר Docker פרטי. אם התמונה הזו דורשת הגדרות אחרות של מאגר התגים, צריך לכלול גם אותן.
USERNAME: שם המשתמש במאגר Docker הפרטי, שאפשר לציין אותו כסוד או ישירות.
PASSWORD: הסיסמה למאגר Docker הפרטי, שאפשר לציין אותה כסוד (מומלץ) או ישירות.לדוגמה, כדי לציין את הסיסמה כסוד, מגדירים את
PASSWORDבאופן הבא:projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSIONמחליפים את מה שכתוב בשדות הבאים:
PROJECT_ID: מזהה הפרויקט של הפרויקט.
SECRET_NAME: השם של סוד קיים ב-Secret Manager.
VERSION: הגרסה של הסוד שצוין ומכילה את הנתונים שרוצים להעביר לעבודה. זה יכול להיות מספר הגרסה אוlatest.
המאמרים הבאים
אם נתקלתם בבעיות ביצירה או בהפעלה של משימה, תוכלו להיעזר בפתרון בעיות.