本文档介绍了如何更新 Cloud FTP 用户的 Cloud Storage 存储桶,包括用户可以访问哪些存储桶以及用户拥有哪些权限。
从总体上讲,更新用户存储桶的步骤如下:
- 更新用户服务帐号的 IAM 角色。
- 将用户的目录映射到更新后的存储桶。
准备工作
创建一个或多个 Cloud Storage 存储桶 用于存储用户将使用的数据(如果存储桶尚不 存在)。您最多可以向用户授予对 10 个存储桶的访问权限。
所需角色
如需获得更新 SFTP 用户所需的权限,请让您的管理员为您授予项目的FTP Admin (roles/ftp.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含更新 SFTP 用户所需的
ftp.users.update
权限。
更新用户服务帐号的 IAM 角色
如果您更改了用户可以访问的存储桶,或者更改了用户对现有目录映射拥有的权限,则必须使用相关的 IAM 角色更新用户的服务帐号。请执行以下操作:
获取用户服务帐号的电子邮件地址。如需了解相关步骤,请参阅 获取有关用户的详细信息。
如果您向目录映射添加了新存储桶或增加了对现有存储桶的访问权限,请执行以下操作:
如果您还没有存储桶的 Storage Bucket Viewer (
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:存储桶的名称。
如果您还没有存储桶的 Storage Object Viewer (
roles/storage.objectViewer) 角色,请向自己授予该角色:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="user:ADMINISTRATOR_EMAIL" \ --role="roles/storage.objectViewer"
向用户的服务帐号授予访问存储桶所需的 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角色。
- 如需只读访问权限,请使用
针对用户需要访问的每个存储桶重复上述步骤。
如果您从目录映射中移除了存储桶或减少了对现有存储桶的访问权限,请撤消用户服务帐号的访问权限:
gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME \ --member="serviceAccount:SERVICE_ACCOUNT" \ --role="ROLE_TO_REVOKE"
将
ROLE_TO_REVOKE替换为您要撤消的 IAM 角色。针对用户不应再有权访问的每个存储桶和 IAM 角色重复此步骤。
更新用户的存储桶
gcloud
如需更新 SFTP 用户的存储桶,请运行
gcloud alpha storage ftp users update 命令。
在使用以下任何命令数据之前, 请进行以下替换:
- USERNAME:SFTP 用户的用户名。
- LOCATION_ID:服务器
的位置,例如
us-west1。 - SERVER_ID:服务器 ID。
- BUCKET_NAME:向 SFTP 用户授予访问权限的存储桶的名称,例如
example-bucket。省略gs://。 - (可选)BUCKET_PREFIX:存储桶中要设置为此目录映射的
根目录的文件夹的路径。
如果您省略
bucket_prefix属性,则 Cloud FTP 会使用存储桶根目录。 -
DIRECTORY:向 SFTP 用户显示的逻辑着陆目录路径。例如,
/home/uploads。如果您映射了多个存储桶或文件夹,请为每个 映射提供唯一的目录路径。
不支持嵌套的逻辑目录。如果您为某个目录提供了多个映射, 请以扁平结构(而不是嵌套结构)提供目录。例如,使用
/dir1和/dir2,而不是/dir1和/dir1/dir2。 - SFTP_PERMISSION:目录的访问权限级别。如需只读访问权限,请将此
值设置为
READ_ONLY。如需读写访问权限,请将此值设置为READ_WRITE。
如需向用户授予对多个存储桶的访问权限,请多次提供 --storage-directory-mapping
标志,并为每个存储桶提供一个目录映射。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID \ --server=SERVER_ID \ --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION
Windows (PowerShell)
gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID ` --server=SERVER_ID ` --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION
Windows (cmd.exe)
gcloud alpha storage ftp users update USERNAME --location=LOCATION_ID ^ --server=SERVER_ID ^ --storage-directory-mapping=bucket=BUCKET_NAME,bucket_prefix=BUCKET_PREFIX,directory=DIRECTORY,permission=SFTP_PERMISSION
如果用户有活跃的 SFTP 连接, 则可能需要断开连接,然后重新连接,更新后的存储桶 设置才会生效。
REST
如需更新 SFTP 用户的存储桶,请使用
servers.users.patch 方法。
在 updateMask 查询参数中,提供 storageDirectoryMappings 字段。
在使用任何请求数据之前, 请进行以下替换:
- PROJECT_ID:服务器的 Google Cloud 项目 ID。
- LOCATION_ID:服务器的位置,例如
us-west1。 - SERVER_ID:服务器 ID。
- USERNAME:SFTP 用户的用户名。
- BUCKET_NAME:向 SFTP 用户授予访问权限的存储桶的名称,例如
example-bucket。省略gs://。 - (可选)BUCKET_PREFIX:存储桶中要设置为此目录映射的 根目录的文件夹的路径。 如果您省略此值,则 Cloud FTP 会使用存储桶 根目录。
-
DIRECTORY:向 SFTP 用户显示的逻辑着陆目录路径。例如,
/home/uploads。如果您省略此值,则 Cloud FTP 会将 着陆目录设置为/。如果您映射了多个存储桶或文件夹,请为每个 映射提供唯一的目录路径。
不支持嵌套的逻辑目录。如果您为某个目录提供了多个映射, 请以扁平结构(而不是嵌套结构)提供目录。例如,使用
/dir1和/dir2,而不是/dir1和/dir1/dir2。 - SFTP_PERMISSION:目录的访问权限级别。如需只读访问权限,请将此
值设置为
READ_ONLY。如需读写访问权限,请将此值设置为READ_WRITE。
如需向用户授予对多个存储桶的访问权限,请在
storageDirectoryMappings 列表中提供多个存储桶映射。
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 连接, 则可能需要断开连接,然后重新连接,更新后的存储桶 设置才会生效。
客户端库
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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅 为本地开发环境设置身份验证。