將使用者新增至 SFTP 伺服器

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

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

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

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

注意事項

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

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

事前準備

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

  2. 從使用者用來連線至伺服器的每個 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 使用者所需的權限,請要求管理員在專案中授予您「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 使用者的專屬使用者名稱。使用者名稱開頭須為小寫英文字母,可包含小寫英文字母、數字或連字號。

    成功後,系統會顯示類似 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"
        }
      ]
    }
    

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

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

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

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

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

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

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

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

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

後續步驟