הוספת משתמשים לשרת SFTP

במאמר הזה מוסבר איך להוסיף משתמשים לשרת Cloud FTP. משתמשים כמו שותפים חיצוניים ובעלי עניין פנימיים יכולים להשתמש בשרת כדי להעביר קבצים אל Cloud Storage וממנו בצורה מאובטחת.

ככלל, השלבים להוספת משתמש לשרת SFTP הם:

  1. מגדירים את ההרשאות של המשתמש.
  2. יצירת משתמש SFTP ומיפוי הספריות שלו לקטגוריות של Cloud Storage.

הוראות ליצירת שרת מפורטות במאמרים יצירת שרת SFTP חיצוני ויצירת שרת SFTP פנימי.

לתשומת ליבכם

  • אפשר להעניק למשתמש גישה לעד 10 קטגוריות.

  • לכל משתמש יכולים להיות עד 10 מפתחות ציבוריים.

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

  1. יוצרים קטגוריה אחת או יותר של Cloud Storage לאחסון הנתונים שהמשתמש יעבוד איתם, אם הקטגוריות עדיין לא קיימות.

  2. מקבלים את המפתח הציבורי של המשתמש מכל זוג מפתחות SSH שבו הוא ישתמש כדי להתחבר לשרת.

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

    יצירת זוג מפתחות SSH

    כדי ליצור זוג מפתחות SSH, משתמשים בכלי ssh-keygen. במכונת הלקוח שמתחברת לשרת ה-SFTP, מריצים את הפקודה הבאה:

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/KEY_PAIR_NAME

    מחליפים את KEY_PAIR_NAME בשם של זוג המפתחות, למשל sftp_user_key.

    המפתח הציבורי נשמר בקובץ ~/.ssh/KEY_PAIR_NAME.pub.

התפקידים הנדרשים

כדי לקבל את ההרשאה שנדרשת להוספת משתמשי SFTP, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ FTP Admin (roles/ftp.admin) בפרויקט. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

התפקיד המוגדר מראש הזה כולל את ההרשאה ftp.users.create, שנדרשת כדי להוסיף משתמשי SFTP.

יכול להיות שתוכלו לקבל את ההרשאה הזו גם בתפקידים בהתאמה אישית או בתפקידים אחרים שמוגדרים מראש.

הגדרת הרשאות למשתמש

  1. התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

    gcloud init

    אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  2. מגדירים את הפרויקט:

    gcloud config set project PROJECT_ID

    מחליפים את PROJECT_ID במזהה הפרויקט שמכיל את שרת ה-SFTP.

  3. אם עדיין אין חשבון שירות, יוצרים חשבון שירות בשביל המשתמש. חשבון השירות ניגש למשאבי Cloud Storage בשם המשתמש.

    gcloud iam service-accounts create USERNAME-sa \
        --description="USERNAME SFTP Service Account" \
        --display-name="USERNAME SFTP Service Account"

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

    אם הפעולה מצליחה, מוצגת הודעה כמו Created service account [example-userid-sa]

  4. מקצים תפקידים ב-IAM לאדמין שיוצר את משתמש ה-SFTP:

    1. מקצים לעצמכם את התפקיד 'משתמש בחשבון שירות' (roles/iam.serviceAccountUser):

      gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID.iam.gserviceaccount.com \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/iam.serviceAccountUser"

      מחליפים את ADMINISTRATOR_EMAIL בכתובת האימייל של הגורם הראשי שיוצר את משתמש ה-SFTP. אם אתם יוצרים משתמש (ולא אפליקציה), הערך הזה הוא כתובת האימייל שבה אתם משתמשים כדי לגשת אל Google Cloud.

      אם הפעולה מצליחה, מוצגת הודעה כמו זו:

      Updated IAM policy for serviceAccount [example-userid-sa@example-project.iam.gserviceaccount.com].
      bindings:
      - members:
      - user:admin@example.com
      role: roles/iam.serviceAccountUser
      etag: BwZJk7OiSzw=
      version: 1
      
    2. מקצים לעצמכם את התפקיד Storage Bucket Viewer‏ (roles/storage.bucketViewer) בקטגוריה:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.bucketViewer"

      מחליפים את BUCKET_NAME בשם הקטגוריה.

      חוזרים על השלב הזה לכל מאגר שהמשתמש צריך לגשת אליו.

    3. מקצים לעצמכם את התפקיד 'צפייה באובייקט אחסון' (roles/storage.objectViewer) בקטגוריה:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.objectViewer"

      חוזרים על השלב הזה לכל מאגר שהמשתמש צריך לגשת אליו.

  5. מקצים לחשבון השירות של המשתמש את תפקיד ה-IAM שנדרש לגישה למאגר:

    gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member="serviceAccount:USERNAME-sa@PROJECT_ID.iam.gserviceaccount.com" \
        --role="ROLE"

    מחליפים את ROLE באחד מתפקידי ה-IAM הבאים:

    • כדי להגדיר הרשאת גישה לקריאה בלבד, משתמשים בתפקיד roles/storage.objectViewer.
    • כדי לתת הרשאת קריאה וכתיבה, משתמשים בתפקיד roles/storage.objectAdmin.

    חוזרים על השלב הזה לכל מאגר שהמשתמש צריך לגשת אליו.

  6. נותנים לסוכן השירות של Cloud FTP הרשאה ליצור אסימונים לחשבון השירות של המשתמש:

    1. מוצאים את כתובת האימייל של סוכן השירות של השרת. הוראות מפורטות מופיעות במאמר קבלת פרטים על שרת.

    2. נותנים הרשאה לסוכן השירות של Cloud FTP:

      gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID.iam.gserviceaccount.com \
          --member="serviceAccount:SERVICE_AGENT_EMAIL" \
          --role="roles/iam.serviceAccountTokenCreator"

      מחליפים את SERVICE_AGENT_EMAIL בכתובת האימייל של סוכן השירות.

לאחר מכן, יוצרים משתמש.

יצירת משתמש בשרת SFTP

אחרי שמגדירים הרשאות למשתמש, יוצרים את המשתמש וממפים את הספריות שלו לקטגוריה אחת או יותר של Cloud Storage.

gcloud

  1. כדי ליצור משתמש לשרת SFTP, מריצים את הפקודה gcloud alpha storage ftp users create.

    לפני השימוש בנתוני הפקודה הבאים, צריך להחליף את הנתונים הבאים:

    • CREDENTIAL_NAME: שם ייחודי לזיהוי פרטי הכניסה של המשתמש.
    • SSH_PUBLIC_KEY: גוף המפתח הציבורי של ה-SSH של המשתמש, בפורמט OpenSSH. לדוגמה, ssh-rsa AAAAB3NzaC1ycRexample....
    • USERNAME: שם המשתמש של משתמש ה-SFTP.
    • SERVICE_ACCOUNT: חשבון השירות של המשתמש. לדוגמה: username-sa@example-project.iam.gserviceaccount.com.
    • LOCATION_ID: המיקום של השרת, למשל us-west1.
    • SERVER_ID: מזהה השרת.
    • BUCKET_NAME: השם של מאגר (bucket) שלמשתמש ה-SFTP יש גישה אליו, למשל example-bucket. השמטה של gs://.
    • (אופציונלי) BUCKET_PREFIX: הנתיב של תיקייה בתוך קטגוריית ה-bucket שרוצים להגדיר כתיקיית השורש למיפוי הספרייה הזו. אם לא מציינים את המאפיין bucket_prefix, מערכת Cloud FTP משתמשת בשורש של הקטגוריה.
    • DIRECTORY: הנתיב של ספריית הנחיתה הלוגית שמוצג למשתמש SFTP. לדוגמה, /home/uploads.

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

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

    • SFTP_PERMISSION: רמת הגישה לספרייה. כדי להגדיר הרשאת קריאה בלבד, צריך להגדיר את הערך READ_ONLY. כדי להגדיר הרשאת קריאה וכתיבה, צריך להגדיר את הערך הזה ל-READ_WRITE.

    שימו לב לנקודות הבאות:

    • כדי להעניק למשתמש גישה לכמה דליים, צריך לציין את הדגל --storage-directory-mapping כמה פעמים, עם מיפוי ספריות לכל דלי.
    • כדי להגדיר כמה מפתחות ציבוריים למשתמש, צריך לספק כמה פרטי כניסה בקובץ credentials.json.

    שומרים את התוכן הבא בקובץ בשם credentials.json:

    [
      {
        "credentialName": "CREDENTIAL_NAME",
        "credentialType": "PUBLIC_KEY",
        "sshPublicKeyBody": "SSH_PUBLIC_KEY"
      }
    ]

    מריצים את הפקודה הבאה:

    ‫Linux,‏ macOS או Cloud Shell

    gcloud alpha storage ftp users create USERNAME \
        --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID \
        --server=SERVER_ID \
        --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION \
        --user-credentials-from-file=credentials.json

    ‏Windows (PowerShell)

    gcloud alpha storage ftp users create USERNAME `
        --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID `
        --server=SERVER_ID `
        --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION `
        --user-credentials-from-file=credentials.json

    Windows‏ (cmd.exe)

    gcloud alpha storage ftp users create USERNAME ^
        --customer-service-account=SERVICE_ACCOUNT --location=LOCATION_ID ^
        --server=SERVER_ID ^
        --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION ^
        --user-credentials-from-file=credentials.json

  2. מספקים למשתמש את הפרטים הבאים, שנדרשים כדי להתחבר לשרת:

    • שם המשתמש של המשתמש ב-SFTP.

    • הגדרת הגישה של השרת, שמשתנה בהתאם לסוג השרת:

      • בשרת חיצוני, כתובת ה-IP של השרת.

      • בשרת פנימי, ה-URI של קובץ השירות המצורף של השרת.

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

    • (אופציונלי) טביעת האצבע של המפתח של השרת.

REST

  1. כדי ליצור משתמש לשרת SFTP, משתמשים ב-method ‏servers.users.create.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • PROJECT_ID: מזהה הפרויקט של השרת ב- Google Cloud .
    • LOCATION_ID: המיקום של השרת, למשל us-west1.
    • SERVER_ID: מזהה השרת.
    • USERNAME: שם המשתמש של משתמש ה-SFTP.
    • BUCKET_NAME: השם של מאגר (bucket) שלמשתמש ה-SFTP יש גישה אליו, למשל example-bucket. השמטה של gs://.
    • (אופציונלי) BUCKET_PREFIX: הנתיב של תיקייה בתוך קטגוריית ה-bucket שרוצים להגדיר כתיקיית השורש למיפוי הספרייה הזו. אם לא מציינים את הערך הזה, Cloud FTP משתמש בשורש של הדלי.
    • DIRECTORY: הנתיב של ספריית הנחיתה הלוגית שמוצג למשתמש ה-SFTP. לדוגמה, /home/uploads. אם לא מציינים את הערך הזה, Cloud FTP מגדיר את ספריית הנחיתה ל-/.

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

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

    • SFTP_PERMISSION: רמת הגישה לספרייה. כדי להגדיר הרשאת קריאה בלבד, צריך להגדיר את הערך READ_ONLY. כדי להגדיר הרשאת קריאה וכתיבה, צריך להגדיר את הערך READ_WRITE.
    • SERVICE_ACCOUNT: חשבון השירות של המשתמש. לדוגמה: username-sa@example-project.iam.gserviceaccount.com.
    • CREDENTIAL_NAME: שם ייחודי לזיהוי פרטי הכניסה של המשתמש.
    • SSH_PUBLIC_KEY: גוף המפתח הציבורי של ה-SSH של המשתמש, בפורמט OpenSSH. לדוגמה, ssh-rsa AAAAB3NzaC1ycRexample....

    שימו לב לנקודות הבאות:

    • כדי לתת למשתמש גישה לכמה קטגוריות, צריך לספק כמה מיפויי קטגוריות ברשימה storageDirectoryMappings.
    • כדי להגדיר כמה מפתחות ציבוריים למשתמש, צריך לספק כמה פרטי כניסה ברשימה userCredentials.

    ה-method של ה-HTTP וכתובת ה-URL:

    POST https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users?userId=USERNAME

    תוכן בקשת JSON:

    {
      "storageDirectoryMappings": [
        {
          "bucket": "BUCKET_NAME",
          "bucketPrefix": "BUCKET_PREFIX",
          "directory": "DIRECTORY",
          "permission": "SFTP_PERMISSION"
        }
      ],
      "customerServiceAccount": "SERVICE_ACCOUNT",
      "userCredentials": [
        {
          "credentialName": "CREDENTIAL_NAME",
          "credentialType": "PUBLIC_KEY",
          "sshPublicKeyBody": "SSH_PUBLIC_KEY"
        }
      ]
    }
    

    כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

    התגובה מזהה פעולה ממושכת. יצירת המשתמש נמשכת כמה שניות.

  2. מספקים למשתמש את הפרטים הבאים, שנדרשים כדי להתחבר לשרת:

    • שם המשתמש של המשתמש ב-SFTP.

    • הגדרת הגישה של השרת, שמשתנה בהתאם לסוג השרת:

      • בשרת חיצוני, כתובת ה-IP של השרת.

      • בשרת פנימי, ה-URI של קובץ השירות המצורף של השרת.

      הוראות לאחזור הגדרות הגישה של השרת מופיעות במאמר אחזור פרטים על שרת.

    • (אופציונלי) טביעת האצבע של המפתח של השרת.

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