將使用者新增至 SFTP 伺服器

本文說明如何將使用者新增至 Cloud FTP 伺服器。外部合作夥伴和內部利害關係人等使用者,可以透過伺服器安全地將檔案傳輸至 Cloud Storage,以及從 Cloud Storage 傳輸檔案。

將使用者新增至安全檔案傳輸通訊協定伺服器的大致步驟如下:

  1. 設定使用者的權限。
  2. 建立 SFTP 使用者,並將目錄對應至 Cloud Storage bucket。

如要瞭解如何建立伺服器,請參閱「建立外部安全檔案傳輸通訊協定伺服器」和「建立內部安全檔案傳輸通訊協定伺服器」。

注意事項

  • 您最多可以授權使用者存取 10 個 bucket。

  • 使用者最多可有 10 個公開金鑰。

事前準備

  1. 建立一或多個 Cloud Storage bucket,用於儲存使用者要處理的資料 (如果 bucket 尚未存在)。

  2. 從使用者用來連線至伺服器的每個 SSH 金鑰組中,取得使用者的公開金鑰。

    如果使用者沒有安全殼層金鑰組,請按照下列步驟產生。

    產生安全殼層 (SSH) 金鑰組

    您需要哪種金鑰格式?

    您需要的金鑰格式取決於用來連線至安全檔案傳輸通訊協定伺服器的用戶端。詳情請參閱「支援的 SFTP 用戶端」。

    PEM 格式

    1. 如要建立 OpenSSH 金鑰組 (PEM 格式),請使用 ssh-keygen 公用程式

      在要連線至 SFTP 伺服器的用戶端機器上,執行下列指令:

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

      KEY_PAIR_NAME 替換為金鑰配對的名稱,例如 sftp_user_key

    2. 擷取公開金鑰:

      cat ~/.ssh/KEY_PAIR_NAME.pub

    PPK 格式

    1. 如要建立 PuTTY 金鑰組 (PPK 格式),請使用 PuTTYgen 工具。

      在要連線至 SFTP 伺服器的用戶端機器上,執行下列指令:

      puttygen -t rsa -b 4096 -o KEY_PAIR_NAME.ppk

      KEY_PAIR_NAME 替換為金鑰配對的名稱,例如 sftp_user_key

    2. 擷取公開金鑰:

      puttygen -L KEY_PAIR_NAME.ppk

必要的角色

如要取得新增 SFTP 使用者所需的權限,請要求管理員在專案中授予您「FTP 管理員」(roles/ftp.admin) IAM 角色。 如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備 ftp.users.create 權限,可新增 SFTP 使用者。

您或許還可透過自訂角色或其他預先定義的角色取得這項權限。

設定使用者的權限

  1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

    gcloud init

    若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI

  2. 設定專案:

    gcloud config set project PROJECT_ID

    PROJECT_ID 替換為包含 SFTP 伺服器的專案 ID。

  3. 如果使用者還沒有服務帳戶,請建立一個。服務帳戶會代表使用者存取 Cloud Storage 資源。

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

    USERNAME 替換為 SFTP 使用者的專屬使用者名稱。使用者名稱開頭須為小寫英文字母,可包含小寫英文字母、數字或連字號。長度上限為 32 個半形字元。

    成功後,系統會顯示類似 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. 在 bucket 中授予自己 Storage bucket 檢視者 (roles/storage.bucketViewer) 角色:

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

      請將 BUCKET_NAME 替換為值區名稱。

      針對使用者需要存取的每個 bucket 重複這個步驟。

    3. 在 bucket 中授予自己「Storage 物件檢視者」角色 (roles/storage.objectViewer):

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

      針對使用者需要存取的每個 bucket 重複這個步驟。

  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 角色。

    針對使用者需要存取的每個 bucket 重複這個步驟。

  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 bucket。

gcloud

  1. 如要建立 SFTP 伺服器的使用者,請執行 gcloud alpha storage ftp users create 指令

    使用下方的任何指令資料之前,請先替換以下項目:

    • CREDENTIAL_NAME:用於識別使用者憑證的專屬名稱。
    • SSH_PUBLIC_KEY:使用者安全殼層公開金鑰的主體,格式為 OpenSSH。例如 ssh-rsa AAAAB3NzaC1ycRexample...
    • USERNAME:SFTP 使用者的使用者名稱。
    • SERVICE_ACCOUNT:使用者的服務帳戶。例如:username-sa@example-project.iam.gserviceaccount.com
    • LOCATION_ID:伺服器的位置,例如 us-west1
    • SERVER_ID:伺服器 ID。
    • BUCKET_NAME:SFTP 使用者獲准存取的 bucket 名稱,例如 example-bucket。省略 gs://
    • (選用) BUCKET_PREFIX:要設為這個目錄對應根目錄的 bucket 內資料夾路徑。 如果省略 bucket_prefix 屬性,Cloud FTP 會使用 bucket 根目錄。
    • 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 伺服器建立使用者,請使用 servers.users.create 方法

    使用任何要求資料之前,請先修改下列項目的值:

    • PROJECT_ID:伺服器的 Google Cloud 專案 ID。
    • LOCATION_ID:伺服器的位置,例如 us-west1
    • SERVER_ID:伺服器 ID。
    • USERNAME:SFTP 使用者的使用者名稱。
    • BUCKET_NAME:SFTP 使用者獲准存取的 bucket 名稱,例如 example-bucket。省略 gs://
    • (選用) BUCKET_PREFIX:要設為這個目錄對應根目錄的 bucket 內資料夾路徑。如果省略這個值,Cloud FTP 會使用 bucket 根目錄。
    • 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:使用者安全殼層公開金鑰的主體,格式為 OpenSSH。例如 ssh-rsa AAAAB3NzaC1ycRexample...

    注意事項:

    • 如要授予使用者多個值區的存取權,請在 storageDirectoryMappings 清單中提供多個值區對應。
    • 如要為使用者設定多個公開金鑰,請在 userCredentials 清單中提供多個憑證。

    HTTP 方法和網址:

    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"
        }
      ]
    }
    

    請展開以下其中一個選項,以傳送要求:

    回應會識別長時間執行的作業。 建立使用者需要幾秒鐘的時間。 <0x

  2. 提供下列資訊給使用者,他們需要這些資訊才能連線至伺服器:

    • 使用者的 SFTP 使用者名稱。

    • 伺服器的存取權設定,取決於伺服器類型:

      • 如果是外部伺服器,請輸入伺服器的 IP 位址。

      • 如果是內部伺服器,則為伺服器服務附件的 URI。

      如要瞭解如何取得伺服器的存取設定,請參閱「取得伺服器詳細資料」。

    • (選用) 伺服器的金鑰指紋。

後續步驟