保护托管和暂留的安全

暂留存储是 Windows Server AppFabric 体系结构的重要部分。此存储支持 Windows Workflow Foundation (WF) 实例在通过各种执行状态时的持久性。您可以通过使用 AppFabric 中的管理工具来操作暂留的工作流服务实例。您必须向运行管理工具的 AppFabric 用户,以及运行的应用程序提供对暂留存储的权限,以在此数据存储中读取和写入数据。您还必须同时控制对管理作用域级别和应用程序作用域级别的暂留存储的访问权限。

一个重要的安全注意事项是托管应用程序的情况。应用程序隔离可以保护数据,防止其他应用程序查看或访问。此外,为资源的下游访问控制应用程序的标识是 AppFabric 安全模型的重要部分。此标识会影响应用程序在尝试访问暂留存储时使用的安全主体。

托管和暂留都在应用程序和管理作用域中,必须在每个区域中对两者进行不同的安全保护。特定权限通过添加到各安全组而指定。应用程序的安全作用域影响应用程序在运行时所具有的权限,并映射到应用程序服务器用户概念角色。管理安全作用域影响管理员和系统服务可执行的工具和相关操作。这些权限映射到应用程序服务器管理员和应用程序服务器操作员概念角色。

保护暂留数据的安全

当暂留某个服务的实例时,其系统状态保存在暂留存储中。应用程序通常收集并传输个人身份信息或其他保密数据。当服务被暂留且应用程序状态中包含该数据时,该数据保存在暂留存储中。多个服务器、站点和应用程序可以共享一个暂留存储。根据设计,暂留数据在共享一个存储的各服务器和站点上进行聚合,以便更轻松地管理大环境中某个服务潜在包含的成千上万个实例的活动状态。这允许服务的实例在一个 AppFabric 服务器上运行时被暂留,然后继续到另一个服务器(如果负载平衡条件要求)。

当数据存储在暂留存储中时,AS_Administrators 数据库角色的所有成员,以及 SQL Server sysadmin 和 dbo 角色的所有成员都可看到该数据。由于暂留数据易被无意或有意地暴露,因此,您必须通过正确地管理权限来降低风险。

您可以使用以下方式来保护暂留存储中数据的安全:

  • 使用其他暂留存储。 您可以在同一个服务器或其他服务器上创建和配置一个备用的暂留存储,方法是:使用 AppFabric cmdlet 创建该存储,使用“AppFabric 暂留数据库配置”页配置该存储。然后,您可以将某些应用程序配置为只使用该存储。这将为特定的应用程序指定一个其他任何应用程序都无法访问的专用暂留数据存储。

  • 将暂留和监控存储分隔成两个单独的存储。 默认情况下,安装过程中将在 DefaultApplicationServerExtensions 存储中创建暂留存储和监控存储的表和实体。您可以将一个存储专用于暂留,并将另一个专用于监控。这样做可以对管理和应用程序作用域中的应用程序与用户进行分隔,使其不再对一个双存储具有访问权限,而对暂留和监控的所有表都具有访问权限。

  • 使用 Windows 组和 SQL Server 角色。 对 SQL Server 暂留存储的访问由 SQL Server 数据库角色实现。在实例存储的初始化过程中,管理员可以将 Windows 组插入到实例存储用户、实例存储读者和实例存储管理员 SQL 角色中。有关使用 Windows 组和 SQL Server 角色保护暂留存储中数据安全的详细信息,请参阅暂留存储的安全配置

  • 使用暂留功能。 您可以使用由 AppFabric 添加到 IIS Manager 中的扩展,来为特定的工作流服务、应用程序中的所有工作流服务、Web 站点中的所有应用程序,或服务器上的所有 Web 站点启用和禁用暂留功能。您可以在较高的级别定义暂留策略,并使 IIS 和 WAS 层次结构中所有较低的级别继承该策略设置。

  • 使用其他应用程序池标识。 通过使用 IIS 应用程序池的其他标识,您可以为整个暂留存储,或其中的单个实体限制或扩展 SQL Server 权限。这是在 IIS 和 SQL Server 级别执行的一项严格的安全技术,AppFabric 工具不直接支持这一技术。

保护托管的安全

使用进程隔离来将高权限的 AppFabric 管理作用域服务(如 事件收集服务 和 Workflow Management service)与低权限的应用程序作用域应用程序工作进程分隔开来。AppFabric 服务在管理作用域中运行,并具有对其各自的监控存储和暂留存储的完全访问权限。所有应用程序工作进程和用户都在应用程序作用域中(通常在应用程序池标识的上下文中)运行。

应用程序作用域上的进一步的托管隔离可以使您看到更详细的安全情况。应用程序包含全部在同一进程中运行的一个或多个 .NET Framework 服务。为了保护这些 .NET Framework 服务不会相互干扰,它们可在不同 AppDomain 的上下文中执行。.NET Framework 进程包含一个或多个 .NET Framework AppDomain,每个 AppDomain 都是一个单独的环境,应用程序在该环境中执行。在 IIS 应用程序池中,可以有一个或多个同时运行的应用程序(如果将它们配置为共享一个应用程序池)。因此,AppDomains 是一个实施执行隔离的轻型方法,无需使用其所有的资源来创建另一个进程的开销。

如果需要隔离程度更深的托管解决方案,请将每个应用程序配置为使用其自已的标识运行其自己的应用程序池。这是在应用程序访问暂留存储时授予其不同标识的一个方法。IIS 在运行时将所有这些标识都置于 IIS_IUSRS Windows 安全组中。从安全的角度来看,在单独的进程空间中运行几乎完全等同于在单独的应用程序域中运行,因为其他任何应用程序都无法访问给定应用程序的代码或数据。请注意,随着其他进程的加入,其他操作系统资源和环境的开销会切换到处理器上,因为每个进程都在 CPU 中占据着自己的一部分。

  2011-12-05