你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 上的证书生命周期管理

Azure 自动化
Azure 事件网格
Azure Key Vault

在网络安全中,设置自动证书续订是维护安全可靠环境的重要组成部分。 未能及时更新或续订证书会使系统暴露在漏洞中。 潜在易受攻击的区域包括:

  • SSL/TLS 证书过期。
  • 可能被入侵的网络。
  • 不安全的敏感数据。
  • 用于企业到企业流程的服务。
  • 损害数字交易的完整性和保密性的品牌声誉损失。

Azure Key Vault 支持集成证书颁发机构 (CA) 颁发的自动证书续订,如 DigiCertGlobalSign 一样。 对于非集成 CA,需要手动方法。

本文通过提供针对来自非集成 CA 的证书定制的自动续订过程来帮助弥合差距。 此过程将新证书无缝存储在 Key Vault 中,有助于提高效率,增强安全性,并帮助与各种 Azure 资源集成以简化部署。

自动续订过程有助于最大限度地减少人为错误并减少服务中断。 当自动化证书续订时,不仅加快了过程,而且降低了手动处理过程中可能发生错误的可能性。 当应用 Key Vault 及其扩展的功能时,可以构建一个高效的自动化流程,帮助优化操作和可靠性。

最初的重点是自动化证书续订,而更广泛的目标是增强流程所有领域的安全性。 这项工作包括指导用户通过 Key Vault 实施最低权限原则 (PoLP) 或类似的访问控制。 同时还强调了对 Key Vault 的可靠日志记录和监视做法的重要性。 本文重点介绍了使用 密钥库 强化整个证书管理生命周期的重要性,并演示了安全优势不限于存储证书。

通过使用 Key Vault 及其自动续订过程,可以不断更新证书。 续订过程有助于所有与 Key Vault 集成的 Azure 服务从最新证书中获益。 本文深入介绍了持续续订和辅助功能如何提高 Azure 服务的整体部署效率和可靠性。

体系结构

以下是对支持该解决方案的基础体系结构的简要概述。

证书生命周期管理体系结构图。

下载此体系结构的 Visio 文件

Azure 环境包括以下平台即服务 (PaaS) 资源:一个 Key Vault,专用于仅存储由同一非集成 CA 颁发的证书,Azure 事件网格系统主题,存储帐户队列和公开事件网格针对的 Webhook Azure 自动化帐户。

此方案假定已经存在一个现有的公钥基础结构 (PKI),由一个 Microsoft Enterprise CA 组成,该 CA 加入到 Microsoft Entra ID 中的一个域。 PKI 和 Active Directory 域都可以驻留在 Azure 或本地,以及必须配置用于证书续订的服务器上。

具有证书以监控续订的虚拟机 (VM) 不需要加入 Active Directory 或 Microsoft Entra ID。 唯一的要求是将 CA 和混合辅助角色(如果位于与 CA 不同的 VM上)连接到 Active Directory。

以下部分提供了自动续订过程的详细信息。

Workflow

此图显示 Azure 生态系统中证书续订的自动化工作流。

Azure 生态系统中证书续订的自动化工作流示意图。

  1. Key Vault 配置:续订过程的初始阶段需要将证书对象存储在 Key Vault 的指定证书部分中。

    虽然不是强制性的,但可以通过在证书上标记收件人的电子邮件地址来设置自定义电子邮件通知。 标记证书有助于确保续订过程完成时及时发出通知。 如果需要多个收件人,请用逗号或分号分隔电子邮件地址。 用于此目的的标记名为 Recipient,其值为指定管理员的一个或多个电子邮件地址。

    使用标记(而不是内置证书通知)时,可以将通知应用到具有指定收件人的特定证书。 内置证书通知不加区分地应用于 Key Vault 中的所有证书,对所有证书使用相同的收件人。

    可以将内置通知与解决方案集成,但使用不同的方法。 虽然内置通知只能通知即将到期的证书,但当证书在内部 CA 上续订以及在 Key Vault 中可用时,标记可以发送通知。

  2. Key Vault 扩展配置:必须为需要使用证书的服务器配备 Key Vault extension,这是一种与 WindowsLinux 系统兼容的通用工具。 支持通过 Azure Arc 集成的 Azure 基础结构即服务 (IaaS) 服务器和本地或其他云服务器。 将 Key Vault 扩展配置为定期轮询 Key Vault 以获取任何更新的证书。 轮询间隔自定义且灵活,因此可以与特定的操作要求保持一致。

  3. 事件网格集成:当证书即将过期时,两个事件网格订阅将从 Key Vault 拦截此重要的生存期事件。

  4. 事件网格触发器:一个事件网格订阅将证书续订信息发送到存储帐户队列。 另一个订阅通过自动化帐户中配置的 Webhook 触发 Runbook 的启动。 如果 Runbook 无法续订证书(例如,如果 CA 不可用),则计划的进程会从那时起重试 Runbook 续订,直到队列清空为止。 此过程有助于使解决方案可靠。

    若要增强解决方案的复原能力,请设置死信位置机制。 它管理消息从事件网格传输到订阅目标、存储队列和 Webhook 期间可能发生的潜在错误。

  5. 存储帐户队列:Runbook 在配置为自动化混合 Runbook 辅助角色的 CA 服务器中启动。 它接收存储帐户队列中的所有消息,其中包含即将过期的证书的名称和托管 Runbook 的密钥保管库。 对于队列中的每个消息,执行以下步骤。

  6. 证书续订:Runbook 中的脚本连接到 Azure,以检索在生成过程中设置的证书的模板名称。 该模板是证书颁发机构的配置组件,用于定义要生成的证书的属性和用途。

    脚本与密钥保管库对接后,会启动证书续订请求。 此请求触发密钥保管库生成证书签名请求 (CSR),应用与生成原始证书相同的模板。 此过程确保续订的证书符合预定义的安全策略。 有关身份验证和授权过程中的安全性的更多信息,请参阅安全部分。

    脚本下载 CSR,并将其提交给 CA。

    CA 基于正确的模板生成一个新的 x509 证书,并将其发送回脚本。 此步骤确保续订的证书符合预定义的安全策略。

  7. 证书合并和密钥库更新:脚本将续订的证书合并回密钥保管库,完成更新过程并从队列中删除消息。 在整个过程中,证书的私钥永远不会从密钥库中提取。

  8. 监视和电子邮件通知:各种 Azure 组件运行的所有操作(例如自动化帐户、密钥保管库、存储帐户队列和事件网格)都会记录在 Azure Monitor 日志工作区中,以启用监视。 证书合并到密钥保管库后,脚本会向管理员发送一封电子邮件,通知他们结果。

  9. 证书检索:服务器上的密钥保管库扩展在此阶段起着重要作用。 它会自动将最新版本的证书从密钥保管库下载到使用证书的服务器的本地存储中。 可以使用密钥保管库扩展配置多个服务器,以从密钥保管库检索同一证书(通配符或具有多个使用者替代名称证书)。

组件

该解决方案使用各种组件来处理 Azure 上的自动证书续订。 以下各节介绍了每个组件及其具体用途。

Key Vault 扩展

密钥保管库扩展在自动化证书续订中起着至关重要的作用,必须安装在需要自动化的服务器上。 有关 Windows 服务器上的安装过程的详细信息,请参阅适用于 Windows 的 Key Vault 扩展。 有关适用于 Linux 服务器的安装步骤的详细信息,请参阅适用于 Linux 的 Key Vault 扩展。 有关已启用 Azure Arc 的服务器的详细信息,请参阅已启用 Arc 的服务器的 Azure Key Vault 扩展

Key Vault 扩展配置参数包括:

  • 密钥保管库名称:包含用于续订的证书的密钥保管库。
  • 证书名称:要续订的证书名称。
  • 证书存储、名称和位置:存储证书的证书存储区。 在 Windows 服务器上,Name 的默认值为 MyLocation 的默认值为 LocalMachine,即计算机的个人证书存储。 在 Linux 服务器上,可以指定文件系统路径,假设默认值为 AzureKeyVault,即密钥保管库的证书存储。
  • linkOnRenewal:一个标志,指示证书是否应在续订时链接到服务器。 如果在 Windows 计算机上设置为 true,则将复制存储中的新证书,并将其链接到旧证书,从而有效地重新绑定证书。 默认值 false,表示需要显式绑定。
  • pollingIntervalInS:密钥保管库扩展检查证书更新的轮询间隔。 默认值为 3600 秒(1 小时)。
  • authenticationSetting:密钥保管库扩展的身份验证设置。 对于 Azure 服务器,可以省略此设置,这意味着 VM 的系统分配托管标识用于密钥保管库。 对于本地服务器,指定设置 msiEndpoint = "http://localhost:40342/metadata/identity",意味着使用与在 Azure Arc 加入期间创建的计算机对象关联的服务主体。

注意

仅在初始设置过程中指定密钥保管库扩展参数。 这有助于确保他们在整个续订过程中不会发生任何变化。

自动化帐户

自动化帐户处理证书续订过程。 需要使用 PowerShell 脚本配置带有 Runbook 的帐户。

此外,还需要创建混合辅助角色组。 将其与 CA 的同一 Active Directory 域(最好是 CA 本身)的 Windows Server 成员关联,以启动 Runbook。

Runbook 必须具有与其关联的 Webhook(从混合 Runbook 辅助角色启动)。 在事件网格系统主题的事件订阅中配置 Webhook URL。

存储帐户队列

存储帐户队列存储消息,其中包含要续订的证书的名称以及包含该证书的密钥保管库。 在事件网格系统主题的事件订阅中配置存储帐户队列。 队列处理将脚本与证书过期通知事件分离的问题。 支持将事件持久化到队列消息中。 这种方法有助于确保证书的续订过程在计划的作业中重复进行,即使在脚本运行过程中出现问题也是如此。

混合 runbook 辅助角色

混合 Runbook 辅助角色在使用 Runbook 方面发挥了重要作用。 需要使用 Azure 混合辅助角色扩展方法进行安装,这是新安装的支持模式。 创建它,并将其与 CA 的同一 Active Directory 域中的 Windows Server 成员相关联(最好是 CA 本身)。

密钥保管库

密钥保管库是证书的安全存储库。 在密钥保管库的事件部分下,将事件网格系统主题与自动化帐户和订阅的 Webhook 相关联。

事件网格

事件网格处理 Azure 中的事件驱动通信。 通过设置系统主题和事件订阅来配置事件网格,以监视相关事件。 相关事件包括证书过期警报、自动化工作流中的触发操作以及在存储帐户队列中发布消息。 使用以下参数配置事件网格系统主题:

  • 源:包含证书的密钥保管库的名称。
  • 源类型:源的类型。 例如,此解决方案的源类型为 Azure Key Vault
  • 事件类型:要监视的事件类型。 例如,此解决方案的事件类型为 Microsoft.KeyVault.CertificateNearExpiry。 当证书即将过期时,将触发此事件。
  • Webhook 订阅:
    • 订阅名称:事件订阅的名称。
    • 终结点类型:要使用的终结点的类型。 例如,此解决方案的终结点类型为 Webhook
    • 终结点:与自动化帐户 Runbook 关联的 Webhook 的 URL。 有关详细信息,请参阅自动化帐户部分。
  • StorageQueue 订阅:
    • 订阅名称:事件订阅的名称。
    • 终结点类型:要使用的终结点的类型。 例如,此解决方案的终结点类型为 StorageQueue
    • 终结点:存储帐户队列。

备选方法

此解决方案使用自动化帐户来协调证书续订过程,并使用混合 Runbook 辅助角色,提供了在本地或其他云中与 CA 集成的灵活性。

另一种方法是使用逻辑应用。 这两种方法的主要区别在于,自动化帐户是 PaaS 服务,而逻辑应用是软件即服务 (SaaS) 解决方案。

逻辑应用的主要优点是它是一项完全托管的服务。 不需要担心底层基础结构。 此外,逻辑应用可以轻松地与外部连接器集成,从而扩展通知可能性的范围,例如与 Microsoft Teams 或 Microsoft 365 互动。

逻辑应用没有类似于混合 Runbook 辅助角色的功能,这导致与 CA 的集成不太灵活。

方案详细信息

每个组织都需要对其证书生命周期进行安全高效的管理。 未能在证书到期前续订证书可能会导致服务中断,并给企业造成巨大损失。

企业通常运营复杂的 IT 基础结构,涉及负责证书生命周期的多个团队。 证书续订过程的手动性质经常会引入错误,并占用宝贵的时间。

此解决方案通过自动执行 Microsoft 证书服务颁发的证书续订来解决这些难题。 该服务广泛用于各种服务器应用程序,例如 Web 服务器、SQL 服务器,并用于加密、不可否认性、签名,并确保在密钥库内及时更新和安全证书存储。 该服务与 Azure 服务器和本地服务器的兼容性支持灵活部署。

可能的用例

此解决方案满足以下各个行业的组织的需求:

  • 使用 Microsoft 证书服务生成服务器证书。
  • 要求在证书续订过程中实现自动化,以加速操作并最大程度地减少错误,这有助于避免业务损失和服务级别协议 (SLA) 冲突。
  • 要求在密钥保管库等存储库中存储安全的证书。

此体系结构可作为跨登陆区域订阅的基本部署方法。

注意事项

这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改进工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

安全性

安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述

在密钥保管库系统中,证书安全地存储为加密机密,并受到 Azure 基于角色的访问控制 (RBAC) 的保护。

在整个证书续订过程中,使用标识的组件包括:

  • 混合 Runbook 辅助角色的系统帐户,它在 VM 的帐户下运行。
  • 密钥保管库扩展,该扩展使用与 VM 关联的托管标识。
  • 自动化帐户,该帐户使用其指定的托管标识。

在证书续期程序中,所有标识都严格执行最低权限原则。

混合 Runbook 辅助角色服务器的系统帐户必须有权在生成新证书的一个或多个证书模板上注册证书。

在包含证书的密钥保管库中,自动化帐户标识必须具有 Key Vault Certificate Officer 角色。 此外,需要证书访问权限的服务器必须在密钥保管库的证书存储中被授予 GetList 权限。

在存储帐户队列中,自动化帐户标识必须具有 Storage Queue Data ContributorReader and Data AccessReader 角色。

在密钥保管库扩展部署在 Azure VM 上的方案下,将通过 VM 的托管标识进行身份验证。 但是,在已启用 Azure Arc 的服务器上部署时,将使用服务主体处理身份验证。 托管标识和服务主体都必须在存储证书的密钥保管库中分配密钥保管库机密用户角色。 必须使用机密角色,因为证书以机密的形式存储在密钥保管库中。

成本优化

成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅设计评审检查列表进行成本优化

该解决方案使用 Azure PaaS 解决方案,该解决方案在即用即付框架下运行,从而优化了成本。 费用取决于需要续订的证书数以及配备密钥保管库扩展的服务器数,从而降低了开销。

密钥保管库扩展和混合 Runbook 辅助角色产生的费用取决于安装选择和轮询间隔。 事件网格的成本与密钥保管库生成的事件量相对应。 同时,自动化帐户的成本与使用的 Runbook 数量相关。

密钥库的成本取决于各种因素,包括所选 SKU(标准或高级)、存储证书的数量以及对证书执行的操作频率。

与针对密钥保管库讨论的配置类似的注意事项同样适用于存储帐户。 在此方案中,具有本地冗余存储的标准 SKU 足以满足存储帐户的需要。 通常,存储帐户队列的成本最低。

若要估计此解决方案的实现成本,请使用 Azure 定价计算器并输入本文所述的服务。

卓越运营

卓越运营涵盖了部署应用程序并使其在生产环境中保持运行的运营流程。 有关详细信息,请参阅设计原则

自动证书续订程序通过适用于密钥库中所有证书的标准化过程安全地存储证书。

与事件网格集成会触发补充操作,例如通知 Microsoft Teams 或 Microsoft 365,并简化续订过程。 此集成大大缩短了证书续订时间,降低了可能导致业务中断和违反 SLA 的错误的可能性。

此外,与 Azure Monitor、Microsoft Sentinel、Microsoft Copilot for Security 和 Azure 安全中心无缝集成有助于持续监视证书续订过程。 它支持异常情况检测,并帮助确保维护可靠的安全措施。

部署此方案

选择以下按钮,以部署本文中所述的环境。 部署需要大约两分钟才能完成,并创建一个密钥保管库、一个配置有两个订阅的事件网格系统主题、包含 certlc 队列的存储帐户和包含 runbook 的自动化帐户和链接到事件网格的 webhook。

部署到 Azure

有关部署所需参数的详细信息,请参阅代码示例门户。

重要

可以部署完整的实验室环境来演示整个自动证书续订工作流。 使用代码示例部署以下资源:

  • 域控制器 VM 中的 Active Directory 域服务 (AD DS)。
  • CA VM 中的 Active Directory 证书服务 (AD CS) 已加入域,配置了模板 WebServerShort,用于注册要续订的证书。
  • 安装在 CA 的同一 VM 上用于发送电子邮件通知的 Windows SMTP Server。 还会安装 MailViewer,以验证发送的电子邮件通知。
  • 在域控制器的 VM 上安装的 KeyVault 扩展,用于从密钥保管库扩展检索续订的证书。

部署到 Azure

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

Azure Key Vault
适用于 Windows 的 Azure Key Vault 扩展
适用于 Linux 的 Azure Key Vault 扩展
什么是 Azure 自动化?
Azure 自动化混合 Runbook 辅助角色
Azure 事件网格