חסימת גישה חיצונית למשרה

במאמר הזה מוסבר איך מגדירים משימה באצווה כדי לחסום גישה חיצונית לכל המכונות הווירטואליות או לקונטיינרים ספציפיים שלה.

חסימת גישה חיצונית לעבודה כדי לעמוד בדרישות הרשת או לשפר את האבטחה. אם אחד מהתנאים הבאים מתקיים, צריך לחסום את הגישה החיצונית למכונות הווירטואליות של משימה באמצעות מכונות וירטואליות ללא כתובות IP חיצוניות:

  • הפרויקט שלך מוגבל על ידי האילוץ של מדיניות הארגון compute.vmExternalIpAccess.
  • הרשת שאתם מציינים לעבודה משתמשת בגישה פרטית ל-Google כדי להגדיר קישוריות פרטית ל-Google APIs ולשירותים של Google. לגישה פרטית ל-Google אין השפעה על מכונות וירטואליות עם כתובות IP חיצוניות.

    אם הרשת שציינתם לעבודה משתמשת בגישה פרטית ל-Google עם VPC Service Controls ל-Batch, כדאי לעיין במאמר בנושא שימוש ב-VPC Service Controls וב-Batch.

לחלופין, אם אתם לא רוצים לחסום את כל הגישה החיצונית הישירה למשימה, אתם יכולים לחסום גישה חיצונית לכל מאגר שהמשימה מופעלת בו.

מידע נוסף על מושגים של רשתות ומתי צריך להגדיר רשתות זמין במאמר סקירה כללית על רשתות Batch.

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

  1. אם עוד לא השתמשתם ב-Batch, כדאי לעיין במאמר תחילת העבודה עם Batch ולהפעיל את Batch על ידי השלמת הדרישות המוקדמות לפרויקטים ולמשתמשים.
  2. כדי לקבל את ההרשאות שדרושות ליצירת משימה שחוסמת גישה חיצונית, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

    להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

    יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

  3. אם חוסמים גישה חיצונית למכונות הווירטואליות של משימה, צריך לזהות את הרשת שרוצים להשתמש בה למשימה. הרשת שמציינים לעבודות שחוסמות גישה חיצונית למכונות הווירטואליות שלהן צריכה לעמוד בדרישות הבאות:
    • הרשת היא רשת של ענן וירטואלי פרטי (VPC) שנמצאת באותו פרויקט כמו העבודה, או רשת VPC משותפת שמארחת את הפרויקט של העבודה או משותפת איתו.
    • הרשת כוללת רשת משנה (subnet) במיקום שבו רוצים להריץ את העבודה.
    • הרשת מאפשרת כל גישה שנדרשת לעבודה שלכם. אם חוסמים גישה חיצונית למכונות וירטואליות של משימה, הרשת צריכה להשתמש ב-Cloud NAT או ב-גישה פרטית ל-Google כדי לאפשר גישה לדומיינים של ממשקי ה-API והשירותים שבהם נעשה שימוש במשימה. לדוגמה, כל העבודות משתמשות בממשקי Batch ו-Compute Engine API, ולעתים קרובות גם ב-Cloud Logging API.
    מידע נוסף זמין במאמר בנושא יצירה וניהול של רשתות VPC.

יצירת עבודה שחוסמת גישה חיצונית לכל המכונות הווירטואליות

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

אם רוצים להשתמש בתבנית של הגדרות מכונה כשיוצרים את העבודה הזו, צריך לציין את הרשת ולהשבית את כתובות ה-IP החיצוניות בתבנית של הגדרות המכונה. אחרת, אפשר להשתמש בשלבים הבאים כדי לחסום גישה חיצונית למכונות וירטואליות של עבודה באמצעות ה-CLI של gcloud או Batch API.

gcloud

כדי ליצור משימה שחוסמת גישה חיצונית באמצעות ה-CLI של gcloud, בוחרים באחת מהאפשרויות הבאות:

שימוש בדגלים של gcloud כדי לחסום גישה חיצונית לכל מכונות ה-VM

כדי ליצור עבודה ולהשתמש בדגלים של gcloud כדי לחסום גישה חיצונית לעבודה, מבצעים את השלבים הבאים:

  1. יוצרים קובץ JSON שמציין את פרטי ההגדרה של העבודה.

    לדוגמה, כדי ליצור עבודת סקריפט בסיסית, יוצרים קובץ JSON עם התוכן הבא.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. יוצרים את העבודה באמצעות הפקודה gcloud batch jobs submit. כדי לחסום גישה חיצונית לכל המכונות הווירטואליות, צריך לכלול את הדגלים --no-external-ip-address, --network ו---subnetwork.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE \
        --no-external-ip-address \
        --network projects/HOST_PROJECT_ID/global/networks/NETWORK \
        --subnetwork projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

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

    • JOB_NAME: השם של המשימה.
    • LOCATION: המיקום של המשרה הזו.
    • JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של העבודה.
    • HOST_PROJECT_ID: מזהה הפרויקט של הפרויקט שבו נמצאת הרשת שציינתם:
      • אם אתם משתמשים ברשת VPC משותפת, צריך לציין את הפרויקט המארח.
      • אחרת, מציינים את הפרויקט הנוכחי.
    • NETWORK: השם של רשת VPC בפרויקט הנוכחי או של רשת VPC משותפת שמארחת את הפרויקט הנוכחי או שמשותפת איתו.
    • REGION: האזור שבו נמצאת רשת המשנה של המשימה ומשאבי Compute Engine של המשימה. מידע נוסף זמין במאמר מיקומים.
    • SUBNET: השם של תת-רשת שהיא חלק מרשת ה-VPC ונמצאת באותו אזור כמו משאבי Compute Engine של העבודה.

שימוש בשדות JSON לחסימת גישה חיצונית לכל מכונות ה-VM

כדי ליצור עבודה ולהשתמש בשדות בקובץ ההגדרות בפורמט JSON כדי לחסום גישה חיצונית לכל המכונות הווירטואליות, מבצעים את השלבים הבאים:

  1. יוצרים קובץ JSON שמציין את פרטי ההגדרה של העבודה. כדי לחסום גישה חיצונית לכל המכונות הווירטואליות:

    לדוגמה, כדי ליצור משימת סקריפט בסיסית שחוסמת גישה חיצונית לכל המכונות הווירטואליות, יוצרים קובץ JSON עם התוכן הבא.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "network": {
          "networkInterfaces": [
            {
              "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
              "noExternalIpAddress": true
            }
          ]
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

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

    • HOST_PROJECT_ID: מזהה הפרויקט של הפרויקט שבו נמצאת הרשת שציינתם:
      • אם אתם משתמשים ברשת VPC משותפת, צריך לציין את הפרויקט המארח.
      • אחרת, מציינים את הפרויקט הנוכחי.
    • NETWORK: השם של רשת שמספקת את הגישה הנדרשת למשימה הזו. הרשת צריכה להיות רשת VPC בפרויקט הנוכחי או רשת VPC משותפת שמארחת את הפרויקט הנוכחי או משותפת איתו.
    • REGION: האזור שבו נמצאת רשת המשנה של המשימה ומשאבי Compute Engine של המשימה. מידע נוסף זמין במאמר מיקומים.
    • SUBNET: השם של תת-רשת שהיא חלק מרשת ה-VPC ונמצאת באותו אזור כמו משאבי Compute Engine של העבודה.
  2. יוצרים את העבודה באמצעות הפקודה gcloud batch jobs submit.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

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

    • JOB_NAME: השם שרוצים לתת למשימה.
    • LOCATION: המיקום שרוצים להגדיר למשימה הזו.
    • JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של העבודה.

API

כדי ליצור עבודה באמצעות Batch API, צריך להשתמש ב-jobs.create method ולציין את פרטי ההגדרה של העבודה. כדי לחסום גישה חיצונית לכל המכונות הווירטואליות:

לדוגמה, כדי ליצור משימת סקריפט בסיסית שחוסמת גישה חיצונית לכל המכונות הווירטואליות, שולחים את בקשת POST הבאה:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "network": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK",
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
          "noExternalIpAddress": true
        }
      ]
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

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

  • PROJECT_ID: מזהה הפרויקט שלכם.
  • LOCATION: המיקום שרוצים להגדיר למשימה הזו.
  • JOB_NAME: השם שרוצים לתת למשימה.
  • HOST_PROJECT_ID: מזהה הפרויקט של הפרויקט שבו נמצאת הרשת שציינתם:
    • אם אתם משתמשים ברשת VPC משותפת, צריך לציין את הפרויקט המארח.
    • אחרת, מציינים את הפרויקט הנוכחי (PROJECT_ID).
  • NETWORK: השם של רשת שמספקת את הגישה הנדרשת למשימה הזו. הרשת צריכה להיות רשת VPC בפרויקט הנוכחי או רשת VPC משותפת שמארחת את הפרויקט הנוכחי או משותפת איתו.
  • REGION: האזור שבו נמצאת רשת המשנה של המשימה ומשאבי Compute Engine של המשימה. מידע נוסף זמין במאמר מיקומים.
  • SUBNET: השם של תת-רשת שהיא חלק מרשת ה-VPC ונמצאת באותו אזור כמו משאבי Compute Engine של העבודה.

יצירת משימה שחוסמת גישה חיצונית לקונטיינר אחד או יותר

חסימת גישה חיצונית לכל אחד מהקונטיינרים של משימה כשיוצרים את המשימה.

אתם יכולים לחסום גישה חיצונית לכל אחד מהקונטיינרים של המשימה באמצעות ה-CLI של gcloud או Batch API.

gcloud

כדי ליצור ג'וב שחוסם גישה חיצונית למאגר אחד או יותר באמצעות ה-CLI של gcloud, צריך לבצע את השלבים הבאים:

  1. יוצרים קובץ JSON שמציין את פרטי ההגדרה של העבודה. לכל מאגר בנתוני המשימה שרוצים להגביל, מגדירים את השדה blockExternalNetwork לערך true.

    לדוגמה, כדי ליצור עבודת קונטיינר בסיסית שחוסמת גישה חיצונית לקונטיינר, יוצרים קובץ JSON עם התוכן הבא.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "container": {
                  "imageUri": "gcr.io/google-containers/busybox",
                  "entrypoint": "/bin/sh",
                  "commands": [
                    "-c",
                    "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
                  ],
                  "blockExternalNetwork": true
                }
              }
            ]
          },
          "taskCount": 4,
          "parallelism": 2
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. יוצרים את העבודה באמצעות הפקודה gcloud batch jobs submit.

    gcloud batch jobs submit JOB_NAME \
        --location LOCATION \
        --config JSON_CONFIGURATION_FILE
    

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

    • JOB_NAME: השם שרוצים לתת למשימה.
    • LOCATION: המיקום שרוצים להגדיר למשימה הזו.
    • JSON_CONFIGURATION_FILE: הנתיב לקובץ JSON עם פרטי ההגדרות של העבודה.

API

כדי ליצור עבודה באמצעות Batch API, צריך להשתמש ב-jobs.create method ולציין את פרטי ההגדרה של העבודה. לכל מאגר בנתוני המשימה שרוצים להגביל, מגדירים את השדה blockExternalNetwork לערך true.

לדוגמה, כדי ליצור עבודת קונטיינר בסיסית שחוסמת גישה חיצונית לקונטיינר, שולחים את בקשת POST הבאה:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "container": {
              "imageUri": "gcr.io/google-containers/busybox",
              "entrypoint": "/bin/sh",
              "commands": [
                "-c",
                "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
              ],
              "blockExternalNetwork": true
            }
          }
        ]
      },
      "taskCount": 4,
      "parallelism": 2
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

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

  • PROJECT_ID: מזהה הפרויקט שלכם.
  • LOCATION: המיקום שרוצים להגדיר למשימה הזו.
  • JOB_NAME: השם שרוצים לתת למשימה.

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