更新 SFTP 用户的存储分区

本文档介绍了如何更新 Cloud FTP 用户的 Cloud Storage 存储分区,包括用户可以访问哪些存储分区以及用户拥有哪些权限。

概括来讲,更新用户的分桶的步骤如下:

  1. 更新用户的服务账号的 IAM 角色。
  2. 将用户的目录映射到更新后的存储分区。

准备工作

所需的角色

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

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

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

更新用户的服务账号的 IAM 角色

如果您更改了用户可以访问的存储分区,或者更改了用户对现有目录映射拥有的权限,则必须使用相关的 IAM 角色更新用户的服务账号。请执行以下操作:

  1. 获取用户的服务账号的电子邮件地址。如需了解相关步骤,请参阅获取有关用户的详细信息

  2. 如果您向目录映射添加了新存储分区,或增加了对现有存储分区的访问权限,请执行以下操作:

    1. 如果您尚未拥有存储桶的 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:相应存储桶的名称。

    2. 如果您尚未拥有存储桶的 Storage Object Viewer (roles/storage.objectViewer) 角色,请向自己授予该角色:

      gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
          --member="user:ADMINISTRATOR_EMAIL" \
          --role="roles/storage.objectViewer"
    3. 向用户的服务账号授予访问相应存储分区所需的 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 角色。
    4. 针对用户需要访问的每个存储桶重复上述步骤。

  3. 如果您从目录映射中移除存储分区或减少对现有存储分区的访问权限,请撤消用户服务账号的访问权限:

    gcloud storage buckets remove-iam-policy-binding gs://BUCKET_NAME \
      --member="serviceAccount:SERVICE_ACCOUNT" \
      --role="ROLE_TO_REVOKE"

    ROLE_TO_REVOKE 替换为您要撤消的 IAM 角色。

    针对用户不应再有权访问的每个存储桶和 IAM 角色重复此步骤。

更新用户的分桶

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 连接,可能需要断开连接,然后重新连接,才能使更新后的存储桶设置生效。