本文档介绍了如何更新 Cloud FTP 用户的服务帐号。服务帐号代表用户访问 Cloud Storage 资源。
从总体上讲,更新用户的服务帐号的步骤如下:
- 配置具有相应 IAM 角色的服务帐号。
- 更新附加到用户的服务帐号。
我们建议您为每个用户使用专用服务帐号,以便您可以为每个用户单独管理 SFTP 访问权限。
所需的角色
如需获得更新 SFTP 用户所需的权限,请让您的管理员为您授予项目的FTP Admin (roles/ftp.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含更新 SFTP 用户所需的
ftp.users.update
权限。
配置服务帐号
如果服务账号尚不存在,请为用户创建一个服务帐号。
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]的消息。向您自己授予 Service Account User (
roles/iam.serviceAccountUser) 角色:gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID. \ --member="user:ADMINISTRATOR_EMAIL" \ --role="roles/iam.serviceAccountUser"
将
ADMINISTRATOR_EMAIL替换为更新 SFTP 用户的主账号的电子邮件地址。如果您要更新用户 (而不是应用),则此值是您用于访问的电子邮件地址 。 Google Cloud成功后,系统会显示类似以下内容的消息:
Updated IAM policy for serviceAccount [example-userid-sa@example-project.]. bindings: - members: - user:admin@example.com role: roles/iam.serviceAccountUser etag: BwZJk7OiSzw= version: 1向用户的服务帐号授予访问存储桶所需的 IAM 角色:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="serviceAccount:USERNAME-sa@PROJECT_ID." \ --role="ROLE"
将
ROLE替换为以下 IAM 角色之一:- 如需只读访问权限,请使用
roles/storage.objectViewer角色。 - 如需读写访问权限,请使用
roles/storage.objectAdmin角色。
对于用户需要访问的每个存储桶,重复此步骤。
- 如需只读访问权限,请使用
授权 Cloud FTP 服务代理为用户的服务帐号生成令牌:
获取 SFTP 服务器的服务代理的电子邮件地址。 如需了解相关步骤,请参阅 获取有关服务器的详细信息。
授权 Cloud FTP 服务代理:
gcloud iam service-accounts add-iam-policy-binding USERNAME-sa@PROJECT_ID. \ --member="serviceAccount:SERVICE_AGENT_EMAIL" \ --role="roles/iam.serviceAccountTokenCreator"
将
SERVICE_AGENT_EMAIL替换为服务代理的电子邮件地址。
接下来,更新用户的服务帐号。
更新用户的服务帐号
REST
如需更新附加到 SFTP 用户的服务帐号,请使用
servers.users.patch 方法。
在 updateMask 查询参数中,提供 customerServiceAccount 字段。
在使用任何请求数据之前, 请进行以下替换:
- PROJECT_ID:服务器的 Google Cloud 项目 ID。
- LOCATION_ID:服务器的位置,例如
us-west1。 - SERVER_ID:服务器 ID。
- USERNAME:SFTP 用户的用户名。
HTTP 方法和网址:
PATCH https://ftp.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/servers/SERVER_ID/users/USERNAME?updateMask=customerServiceAccount
请求 JSON 正文:
{
"customerServiceAccount": "USERNAME-sa@PROJECT_ID."
}
如需发送您的请求,请展开以下选项之一:
该响应用于标识长时间运行的操作。更新用户 需要几秒钟的时间。