本文說明如何將使用者新增至 Cloud FTP 伺服器。外部合作夥伴和內部利害關係人等使用者,可以透過伺服器安全地將檔案傳輸至 Cloud Storage,以及從 Cloud Storage 傳輸檔案。
將使用者新增至安全檔案傳輸通訊協定伺服器的大致步驟如下:
- 設定使用者的權限。
- 建立 SFTP 使用者,並將目錄對應至 Cloud Storage bucket。
如要瞭解如何建立伺服器,請參閱「建立外部安全檔案傳輸通訊協定伺服器」和「建立內部安全檔案傳輸通訊協定伺服器」。
注意事項
您最多可以授權使用者存取 10 個 bucket。
使用者最多可有 10 個公開金鑰。
事前準備
建立一或多個 Cloud Storage bucket,用於儲存使用者要處理的資料 (如果 bucket 尚未存在)。
從使用者用來連線至伺服器的每個 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 使用者。
設定使用者的權限
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
設定專案:
gcloud config set project PROJECT_ID
將
PROJECT_ID替換為包含 SFTP 伺服器的專案 ID。如果使用者還沒有服務帳戶,請建立一個。服務帳戶會代表使用者存取 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]的訊息。將 IAM 角色授予建立 SFTP 使用者的管理員:
將服務帳戶使用者 (
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在 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 重複這個步驟。
在 bucket 中授予自己「Storage 物件檢視者」角色 (
roles/storage.objectViewer):gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="user:ADMINISTRATOR_EMAIL" \ --role="roles/storage.objectViewer"
針對使用者需要存取的每個 bucket 重複這個步驟。
將存取儲存空間所需的 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 重複這個步驟。
- 如要取得唯讀存取權,請使用
授權 Cloud FTP 服務代理為使用者的服務帳戶產生權杖:
取得伺服器服務代理程式的電子郵件地址。 如需相關步驟,請參閱「取得伺服器詳細資料」。
授權 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
如要建立 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
提供下列資訊給使用者,他們需要這些資訊才能連線至伺服器:
使用者的 SFTP 使用者名稱。
伺服器的存取權設定,取決於伺服器類型:
如果是外部伺服器,請輸入伺服器的 IP 位址。
如果是內部伺服器,則為伺服器服務附件的 URI。
如要瞭解如何取得伺服器的存取設定,請參閱「取得伺服器詳細資料」。
(選用) 伺服器的金鑰指紋。
REST
如要為 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" } ] }請展開以下其中一個選項,以傳送要求:
回應會識別長時間執行的作業。建立使用者需要幾秒鐘的時間。
提供下列資訊給使用者,他們需要這些資訊才能連線至伺服器:
使用者的 SFTP 使用者名稱。
伺服器的存取權設定,取決於伺服器類型:
如果是外部伺服器,請輸入伺服器的 IP 位址。
如果是內部伺服器,則為伺服器服務附件的 URI。
如要瞭解如何取得伺服器的存取設定,請參閱「取得伺服器詳細資料」。
(選用) 伺服器的金鑰指紋。
後續步驟
- 連線至外部 SFTP 伺服器。
- 連線至內部 SFTP 伺服器。
- 使用 SFTP 指令傳輸資料。
- 瞭解 Cloud Storage bucket 的資料保護、備份和復原選項。