אבטחה ואחסון של מידע אישי רגיש באמצעות המחבר Secret Manager

‫Secret Manager היא מערכת אחסון מאובטחת ונוחה למפתחות API, סיסמאות, אישורים ונתונים רגישים אחרים. ‫Secret Manager מספק מקום מרכזי ומקור מהימן יחיד לניהול, לגישה ולביקורת של סודות ב- Google Cloud.

אתם יכולים להשתמש במחבר של Workflows ל-Secret Manager API כדי לגשת ל-Secret Manager מתוך תהליך עבודה. המחבר מטפל בפורמט של הבקשות ומספק שיטות וארגומנטים, כך שלא צריך לדעת את הפרטים של Secret Manager API. בנוסף, למחבר יש התנהגות מובנית לטיפול בניסיונות חוזרים ובפעולות ארוכות טווח. מידע נוסף על השימוש במחברים של Workflows זמין במאמר הסבר על מחברים.

מעניקים לחשבון השירות של Workflows גישה ל-Secret Manager

‫Secret Manager משתמש בניהול זהויות והרשאות גישה (IAM) כדי לשלוט בגישה. כדי ליצור סוד, לנהל אותו, להציג אותו או לגשת אליו, צריך לקבל את הרשאות ה-IAM המתאימות ברמת הפרויקט וברמת המשאב הספציפי. למידע נוסף ראו את המאמר בקרת גישה באמצעות IAM.

ב-Workflows נעשה שימוש בחשבונות שירות כדי להעניק לזרימות עבודה גישה למשאבים שלGoogle Cloud . כדי לגשת לגרסה של סוד, צריך להקצות לחשבון השירות את התפקיד 'מקבל גישה לסודות' (roles/secretmanager.secretAccessor) ב-Secret Manager בסוד, בפרויקט, בתיקייה או בארגון. מידע נוסף על פריסת תהליך עבודה עם חשבון שירות שהמשתמשים מנהלים

הפעלת ממשקי ה-API

לפני שמשתמשים במחבר של Workflows ל-Secret Manager API, צריך לוודא שהפעלתם את Secret Manager API ואת Workflows API.

המסוף

הפעלת ממשקי ה-API

gcloud

  gcloud services enable secretmanager.googleapis.com workflows.googleapis.com

הפעלת שיחה עם מחבר

בדומה להפעלת נקודת קצה של HTTP, קריאה למחבר דורשת את השדות call ו-args. מידע נוסף זמין במאמר בנושא הפעלת שיחה עם מחבר.

בנוסף לשימוש בשלב של שיחה, אפשר להפעיל את שיטות העזר בביטוי כמו זה:

${googleapis.secretmanager.v1.projects.secrets.versions.accessString(secret_id, version, project_id)}

לדוגמה, אפשר להשתמש בשיטת העזר accessString כדי לאחזר את הנתונים הסודיים כמחרוזת. השימוש בשיטה הזו פשוט יותר מאשר שימוש ב-access API, כי נתוני הסוד מפוענחים אוטומטית לפורמט מחרוזת.

אפשר גם להשתמש בשיטת העזר addVersionString כדי להוסיף ערך סודי חדש לסוד קיים. השימוש ב-API של addVersion פשוט יותר, כי נתוני הסוד מקודדים אוטומטית למחרוזת base-64, שנדרשת על ידי addVersion.

אחזור סוד באמצעות מחבר Secret Manager

בתרשים זרימת העבודה הבא אפשר לראות איך לאחזר סוד באמצעות מחבר Secret Manager.

YAML

# This workflow demonstrates how to use the Secret Manager connector:
# Retrieve a secret using three different methods
# Expected output: the secret data (thrice)
- init:
    assign:
      - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
      - secret_id: "test-secret"  # Make sure you have this secret and it has a version of 1.
      - version: "1"
# Add data to an existing secret without base-64 encoding
- add_version_string:
    call: googleapis.secretmanager.v1.projects.secrets.addVersionString
    args:
      secret_id: ${secret_id}
      project_id: ${project_id}
      data: "a new secret"
# Retrieve the secret in string format without base-64 decoding and assume
# that the secret data is a valid UTF-8 string; if not, raise an error
- access_string_secret:
    call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
    args:
      secret_id: ${secret_id}
      version: ${version}  # if not set, "latest" is used
      project_id: ${project_id}
    result: str_secret
# Retrieve the secret in string format without base-64 decoding
- access_secret:
    call: googleapis.secretmanager.v1.projects.secrets.versions.access
    args:
      name: ${"projects/" + project_id + "/secrets/" + secret_id + "/versions/" + version}
    result: base64_encoded_secret
# Retrieve the secret using positional arguments in an expression
- expression:
    assign:
      - secret_str_from_exp: ${googleapis.secretmanager.v1.projects.secrets.versions.accessString(secret_id, version, project_id)}
- the_end:
    return:
      - ${str_secret}
      - ${text.decode(base64.decode(base64_encoded_secret.payload.data))}
      - ${secret_str_from_exp}

JSON

[
  {
    "init": {
      "assign": [
        {
          "project_id": "${sys.get_env(\"GOOGLE_CLOUD_PROJECT_ID\")}"
        },
        {
          "secret_id": "test-secret"
        },
        {
          "version": "1"
        }
      ]
    }
  },
  {
    "add_version_string": {
      "call": "googleapis.secretmanager.v1.projects.secrets.addVersionString",
      "args": {
        "secret_id": "${secret_id}",
        "project_id": "${project_id}",
        "data": "a new secret"
      }
    }
  },
  {
    "access_string_secret": {
      "call": "googleapis.secretmanager.v1.projects.secrets.versions.accessString",
      "args": {
        "secret_id": "${secret_id}",
        "version": "${version}",
        "project_id": "${project_id}"
      },
      "result": "str_secret"
    }
  },
  {
    "access_secret": {
      "call": "googleapis.secretmanager.v1.projects.secrets.versions.access",
      "args": {
        "name": "${\"projects/\" + project_id + \"/secrets/\" + secret_id + \"/versions/\" + version}"
      },
      "result": "base64_encoded_secret"
    }
  },
  {
    "expression": {
      "assign": [
        {
          "secret_str_from_exp": "${googleapis.secretmanager.v1.projects.secrets.versions.accessString(secret_id, version, project_id)}"
        }
      ]
    }
  },
  {
    "the_end": {
      "return": [
        "${str_secret}",
        "${text.decode(base64.decode(base64_encoded_secret.payload.data))}",
        "${secret_str_from_exp}"
      ]
    }
  }
]

המאמרים הבאים