更新 SFTP 使用者的 bucket

本文說明如何更新 Cloud FTP 使用者的 Cloud Storage 值區,包括使用者可存取哪些值區,以及使用者擁有哪些權限。

更新使用者 bucket 的大致步驟如下:

  1. 更新使用者服務帳戶的 IAM 角色。
  2. 將使用者的目錄對應至更新後的 bucket。

事前準備

必要的角色

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

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

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

更新使用者服務帳戶的 IAM 角色

如果您變更使用者可存取的 bucket,或是變更使用者現有目錄對應的權限,則必須使用相關 IAM 角色更新使用者的服務帳戶。請按照下列步驟操作:

  1. 取得使用者服務帳戶的電子郵件地址。如需相關步驟,請參閱「取得使用者詳細資料」。

  2. 如要在目錄對應中新增值區,或增加現有值區的存取權,請按照下列步驟操作:

    1. 如果沒有 bucket 的「Storage Bucket 檢視者」(roles/storage.bucketViewer) 角色,請授予自己該角色:

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

      更改下列內容:

      • ADMINISTRATOR_EMAIL:建立 SFTP 使用者的主體電子郵件地址。如果您要建立使用者 (而非應用程式),這個值就是您用來存取 Google Cloud的電子郵件地址。

      • BUCKET_NAME:值區名稱。

    2. 如果沒有 bucket 的「Storage 物件檢視者」角色 (roles/storage.objectViewer),請授予自己這個角色:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.objectViewer"
    3. 將存取儲存空間所需的 IAM 角色授予使用者的服務帳戶:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
        --member="serviceAccount:SERVICE_ACCOUNT" \
        --role="ROLE_TO_GRANT"

      更改下列內容:

      • SERVICE_ACCOUNT:使用者服務帳戶的電子郵件地址。
      • ROLE_TO_GRANT:要授予的 IAM 角色。指定下列其中一個角色:

        • 如要取得唯讀存取權,請使用 roles/storage.objectViewer角色。
        • 如要授予讀寫權限,請使用 roles/storage.objectAdmin 角色。
    4. 針對使用者需要存取的每個 bucket,重複上述步驟。

  3. 如果從目錄對應中移除值區,或減少現有值區的存取權,請從使用者的服務帳戶撤銷存取權:

    gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME \
      --member="serviceAccount:SERVICE_ACCOUNT" \
      --role="ROLE_TO_REVOKE"

    ROLE_TO_REVOKE 替換為要撤銷的 IAM 角色。

    針對使用者不應再具備存取權的每個值區和 IAM 角色,重複執行這個步驟。

更新使用者的值區

REST

如要更新 SFTP 使用者的 bucket,請使用 servers.users.patch 方法。在 updateMask 查詢參數中,提供 storageDirectoryMappings 欄位。

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

  • 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

如要授予使用者多個 bucket 的存取權,請在 storageDirectoryMappings 清單中提供多個 bucket 對應。

HTTP 方法和網址:

PATCH https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users/USERNAME?updateMask=storageDirectoryMappings

JSON 要求主體:

{
  "storageDirectoryMappings": [
    {
      "bucket": "BUCKET_NAME",
      "bucketPrefix": "BUCKET_PREFIX",
      "directory": "DIRECTORY",
      "permission": "SFTP_PERMISSION"
    }
  ]
}

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

回應會識別長時間執行的作業。系統需要幾秒鐘的時間才能更新使用者。

如果使用者有作用中的 SFTP 連線,可能需要先中斷連線,然後重新連線,更新後的 bucket 設定才會生效。