Azure Service Fabric 安全性的最佳做法

更多信息请参见Service Fabric安全检查表

在Azure上部署应用程序是快速、简单且经济高效的。 在将云应用部署到生产环境之前,请先查阅这份实现安全集群的关键和推荐最佳实践清单。

Azure Service Fabric 是一个分布式系统平台,可用于轻松打包、部署和管理可缩放且可靠的微服务。 Service Fabric 还解决了开发和管理云应用程序中的重大难题。 开发人员和管理员不仅可以避免复杂的基础结构问题,而且可以专注于实现可缩放、可靠且可管理的要求苛刻的任务关键型工作负荷。

对于每项最佳实践,本文将说明:

  • 最佳做法是什么。
  • 为什么要实施最佳实践。
  • 如果未遵照最佳做法,会有什么样的后果。
  • 如何学会遵照最佳做法。

请使用以下 Azure Service Fabric 安全最佳实践:

  • 使用Azure 资源管理器模板和 Service Fabric PowerShell 模块创建安全群集。
  • 使用 X.509 证书。
  • 配置安全策略。
  • 实现 Reliable Actors 安全配置。
  • 为 Azure Service Fabric 配置 TLS。
  • 将网络隔离和安全性与 Azure Service Fabric 配合使用。
  • 为安全性配置Azure 密钥保管库。
  • 将用户分配到角色。
  • 在Service Fabric集群中托管不受信任的应用程序。

保护群集的最佳做法

始终使用安全群集:

  • 使用证书实现群集安全性。
  • 使用 Microsoft Entra ID 提供客户端访问权限(管理员和只读)。

使用自动部署:

  • 使用脚本生成、部署和滚动更新机密。
  • 将机密存储在 Azure 密钥保管库中,并使用 Microsoft Entra ID 进行所有其他客户端访问。
  • 要求人类访问机密时进行身份验证。

另外,请考虑以下配置选项:

  • 使用Azure网络安全组(NSG)创建外围网络(也称为非军事区域、外围网络和筛选子网)。
  • 通过中转服务器上的远程桌面连接来访问集群的虚拟机(VM)或管理您的集群。

保护你的集群,防止未经授权的用户连接,尤其是在集群运行于生产环境时。 尽管可以创建不安全群集,但当群集向公共 Internet 公开管理终结点时,匿名用户就可以与它建立连接。

使用各种技术实现群集安全性的方案有三种:

  • 节点到节点安全性:此方案可保护群集中 VM 与计算机之间的通信。 这种安全方式确保只有被授权加入集群的计算机才能在集群中托管应用程序和服务。 在此方案中,在 Azure 上运行的群集或 Windows 上运行的独立群集可以使用 Windows Server 计算机的证书安全Windows 安全
  • 客户端到节点安全性:此方案可保护 Service Fabric 客户端与群集中各个节点之间的通信。
  • 基于 Service Fabric 角色访问控制(Service Fabric RBAC):此方案为每个访问集群的管理员和用户客户端角色使用单独的身份(证书、Microsoft Entra ID等)。 这些角色标识是在创建群集时指定。

注意事项

Azure 集群的安全建议:使用 Microsoft Entra 安全性对客户端和证书进行身份验证,确保节点之间的安全性。

若要配置 Windows 独立群集,请参阅 Windows 独立群集的配置设置

使用Azure 资源管理器模板和 Service Fabric PowerShell 模块创建安全群集。 关于如何用 Azure 资源管理器 模板创建安全的 Service Fabric 集群的逐步说明,请参见“创建 Service Fabric 集群”。

使用Azure 资源管理器模板:

  • 使用模板来自定义群集,并配置托管存储以用于 VM 虚拟硬盘(VHD)。
  • 使用此模板简化配置管理和审核,推动对资源组的更改。

将群集配置视为代码:

  • 仔细检查部署配置。
  • 不要用隐式命令直接修改资源。

你可以自动化Service Fabric应用生命周期的许多方面。 Service Fabric PowerShell 模块自动执行用于部署、升级、删除和测试 Azure Service Fabric 应用程序的常见任务。 此外,还提供了托管 API 和 HTTP API,可用于管理应用程序。

使用 X.509 证书

最佳实践:始终使用 X.509 证书或 Windows 安全性保护群集。 详细说明:仅在创建集群时配置安全。 创建集群后你不能开启安全功能。

若要指定群集证书,请将 ClusterCredentialType 属性的值设置为 X509。 若要为外部连接指定服务器证书,请将 ServerCredentialType 属性的值设置为 X509。

此外,还请遵照以下做法:

  • 使用正确配置的 Windows Server 证书服务为生产群集创建证书。 也可以从核准证书颁发机构 (CA) 获取证书。
  • 如果你是用 MakeCert.exe 类似工具创建的证书,千万不要为生产集群使用临时或测试证书。
  • 对测试群集使用自签名证书,但不要对生产群集使用此类证书。

如果集群不安全,任何人都可以匿名连接到集群并执行管理操作。 因此,始终使用 X.509 证书或Windows security来保护生产群集。

若要详细了解如何使用 X.509 证书,请参阅 为 Service Fabric 群集添加或删除证书

配置安全性策略

Service Fabric 还负责保护应用程序使用的资源。 应用部署时,Service Fabric 会将文件、目录和证书等资源存储在用户账户下。 借助此功能,即使在共用托管环境中,也可使运行的应用程序彼此之间更安全。

  • 使用Active Directory 域组或用户:在Active Directory 用户或组帐户的凭据下运行服务。 请确保在域中使用本地Active Directory,而不是Microsoft Entra ID。 使用授予域用户或组的权限访问域中的其他资源。 例如,文件共享等资源。

  • 为 HTTP 和 HTTPS 终结点分配安全access策略:当服务清单使用 HTTP 声明终结点资源时,指定 SecurityAccessPolicy 属性以将 RunAs 策略应用于服务。 分配给 HTTP 终结点的端口是根据服务运行所用的 RunAs 用户帐户正确设定访问控制列表的。 如果策略未设置,http.sys 无法访问服务,并且客户端的调用可能失败。

若要了解如何在 Service Fabric 群集中使用安全策略,请参阅配置应用程序的安全策略

实现 Reliable Actors 安全配置

Service Fabric Reliable Actors 是一种基于演员设计模式的实现。 与所有软件设计模式一样,决定是否使用特定模式时需要考虑,此模式是否适合解决软件问题。

一般来说,使用 actor 设计模式可以帮助建模解决方案,以解决以下软件问题或安全情境:

  • 问题空间包含大量(几千或更多)小型、独立的状态和逻辑单元。
  • 您正在处理不需要与外部组件进行大量交互的单线程对象,包括在一组参与者当中查询状态。
  • 执行组件实例不会发出 I/O 操作指令阻止遇到不可预测延迟的调用方。

在 Service Fabric 中,Reliable Actors 应用程序框架实现了参与者。 此框架以执行组件模式为依据,在 Service Fabric Reliable Services 的基础之上构建而成。 你编写的每个可靠参与者服务都以分区的有状态可靠服务形式运行。

每个参与者都是某种参与者类型的实例,正如 .NET 对象是某种 .NET 类型的实例一样。 例如,实现计算器功能的 演员类型 可以将该类型的多个角色分布在集群的不同节点上。 参与者标识符唯一标识每个分布式参与者。

使用 复制器安全配置 来保护复制使用的通信通道。 此配置可阻止服务相互窥探复制流量,并确保可用性很高的数据安全。 默认情况下,空的安全配置节会影响复制安全。

复制器配置负责使演员状态提供者状态高度可靠。

为 Azure Service Fabric 配置 TLS

服务器身份验证流程向管理客户端验证群集管理终结点。 然后,管理客户端确定它在与真正的群集通信。 该证书还为HTTPS管理API和基于HTTPS的Service Fabric Explorer提供TLS。 您需要为您的群集获取一个自定义域名。 从证书颁发机构请求证书时,证书的使用者名称必须与用于群集的自定义域名匹配。

要为应用程序配置TLS,首先获取由CA签署的SSL/TLS证书。 CA 是受信任的第三方,负责颁发证书,以提高 TLS 安全性。 如果你还没有SSL/TLS证书,建议从销售SSL/TLS证书的公司申请。

证书必须满足Azure中 SSL/TLS 证书的以下要求:

  • 证书必须包含私钥。

  • 创建密钥交换证书,并将其导出为个人信息交换(.pfx)文件。

  • 证书的主题名称必须与访问云服务所使用的域名相匹配。

    • 获取自定义域名以访问您的云服务。
    • 向 CA 请求证书,其使用者名称与服务的自定义域名匹配。 例如,如果您的自定义域名为 contoso.com,则您CA的证书应具有主题名 .contoso.comwww.contoso.com

    注意事项

    你无法从CA获取cloudapp.net域名的SSL/TLS证书。

  • 证书至少必须使用 2,048 位加密。

HTTP 协议不安全,容易遭受窃听攻击。 网页浏览器通过HTTP传输的数据以明文形式发送给网页服务器或其他端点之间。 攻击者可以拦截并查看通过HTTP发送的敏感数据,如信用卡信息和账户登录。 当浏览器通过HTTPS发送或发布数据时,SSL会加密敏感信息,防止其被拦截。

若要了解有关使用 SSL/TLS 证书的详细信息,请参阅 在 Azure

将网络隔离和安全性与 Azure Service Fabric 配合使用

最佳做法:使用网络隔离设置安全群集。 详细说明:使用 Azure 资源管理器 模板搭建一个三节点类型的安全集群。 使用此模板和网络安全组控制入站和出站网络流量。

该模板为每个虚拟机规模集提供NSG,并控制该集的进出流量。 规则默认允许系统服务和模板中指定的应用端口所需的所有流量。 请查看这些规则,并根据需要进行任意更改,包括为应用程序添加新规则。

有关详细信息,请参阅 Azure Service Fabric 的常见网络场景

为安全性设置Azure 密钥保管库

最佳实践:使用 Azure 密钥保管库 来管理 Service Fabric 群集中的证书。 详细信息:Service Fabric 使用 X.509 证书来保护群集并提供应用程序安全功能。 使用 Azure 密钥保管库 管理 Azure 中 Service Fabric 集群的证书。 创建群集的Azure资源提供程序从key vault拉取证书。 当 Azure 部署集群时,提供商会在虚拟机上安装证书。

证书关系存在于 Azure 密钥保管库、Service Fabric 群集和使用证书的资源提供程序之间。 当Azure创建集群时,它会将证书关系的信息存储在密钥保险库中。

要设置密钥保管库,有两个基本步骤:

  1. 专门为你的密钥保管库创建资源组。

    将密钥保管库置于单独的资源组中。 此举有助于防止 Azure 移除其他资源组(如存储、计算组或包含你集群的组)时丢失你的密钥和秘密。 包含你密钥库的资源组必须与使用该密钥的集群处于同一区域。

  2. 在新资源组中创建密钥保管库。

    为部署启用密钥保管库。 然后,计算资源提供程序可以从保管库获取证书,并将证书安装在 VM 实例上。

若要详细了解如何设置key vault,请参阅 什么是 Azure 密钥保管库?

将用户分配到角色

最佳做法:将用户分配到 Service Fabric 支持的角色。 细节:在创建代表集群的应用程序后,将用户分配为只读和管理员角色。 使用Azure门户来分配这些角色。

注意事项

有关在 Service Fabric 中使用角色的详细信息,请参阅 Service Fabric 客户端的基于角色的访问控制

Azure Service Fabric 支持两种访问控制类型,适用于连接到 Service Fabric 集群的客户端:管理员和用户。 群集管理员可以使用访问控制来限制不同用户组对特定群集操作的访问权限。 访问控制使得群集更安全。

在Service Fabric集群中托管不可信应用的考虑

参见在Service Fabric集群中托管不受信任的应用程序

后续步骤