本文說明如何將使用者新增至 Cloud FTP 伺服器。外部合作夥伴和內部利害關係人等使用者,可以透過伺服器安全地將檔案傳輸至 Cloud Storage,或從 Cloud Storage 傳輸檔案。
如要將使用者新增至 SFTP 伺服器,大致步驟如下:
- 設定使用者的權限。
- 建立 SFTP 使用者,並將目錄對應至 Cloud Storage bucket。
如要瞭解如何建立伺服器,請參閱「建立外部安全檔案傳輸通訊協定伺服器」和「建立內部安全檔案傳輸通訊協定伺服器」。
注意事項
您最多可以授予使用者 10 個 bucket 的存取權。
每位使用者最多可有 10 個公開金鑰。
事前準備
建立一或多個 Cloud Storage bucket,用於儲存使用者要處理的資料 (如果 bucket 尚未建立)。
從使用者用來連線至伺服器的每個安全殼層金鑰組中,取得使用者的公開金鑰。
如果使用者沒有安全殼層金鑰組,請按照下列步驟產生。
產生安全殼層 (SSH) 金鑰組
您需要哪種金鑰格式?
您需要的金鑰格式取決於用來連線至安全檔案傳輸通訊協定伺服器的用戶端。詳情請參閱「支援的 SFTP 用戶端」。
PEM 格式
-
如要建立 OpenSSH 金鑰組 (PEM 格式),請使用
ssh-keygen公用程式。在要連線至 SFTP 伺服器的用戶端機器上,執行下列指令:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/KEY_PAIR_NAME
將
KEY_PAIR_NAME替換為金鑰組的名稱,例如sftp_user_key。 -
擷取公開金鑰:
cat ~/.ssh/KEY_PAIR_NAME.pub
PPK 格式
-
如要建立 PuTTY 金鑰組 (PPK 格式),請使用
PuTTYgen工具。在要連線至 SFTP 伺服器的用戶端機器上,執行下列指令:
puttygen -t rsa -b 4096 -o KEY_PAIR_NAME.ppk
將
KEY_PAIR_NAME替換為金鑰組的名稱,例如sftp_user_key。 -
擷取公開金鑰:
puttygen -L KEY_PAIR_NAME.ppk
-
必要的角色
如要取得新增 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 使用者的專屬使用者名稱。使用者名稱開頭須為小寫英文字母,可包含小寫英文字母、數字或連字號。長度上限為 32 個字元。如果成功,系統會顯示類似
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 重複執行這個步驟。
將存取 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角色。
針對使用者需要存取的每個值區,重複執行這個步驟。
- 如需唯讀存取權,請使用
授權 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替換為服務代理的電子郵件地址。
接下來,請建立使用者。
建立安全檔案傳輸通訊協定伺服器使用者
設定使用者權限後,請建立使用者,並將其目錄對應至一或多個 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。如果您對應多個 bucket 或資料夾,請為每個對應提供不重複的目錄路徑。
系統不支援巢狀邏輯目錄。如果您為目錄提供多個對應,請以平面結構 (而非巢狀結構) 提供目錄。舉例來說,請使用
/dir1和/dir2,而非/dir1和/dir1/dir2。 - SFTP_PERMISSION:目錄的存取層級。如要取得唯讀存取權,請將這個值設為
READ_ONLY。如要授予讀取和寫入權限,請將這個值設為READ_WRITE。
注意事項:
- 如要授予使用者多個 bucket 的存取權,請多次提供
--storage-directory-mapping旗標,並為每個 bucket 提供目錄對應。 - 如要為使用者設定多個公開金鑰,請在
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...。
注意事項:
- 如要授予使用者多個 bucket 的存取權,請在
storageDirectoryMappings清單中提供多個 bucket 對應。 - 如要為使用者設定多個公開金鑰,請在
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。
如要瞭解如何取得伺服器的存取設定,請參閱「取得伺服器的詳細資料」。
(選用) 伺服器的金鑰指紋。
用戶端程式庫
C#
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱 Cloud FTP C# API 參考文件。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Go
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱「Cloud FTP Go API 參考文件」。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Java
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱 Cloud FTP Java API 參考文件。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Node.js
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱「Cloud FTP Node.js API 參考文件」。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證機制」。
PHP
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱 Cloud FTP PHP API 參考文件。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Python
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱 Cloud FTP Python API 參考文件。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。
Ruby
如要瞭解如何安裝及使用 Cloud FTP 的用戶端程式庫,請參閱「Cloud FTP 用戶端程式庫」。詳情請參閱「Cloud FTP Ruby API 參考文件」。
如要向 Cloud FTP 進行驗證,請設定應用程式預設憑證。 詳情請參閱「為本機開發環境設定驗證機制」。
後續步驟
- 連線至外部 SFTP 伺服器。
- 連線至內部 SFTP 伺服器。
- 使用 SFTP 指令傳輸資料。
- 瞭解 Cloud Storage bucket 的資料保護、備份和復原選項。