更新 SFTP 使用者的服務帳戶

本文說明如何更新 Cloud FTP 使用者的服務帳戶。服務帳戶會代表使用者存取 Cloud Storage 資源。

更新使用者服務帳戶的大致步驟如下:

  1. 設定服務帳戶並授予適當的 IAM 角色。
  2. 更新附加至使用者的服務帳戶。

建議您為每位使用者使用專屬服務帳戶,以便分別管理每位使用者的 SFTP 存取權。

必要的角色

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

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

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

設定服務帳戶

  1. 如果使用者還沒有服務帳戶,請建立一個。

    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] 的訊息。

  2. 將服務帳戶使用者 (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
    
  3. 將存取儲存空間所需的 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 重複這個步驟。

  4. 授權 Cloud FTP 服務代理為使用者的服務帳戶產生權杖:

    1. 取得 SFTP 伺服器服務代理人的電子郵件地址。 如需相關步驟,請參閱「取得伺服器詳細資料」。

    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 替換成服務代理人的電子郵件地址。

接著,更新使用者的服務帳戶。

更新使用者的服務帳戶

gcloud

如要更新附加至 SFTP 使用者的服務帳戶,請執行 gcloud alpha storage ftp users update 指令。

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

  • USERNAME:SFTP 使用者的使用者名稱。
  • LOCATION_ID:伺服器的位置,例如 us-west1。
  • SERVER_ID:伺服器 ID。
  • SERVICE_ACCOUNT:使用者的服務帳戶。例如:username-sa@example-project.iam.gserviceaccount.com。

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID \
    --server=SERVER_ID --customer-service-account=SERVICE_ACCOUNT

Windows (PowerShell)

gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID `
    --server=SERVER_ID --customer-service-account=SERVICE_ACCOUNT

Windows (cmd.exe)

gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID ^
    --server=SERVER_ID --customer-service-account=SERVICE_ACCOUNT
系統需要幾秒鐘的時間才能更新使用者。

REST

如要更新附加至 SFTP 使用者的服務帳戶,請使用 servers.users.patch 方法。在 updateMask 查詢參數中,提供 customerServiceAccount 欄位。

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

  • PROJECT_ID:伺服器的 Google Cloud 專案 ID。
  • LOCATION_ID:伺服器的位置,例如 us-west1。
  • SERVER_ID:伺服器 ID。
  • USERNAME:SFTP 使用者的使用者名稱。
  • SERVICE_ACCOUNT:使用者的服務帳戶。例如:username-sa@example-project.iam.gserviceaccount.com。

HTTP 方法和網址:

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

JSON 要求主體:

{
  "customerServiceAccount": "SERVICE_ACCOUNT"
}

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

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

後續步驟