以下指南介绍了如何使用新的 Filestore 实例实现 NFSv4.1 协议。
NFSv4.1 简介
Filestore 为在以下服务层级创建的实例提供 NFSv4.1 协议支持:
- 可用区级
- 区域
- 企业
此功能可与 Managed Service for Microsoft Active Directory (Managed Microsoft AD) 集成,以支持需要客户端和服务器身份验证、消息数据完整性检查和传输中数据加密的工作负载,这些功能之前在 Filestore 中不可用。
支持使用 LDAP 和 Kerberos 进行身份验证,并包含以下安全变种(设置):
- 客户端和服务器身份验证 (
krb5
)。 - 邮件完整性检查 (
krb5i
)。包含上一个设置的功能。 - 传输中的数据加密 (
krb5p
)。包含上一个设置的功能。
- 客户端和服务器身份验证 (
代管式 Microsoft AD 是唯一同时支持 LDAP 和 Kerberos、NFSv4.1 协议要求以及其安全和隐私保护优势的全代管式 Google Cloud 解决方案。虽然您无需与托管式 Microsoft AD 集成,但为了获得最佳 Google Cloud 用户体验,强烈建议您管理用户账号以及不断变化的群组和权限。
您是否应使用 NFSv4.1?
许多企业组织依赖于旧版系统来执行业务关键操作。其中许多系统都要求对其网络文件存储进行身份验证和传输中加密。NFSv3 在设计时并未考虑到身份验证。Filestore 的 NFSv4.1 协议与托管式 Microsoft AD 的集成现已满足这一关键用户要求。
目标
在本指南中,您将学习如何完成以下任务:
创建使用 NFSv4.1 的 Filestore 实例
如需将托管式 Microsoft AD 与 Filestore 实例搭配使用,必须先创建托管式 Microsoft AD 网域,然后再创建 Filestore 实例。
准备工作
托管式 Microsoft AD 网域和 Filestore 实例必须使用相同的 VPC,并且位于同一项目中。
如果您的托管式 Microsoft AD 服务托管在与您要使用的 Filestore 实例分属不同项目的环境中,则 Filestore VPC 网络需要与托管式 Microsoft AD 网域建立对等关系。
如需了解详情,请参阅使用网域对等连接部署具有跨项目访问权限的 Managed Microsoft AD。
确保为托管式 Microsoft AD 用户填充 POSIX RFC 2307 和 RFC 2307bis 字段,如下所示。
如需详细了解如何在托管式 Microsoft AD 中配置对象,请参阅托管式 Active Directory 对象。
Active Directory 用户和计算机
以下步骤介绍了您需要为 LDAP 用户和组设置的属性。您可以使用 Active Directory 用户和计算机 MMC 管理单元管理 POSIX 属性。
您可以按以下步骤打开属性编辑器:
- 点击开始。
点击 Windows Administrative Tools(Windows 管理工具),然后选择 Active Directory Users and Computers(Active Directory 用户和计算机)。
系统会打开 Active Directory 用户和计算机窗口。
选择要查看的域名。如需展开其内容,请点击
展开箭头。在“Active Directory 用户和计算机”的 View 菜单中,选择 Advanced Features。
在左侧窗格中,双击用户。
在用户列表中,双击某个用户以查看其属性编辑器标签页。
LDAP 用户必须设置以下属性:
uid
uidNumber
cn
gidNumber
objectClass
每个用户的
uidNumber
都必须是唯一的。请注意,uid
属性的值区分大小写。对于objectClass
属性,大多数 Active Directory (AD) 部署的默认设置为user
。下面给出了一个示例:uid: Alice uidNumber: 139 gidNumber: 555 objectClass: user
LDAP 群组必须设置以下属性:
cn
gidNumber
objectClass
每个组必须具有唯一的
gidNumber
。请注意,cn
属性的值区分大小写。对于objectClass
属性,大多数 AD 部署的默认设置为group
。以下是一个示例:cn: AliceGroup gidNumber: 555 objectClass: group
使用
gcloud projects add-iam-policy-binding
命令向 Filestore 授予在托管式 Microsoft AD 中创建和管理对象的权限:gcloud projects add-iam-policy-binding MANAGED_MICROSOFT_AD_PROJECT_ID \ --member=serviceAccount:service-$(gcloud projects describe PROJECT_ID \ --format='value(projectNumber)')@cloud-filer.iam.gserviceaccount.com \ --role=roles/managedidentities.filestoreintegrator
替换以下内容:
- MANAGED_MICROSOFT_AD_PROJECT_ID 是托管式 Microsoft AD 网域所在项目的项目 ID。
- PROJECT_ID 是 Filestore 实例所在项目的项目 ID。
您可能会看到类似于以下内容的错误:
INVALID_ARGUMENT: Service account service-123456789012@cloud-filer.iam.gserviceaccount.com does not exist.
如果是,请使用以下命令解决此问题:
gcloud beta services identity create --service=file.googleapis.com --project \ MANAGED_MICROSOFT_AD_PROJECT_ID
创建 Filestore 实例(是否使用托管式 Microsoft AD)
在本部分中,您将创建一个配置为使用 NFSv4.1 协议的 Filestore 实例。为选择不使用受管理的 Microsoft AD 的用户提供了可选步骤。
确保您有足够的配额。
实例配额范围因您要使用的区域位置和服务层级而异。如需增加可用配额,您必须提交配额增加请求。
Google Cloud 控制台
设置实例参数
在 Google Cloud 控制台中,前往“Filestore 实例”页面。
点击创建实例。
指定实例的基本参数,包括名称、实例类型和容量:
- 在实例 ID 字段中,输入要用于 Filestore 实例的名称。
在实例类型中,选择区域级或可用区级。
如需创建企业实例,您必须直接通过 Filestore API 运行操作。
在分配的容量中,输入您要使用的容量。您必须输入一个介于 1 TB 到 10 TB 之间的值,增量为 256 GiB (0.25 TiB)。
在区域中,选择您要使用的区域。
在 VPC 网络中,选择要为 Filestore 实例和 NFS 客户端使用的网络。
- 如果托管式 Microsoft AD 与 Filestore 实例位于同一项目中,则需要在托管式 Microsoft AD 网域中授权 VPC 网络。
- 如果托管式 Microsoft AD 位于单独的项目中,则应在托管式 Microsoft AD 配置中为 VPC 网络配置 Active Directory 网络对等互连。
在分配的 IP 范围中,选择使用自动分配的 IP 范围(推荐)。
在协议中,选择 NFSv4.1。
配置实例的身份验证设置
- 配置实例的身份验证设置。
- 点击身份验证。
- 选择托管代管式 Microsoft AD 的项目。在本指南中,我们假设当前项目是我们要使用的项目。
- 在加入 Active Directory 网域列表中,选择要使用的 Managed Microsoft AD 网域。
- 在计算机账号名称字段中,输入您要用于在托管式 Microsoft AD 网域中标识 Filestore 实例的计算机账号名称。名称不得超过 15 个字母数字字符。
- 在 File share name 字段中,输入共享的名称,因为 NFSv4.1 客户端将使用该名称。
在访问控制窗格中,完成以下任一步骤:
如果使用的是受管理的 Microsoft AD,请选择按 IP 地址或范围限制访问权限。
- 根据您要定义的 IP 地址或子网设置访问规则。在本指南中,请使用以下设置:
- 在 IP 地址或范围 1 字段中,输入要使用的 IP 地址或范围。
- 点击 Access 1(访问权限 1)下拉列表,然后选择 Admin(管理员)。
- 点击 Mount
sec=
1 下拉列表,然后选中 sys 复选框。
Filestore 的默认
/
所有者为root
。如需为其他用户和群组启用对实例的访问权限,您必须创建一个访问规则,使用Admin
角色和sec=sys
安全设置启用对管理虚拟机的访问权限。如果您不使用托管式 Microsoft AD,请选择向 VPC 网络中的所有客户端授予访问权限。
如果不使用托管式 Microsoft AD,则唯一受支持的安全设置是
sec=sys
。
点击创建以创建实例。
gcloud
-
如果您已安装 gcloud CLI,请运行以下命令进行更新:
gcloud components update
完成以下任一步骤:
如果使用的是受管理的 Microsoft AD,请运行以下
gcloud beta filestore instances create
命令以创建 Filestore 区域级、区域级或企业级实例:gcloud beta filestore instances create INSTANCE-ID \ --description="DESCRIPTION" \ --region=LOCATION \ --tier=TIER \ --protocol=PROTOCOL \ --file-share=name="FILE_SHARE_NAME",capacity=CAPACITYTB \ --network=name="VPC_NETWORK",connect-mode=CONNECT_MODE,reserved-ip-range="RESERVED_IP_RANGE" \ --managed-ad=domain=projects/MANAGED_AD_PROJECT_ID/locations/global/domains/MANAGED_AD_DOMAIN_NAME,computer=DOMAIN_COMPUTER_ACCOUNT \ --project=CONSUMER_PROJECT_ID
替换以下内容:
- INSTANCE_ID 是您要创建的 Filestore 实例的实例 ID。请参阅为实例命名。
- DESCRIPTION 是您要使用的实例的说明。
- LOCATION 是您希望 Filestore 实例所在的位置。
- TIER 是您要使用的服务层级。
- PROTOCOL 为
NFS_v4_1
。 - FILE_SHARE_NAME 是您为从实例提供的 NFS 文件共享所指定的名称。
- CAPACITY 是文件共享所需的大小,介于 1 TiB 到 10 TiB 之间。
VPC_NETWORK 是您希望实例使用的 VPC 网络的名称。请参阅选择 VPC 网络。如果您要在服务项目中指定共享 VPC,则必须指定完全限定的网络名称(格式为
projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME
),并且必须指定connect-mode=PRIVATE_SERVICE_ACCESS
,如以下示例所示:--network=name=projects/host/global/networks/shared-vpc-1,connect-mode=PRIVATE_SERVICE_ACCESS
您不能为 vpc_network 值指定旧版网络。如有必要,请按照创建自动模式 VPC 网络中的说明创建要使用的新 VPC 网络。
MANAGED_AD_PROJECT_ID 是代管式 Microsoft AD 服务所在的项目 ID。
MANAGED_AD_DOMAIN_NAME 是您要使用的托管式 Microsoft AD 服务的域名。这是您在创建代管式 Microsoft AD 网域时选择的网域名称。
DOMAIN_COMPUTER_ACCOUNT 是您希望在网域中将集群称为的任何名称。
CONSUMER_PROJECT_ID 是包含 Filestore 实例的项目的项目 ID。
CONNECT_MODE 是
DIRECT_PEERING
或PRIVATE_SERVICE_ACCESS
。 如果您指定共享 VPC 作为网络,则还必须指定PRIVATE_SERVICE_ACCESS
作为连接模式。此标志是 VPC 网络对等互连的必需标志,使用托管式 Microsoft AD 时必须设置此标志。RESERVED_IP_RANGE 是 Filestore 实例的 IP 地址范围。如果您指定
connect-mode=PRIVATE_SERVICE_ACCESS
,并且您希望使用预留的 IP 地址范围,则必须指定已分配的地址范围(而不是 CIDR 范围)的名称。请参阅配置预留 IP 地址。我们建议您跳过此标志,以允许 Filestore 自动查找可用的 IP 地址范围并将其分配给实例。
如果不使用托管式 Microsoft AD,请运行与上一步相同的命令来创建 Filestore 实例,并省略
--managed-ad
标志以及 VPC 网络对等的标志,即connect-mode
和reserved-ip-range
。以下命令为例:gcloud beta filestore instances create INSTANCE-ID \ --description="DESCRIPTION" \ --region=LOCATION \ --tier=TIER \ --protocol=PROTOCOL \ --file-share=name="FILE_SHARE_NAME",capacity=CAPACITYTB \ --network=name="VPC_NETWORK" \ --project=CONSUMER_PROJECT_ID
了解 NFSv4.1 中的基于网络的访问权限控制列表 (ACL)。
在 NFSv3 中,仅支持 sys
安全变种。此设置会信任客户端在挂载期间提供的用户 uid
和 gid
。
在 Filestore NFSv4.1 协议中,提供了多种网络 ACL 安全变种或设置:
krb5
使用 Kerberos 票据对客户端进行身份验证,该票据会通过托管式 Microsoft AD Kerberos 服务器进行验证。
krb5i
包括
krb5
提供的身份验证,还使用 Kerberos 对传入和传出实例的所有网络流量运行消息完整性检查。krb5p
包括
krb5
提供的身份验证和krb5i
的消息完整性检查,还使用 Kerberos 对传输中的数据进行加密。
如果您想使用这些选项,则必须进行 Managed Service for Microsoft Active Directory 集成。
如果未指定 Managed Service for Microsoft Active Directory 网域,则仅支持 sys
安全变种。
如需了解详情,请参阅 NFSv4.1 限制。
在 Linux 客户端上装载 Filestore NFSv4.1 实例
以下步骤展示了如何在 Linux 客户端上挂载实例。
使用
sec=sys
进行挂载以获得标准 NFS 权限:sudo mount -vvvv -t nfs4 -o vers=4.1,sec=sys,rw \ FILESTORE-INSTANCE-FQDN:/INSTANCE_SHARE_POINT /MOUNT_POINT
使用
sec=krb5
挂载以进行基于 Kerberos 的身份验证:sudo mount -vvvv -t nfs4 -o vers=4.1,sec=krb5i,rw \ FILESTORE-INSTANCE-FQDN:/INSTANCE_SHARE_POINT /MOUNT_POINT
使用
sec=krb5i
进行挂载,以进行基于 Kerberos 的身份验证和消息完整性检查:sudo mount -vvvv -t nfs4 -o vers=4.1,sec=krb5i,rw \ FILESTORE-INSTANCE-FQDN:/INSTANCE_SHARE_POINT /MOUNT_POINT
使用
sec=krb5p
进行挂载,以实现基于 Kerberos 的身份验证、完整性检查和传输中加密:sudo mount -vvvv -t nfs4 -o vers=4.1,sec=krb5p,rw \ FILESTORE-INSTANCE-FQDN:/INSTANCE_SHARE_POINT /MOUNT_POINT
替换以下内容:
- FILESTORE-INSTANCE-FQDN 是 Filestore 实例所在的完全限定域名。
- INSTANCE_SHARE_POINT 是您要连接的 Filestore 实例的文件共享名称。
- MOUNT_POINT 是您要装载到的装载点或目录名称。
Linux 客户端配置
NFSv4.1 Filestore 实例允许客户端使用各种安全变种执行 NFS 操作。这些变种由实例管理员在 Filestore NFSv4.1 实例的创建过程中或创建后进行更新时,通过网络 ACL 配置。
sys
安全变种使用标准 Unix 身份验证,而 krb5
、krb5i
和 krb5p
变种使用基于 Kerberos 的身份验证。
krb5
、krb5i
和 krb5p
变种要求客户端连接到与 Filestore 实例相同的托管式 Microsoft AD 网域。请完成适用于您环境的以下步骤。
Ubuntu 映像
- 通过 SSH 连接到 Compute Engine 实例。
运行以下命令以加入代管式 Microsoft AD 网域。
运行以下设置命令:
sudo apt-get update \ sudo apt-get -y -qq install adcli realmd sssd sssd-tools packagekit krb5-user \ nfs-common expect retry
当系统提示您输入 Realm 时,请将现有条目替换为 Filestore 实例上使用的托管式 Microsoft AD 网域。输入大写值,然后按箭头键选择确定,再按 Enter 键。
当系统提示输入主机时,请将其留空,然后继续操作。
完成以下任一步骤:
对于主机名长度不超过 15 个字符的虚拟机,请运行以下命令:
sudo realm join -vU JOIN_DOMAIN_USER --automatic-id-mapping=no MANAGED_AD_DOMAIN_NAME
替换以下内容:
- JOIN_DOMAIN_USER 是用于加入网域的用户账号的名称。
- MANAGED_AD_DOMAIN_NAME 是您要使用的托管式 Microsoft AD 服务的域名。
对于主机名长度超过 15 个字符的虚拟机,请运行以下命令:
sudo realm join -vU JOIN_DOMAIN_USER --automatic-id-mapping=no \ --user-principal=host/`hostname -f`@MANAGED_AD_REALM_NAME MANAGED_AD_DOMAIN_NAME
替换以下内容:
- JOIN_DOMAIN_USER 是用于加入网域的用户账号的名称。
- MANAGED_AD_REALM_NAME 是您要使用的托管式 Microsoft AD 服务的领域名称。
- MANAGED_AD_DOMAIN_NAME 是您要使用的托管式 Microsoft AD 服务的域名。
更新 Kerberos 配置。使用所需的领域定义和领域-网域映射更新
/etc/krb5.conf
:[realms] DOMAIN_NAME = { kdc = DOMAIN_NAME default_domain = DOMAIN_NAME } [domain_realm] .domain_name_lowercase = DOMAIN_NAME domain_name_lowercase = DOMAIN_NAME
替换以下内容:
- DOMAIN_NAME 是您要使用的域名,应输入为大写形式。
- domain_name_lowercase 是您要使用的域名,应输入小写形式。
请参阅以下示例:
[realms] FILE.DEMO.LOCAL = { kdc = FILE.DEMO.LOCAL default_domain = FILE.DEMO.LOCAL } [domain_realm] .file.demo.local = FILE.DEMO.LOCAL file.demo.local = FILE.DEMO.LOCAL
运行 rpc-gssd 服务。将以下
No-Strip
属性值添加到/etc/idmapd.conf
内的[General]
部分:[General] No-Strip = both
运行以下命令:
sudo systemctl restart rpc-gssd
Centos 映像
- 通过 SSH 连接到 Compute Engine 实例。
加入托管式 Microsoft AD 网域:
sudo yum update \ sudo yum install -y adcli realmd sssd samba-common-tools krb5-workstation nfs-utils \ bind-utils openldap-clients
完成以下任一步骤:
对于主机名长度小于或等于 15 个字符的虚拟机,请运行以下命令:
sudo realm join -vU JOIN_DOMAIN_USER --automatic-id-mapping=no MANAGED_AD_DOMAIN_NAME
替换以下内容:
- JOIN_DOMAIN_USER 是用于加入网域的用户账号的名称。
- MANAGED_AD_DOMAIN_NAME 是您要使用的托管式 Microsoft AD 服务的域名。
对于主机名长度超过 15 个字符的虚拟机,请运行以下命令:
sudo realm join -vU JOIN_DOMAIN_USER --automatic-id-mapping=no \ --user-principal=host/`hostname -f`@MANAGED_AD_REALM_NAME MANAGED_AD_DOMAIN_NAME
替换以下内容:
- JOIN_DOMAIN_USER 是用于加入网域的用户账号的名称。
- MANAGED_AD_REALM_NAME 是您要使用的托管式 Microsoft AD 服务的领域名称。
- MANAGED_AD_DOMAIN_NAME 是您要使用的托管式 Microsoft AD 服务的域名。
确保 sssd 服务正在运行:
sudo systemctl status sssd
运行 rpc-gssd 服务。将以下代码添加到
/etc/idmapd.conf
内的[General]
部分的No-Strip
属性值下方:[General] No-Strip = both
运行以下命令。此命令有助于确保 NFS 客户端不会从 NFS 服务器主机名中剥离域名。如需了解详情,请参阅 NFS Ganesha 列表归档和 Arch Linux 归档:
sudo systemctl start rpc-gssd
从 Filestore 实例断开与托管式 Microsoft AD 的连接,然后重新连接
Google Cloud 控制台
将托管式 Microsoft AD 与 Filestore 实例断开连接
断开与托管式 Microsoft AD 连接的 Filestore 实例。
在 Google Cloud 控制台中,前往“Filestore 实例”页面。
点击要修改的实例的 ID。
在 NFS 装载点窗格中,点击“协议”下 Directory service name(目录服务名称)旁边的
Disconnect AD domain(断开 AD 网域关联)。在与网域断开连接失败窗口中,阅读提醒,然后点击修改实例。
访问权限控制中的至少一条规则必须映射到具有
sys
挂载安全设置的“管理员”角色,例如 Access=Admin Mount 和sec=
sys。在修改共享设置窗格中,找到访问权限设置为管理员的规则。点击挂载
sec=
...,然后选择sys
将该选项添加到现有设置。点击确定。
点击保存。
在目录服务名称旁边,点击
Disconnect AD domain(断开与 AD 域的连接)。在要断开与网域的连接吗?窗口中的字段中,输入您要断开连接的网域的名称。
点击解除关联。
修改访问规则
刷新页面。请注意,目录服务名称现在已设为无。
点击修改。
在修改共享窗格中,找到为管理员以外的角色(例如编辑者)设置访问权限的任何规则。在规则中,点击挂载
sec=
...,然后选择sys
将其添加到现有设置。点击确定。点击保存。
刷新页面。
规则设置更新。
将托管式 Microsoft AD 重新连接到 Filestore 实例
将 Filestore 实例重新连接到 Managed Microsoft AD。
在 NFS 装载点窗格中,点击“协议”下方“目录服务名称”旁边的
加入 AD 网域。在将此实例加入一个 Active Directory 网域窗口中,选择使用当前项目中的网域,然后在加入 Active Directory 网域菜单中,选择要使用的网域。
在计算机账号名称菜单中,输入一个名称。
点击加入网域。
刷新页面。请注意,目录服务名称已更新为您选择的名称。
点击修改。
在修改共享窗格中,点击所有适用规则中的 Mount
sec=
...,然后移除sys
选择。点击确定。点击保存。
刷新页面。
规则设置更新。