关于 NFSv4.1 协议

以下指南介绍了 NFSv4.1 协议。

Filestore 为在以下服务层级中创建的实例提供 NFSv4.1 协议支持:

  • 可用区级
  • 区域
  • 企业

此功能可与 Microsoft Active Directory 托管服务(简称“Microsoft AD 托管服务”)集成,以支持需要客户端和服务器身份验证、消息数据完整性检查和传输中数据加密的工作负载,这些功能之前在 Filestore 中不可用。

支持使用 LDAP 和 Kerberos 进行身份验证,并包含以下安全风格(设置):

  • 客户端和服务器身份验证 (krb5)。
  • 消息完整性检查 (krb5i)。包括之前设置的功能。
  • 传输中的数据加密 (krb5p)。包含之前设置的功能。

Microsoft AD 托管服务是唯一完全托管的 Google Cloud 解决方案,可同时支持 LDAP 和 Kerberos,这是 NFSv4.1 协议及其安全和隐私优势的要求。虽然不需要与 Microsoft AD 托管服务 集成,但强烈建议您这样做,以便获得最佳 Google Cloud 用户体验,从而管理用户账号以及不断变化的群组和权限。

您应当使用 NFSv4.1 吗?

许多企业组织都依赖旧版系统来执行关键业务运营。许多此类系统都需要对网络文件存储进行身份验证和传输中加密。NFSv3 在设计时并未考虑身份验证。Filestore 的 NFSv4.1 协议与 Microsoft AD 托管服务的集成现在可满足这一关键用户要求。

如需详细了解 NFSv4.1 的优势,请参阅关于支持的协议。

了解 NFSv4.1 中的基于网络的访问权限控制列表 (ACL)。

在 NFSv3 中,仅支持 sys 安全风格。此设置信任装载期间客户端提供的用户 uid 和 gid。

在 Filestore NFSv4.1 协议中,有多种网络 ACL 安全类别或设置可供选择:

  • krb5

    使用 Kerberos 票据对客户端进行身份验证,该票据会针对 Microsoft AD 托管服务 Kerberos 服务器进行验证。

  • krb5i

    包括 krb5 提供的身份验证,还使用 Kerberos 对进出实例的所有网络流量运行消息完整性检查。

  • krb5p

    包括 krb5 提供的身份验证和 krb5i 的消息完整性检查,还使用 Kerberos 进行传输中的数据加密。

如果您想利用这些选项,则必须集成 Microsoft Active Directory 托管服务。如需了解详情,请参阅使用 Microsoft AD 托管服务 创建 Filestore 实例。

如果未指定 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=krb5,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-FQ
    DN:/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 映像

  1. 通过 SSH 连接到 Compute Engine 实例。
  2. 运行以下命令以加入 Microsoft AD 托管服务网域。

    1. 运行以下设置命令:

      sudo apt-get update \
      sudo apt-get -y -qq install adcli realmd sssd sssd-tools packagekit krb5-user \ nfs-common expect retry
      
    2. 当系统提示您输入 realm 时,请将现有条目替换为 Filestore 实例上使用的 Microsoft AD 托管服务网域。以大写形式输入值,然后按箭头键选择确定,再按 Enter。

    3. 当系统提示输入主机时,请将其留空并继续。

    4. 完成以下任一步骤:

      • 对于主机名长度不超过 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 托管服务的 realm 名称。
        • MANAGED_AD_DOMAIN_NAME 是您要使用的 Microsoft AD 托管服务的域名。
  3. 更新 Kerberos 配置。使用所需的 realm 定义和 realm-domain 映射更新 /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
    
  4. 运行 rpc-gssd 服务。将以下 No-Strip 属性值添加到 /etc/idmapd.conf 内的 [General] 部分:

     [General]
     No-Strip = both
    
  5. 运行以下命令:

    sudo systemctl restart rpc-gssd
    

Centos 映像

  1. 通过 SSH 连接到 Compute Engine 实例。
  2. 加入 Microsoft AD 托管服务网域:

    sudo yum update \
    sudo yum install -y adcli realmd sssd samba-common-tools krb5-workstation nfs-utils \ bind-utils openldap-clients
    
  3. 完成以下任一步骤:

    • 对于主机名长度小于或等于 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 托管服务的 realm 名称。
      • MANAGED_AD_DOMAIN_NAME 是您要使用的 Microsoft AD 托管服务的域名。
  4. 确保 sssd 服务正在运行:

    sudo systemctl status sssd
    
  5. 运行 rpc-gssd 服务。在 /etc/idmapd.conf 内的 [General] 部分中,将以下内容添加到 No-Strip 属性值下方:

    [General]
    No-Strip = both
    
  6. 运行以下命令。此命令有助于确保 NFS 客户端不会从 NFS 服务器主机名中剥离域名。如需了解详情,请参阅 NFS Ganesha 列表归档和 Arch Linux 归档:

    sudo systemctl start rpc-gssd
    

后续步骤