更新 SFTP 用户的服务账号

本文档介绍了如何更新 Cloud FTP 用户的服务帐号。服务帐号代表用户访问 Cloud Storage 资源。

从总体上讲,更新用户的服务帐号的步骤如下:

  1. 配置具有相应 IAM 角色的服务帐号。
  2. 更新附加到用户的服务帐号。

我们建议您为每个用户使用专用服务帐号,以便您可以为每个用户单独管理 SFTP 访问权限。

所需的角色

如需获得更新 SFTP 用户所需的权限,请让您的管理员为您授予项目的FTP Admin (roles/ftp.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含更新 SFTP 用户所需的 ftp.users.update 权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

配置服务帐号

  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. 向您自己授予 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
    
  3. 向用户的服务帐号授予访问存储桶所需的 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 角色。

    对于用户需要访问的每个存储桶,重复此步骤。

  4. 授权 Cloud FTP 服务代理为用户的服务帐号生成令牌:

    1. 获取 SFTP 服务器的服务代理的电子邮件地址。 如需了解相关步骤,请参阅 获取有关服务器的详细信息

    2. 授权 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 字段。

在使用任何请求数据之前, 请进行以下替换:

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."
}

如需发送您的请求,请展开以下选项之一:

该响应用于标识长时间运行的操作。更新用户 需要几秒钟的时间。

后续步骤