访问权限控制

本页面介绍如何控制对 Filestore 实例的访问权限。

Filestore 不支持 Kerberos 来保护对 Filestore 实例的访问。请改用本页面中介绍的 Linux 和 Identity and Access Management (IAM) 选项。

文件共享导出设置

Filestore 文件共享分配有以下默认 /etc/exports 设置:

  • 客户端列表用于标识允许连接到文件共享的客户端,其中包含了您为 Filestore 实例选择的 VPC 网络中的所有内部 IP 地址。内部 IP 地址可以是子网范围中列出的任何范围。 不过,如果您的客户使用的是非 RFC 1918 子网范围中,您必须通过基于 IP 的访问权限控制明确授予他们对 Filestore 实例的访问权限。
  • 使用了 rw 选项,因此文件共享是可读写的。
  • 使用了用户 ID 映射选项 no_root_squash,因此 Filestore 实例和客户端上的所有用户和群组(包括 root 用户)都应该是相同的。
  • 所有其他选项均使用 /etc/exports 默认值。

基于 IP 的访问权限控制

您可以使用 Cloud Console 创建访问权限控制规则,或者在创建实例期间使用 gcloud 工具指定 JSON 配置文件,从而更改这些导出设置。如需了解详情,请参阅配置基于 IP 的访问权限控制

您还可以在创建实例后添加新的访问权限控制规则或修改现有规则。如需了解详情,请参阅修改实例

文件共享权限

创建 Filestore 实例时,该实例的文件共享具有默认的 POSIX 文件权限 rwxr-xr-x。这些权限意味着在 Filestore 实例上,只有连接的客户端上的 root 用户才拥有文件共享的读/写权限。其他用户默认只具有读取访问权限;但客户端 root 用户可以更改权限和所有者。

配置对文件共享的访问权限

装载文件共享时,您可以使用装载选项/etc/fstab 设置来确定文件共享是否可写入数据以及是否可在该文件共享中执行文件。装载文件共享后,您便可以使用 chmodsetfacl 等标准 Linux 命令来设置文件和文件共享权限。

设置一致的权限

我们强烈建议您为连接到同一 Filestore 实例的所有客户端上的每位用户设置一致的权限,以防止提权。如果文件共享装载在多个客户端上,并且用户在其中某个客户端上具有(但在其他客户端上没有)root 权限,则可能会发生以下提权现象:

  • 假设用户从其具有 root 访问权限的客户端设置可执行文件的 setuid 属性。
  • 然后,用户将该可执行文件上传到文件共享。
  • 那么,用户在其至少具有读取访问权限的任何客户端上,便能够以 root 用户身份执行上传的文件。

出现这种情况的原因是 setuid 位允许用户使用文件所有者(在本例中为 root)的权限来执行文件。

IAM 角色和权限

您可通过向用户授予 Identity and Access Management (IAM) 角色来授予对 Filestore 操作的访问权限。

IAM 权限只能控制对 Filestore 操作(例如创建 Filestore 实例)的访问权限。如需控制对文件共享操作(例如读取或执行)的访问权限,请使用 POSIX 文件权限。

使用 Filestore 角色

如需向用户授予 Filestore 权限,请使用 Filestore Editor (roles/file.editor) 和 Filestore Viewer (roles/file.viewer) 角色。如果需要,还可以使用基本角色来实现此目的。

使用下表查看与 Filestore 角色关联的 Filestore 权限。

权限 操作 Filestore Editor Filestore Viewer
file.locations.get 获取该服务支持的位置的相关信息。
file.locations.list 列出该服务的支持位置的相关信息。
file.instances.create 创建 Filestore 实例。
file.instances.update 更新 Filestore 实例。
file.instances.delete 删除 Filestore 实例。
file.instances.get 获取有关特定 Filestore 实例的详细信息。
file.instances.list 列出项目中的 Filestore 实例。
file.operations.get 获取 Filestore 实例操作的状态。
file.operations.list 列出 Filestore 实例操作。
file.operations.cancel 取消 Filestore 实例操作。
file.operations.delete 删除 Filestore 实例操作。
file.backups.create 创建 Filestore 备份。
file.backups.update 更新 Filestore 备份。
file.backups.delete 删除 Filestore 备份。
file.backups.get 获取有关特定 Filestore 备份的详细信息。
file.backups.list 列出项目中的 Filestore 备份。
file.snapshots.create 创建 Filestore 快照。
file.snapshots.update 更新 Filestore 快照。
file.snapshots.delete 删除 Filestore 快照。
file.snapshots.get 获取有关特定 Filestore 快照的详细信息。
file.snapshots.list 列出项目中的 Filestore 快照。

使用基本角色

Filestore 权限还与所有者、编辑者和查看者的 IAM 基本角色相关联。如需向用户授予 Filestore 权限,除了 Filestore 角色之外,您还可以使用这些角色。

请使用下表查看与基本角色关联的 Filestore 权限。

权限 操作 Project Owner Project Editor Project Viewer
file.locations.get 获取该服务支持的位置的相关信息。
file.locations.list 列出该服务的支持位置的相关信息。
file.instances.create 创建 Filestore 实例。
file.instances.update 更新 Filestore 实例。
file.instances.delete 删除 Filestore 实例。
file.instances.get 获取有关特定 Filestore 实例的详细信息。
file.instances.list 列出项目中的 Filestore 实例。
file.operations.get 获取 Filestore 实例操作的状态。
file.operations.list 列出 Filestore 实例操作。
file.operations.cancel 取消 Filestore 实例操作。
file.operations.delete 删除 Filestore 实例操作。
file.backups.create 创建 Filestore 备份。
file.backups.update 更新 Filestore 备份。
file.backups.delete 删除 Filestore 备份。
file.backups.get 获取有关特定 Filestore 备份的详细信息。
file.backups.list 列出项目中的 Filestore 备份。
file.snapshots.create 创建 Filestore 快照。
file.snapshots.update 更新 Filestore 快照。
file.snapshots.delete 删除 Filestore 快照。
file.snapshots.get 获取有关特定 Filestore 快照的详细信息。
file.snapshots.list 列出项目中的 Filestore 快照。

自定义角色

如果预定义的 IAM 角色不符合您的需求,您可以使用通过 IAM 的自定义角色指定的权限来定义一个自定义角色。为 Filestore 创建自定义角色时,请确保同时包含 resourcemanager.projects.getresourcemanager.projects.list,以便该角色具有查询项目资源的权限。