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

Azure 上的证书生命周期管理

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

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

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

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

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

自动续订过程可最大限度地减少人为错误并减少服务中断。 自动续订证书时,它会加速续订过程,并减少在手动处理过程中可能发生的错误的可能性。 当使用 Key Vault 及其扩展的功能时,可以构建一个高效的自动化流程,以优化操作并提高可靠性。

自动证书续订是初始的重点,但更广泛的目标是提高流程所有领域的安全性。 这项工作包括如何使用 Key Vault 实现最低特权或类似访问控制的原则。 同时还强调了对 Key Vault 的可靠日志记录和监视做法的重要性。 本文重点介绍了使用 Key Vault 来加强整个证书管理生命周期的重要性,并演示了安全优势不仅限于存储证书。

可以使用 Key Vault 及其自动续订流程来持续更新证书。 自动续订在部署过程中起着重要作用,可帮助与 Key Vault 集成的 Azure 服务从最新证书中受益。 本文深入介绍了持续续订和辅助功能如何提高 Azure 服务的整体部署效率和可靠性。

体系结构

下图概述了支持此解决方案的基础体系结构。

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

下载此体系结构的 Visio 文件

Azure 环境包括以下平台即服务(PaaS)资源:

  • 专用于存储仅由同一非集成 CA 颁发的证书的密钥保管库

  • Azure 事件网格系统主题

  • 存储帐户队列

  • 公开事件网格目标 Webhook 的 Azure 自动化帐户

为了监视过期和过期证书的进程和状态,Log Analytics 会存储数据,工作区以表格仪表板和图形仪表板的形式显示这些数据。

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

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

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

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

工作流程

以下工作流与上图相对应:

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

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

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

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

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

    注意

    Key Vault 扩展在 Linux RedHat 和 CentOS 上不可用。 若要将解决方案扩展到这些系统,请计划 script_for_not_supported_ARC_on_Linux_distro 定期检查 Key Vault 的证书更新并将其应用于服务器的脚本。 该脚本可以在 Azure 本机 VM(IaaS)和与 Azure Arc 集成的本地服务器上运行。

  3. 事件网格集成: 当证书即将过期时,两个事件网格订阅会截获密钥保管库中这一重要生存期事件。

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

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

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

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

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

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

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

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

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

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

    对于无法安装 Key Vault 扩展的 Linux 分发版,请计划 script_for_not_supported_ARC_on_Linux_distro 脚本以实现与扩展相同的功能。

组件

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

Key Vault 扩展

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

Key Vault 扩展配置参数包括:

  • Key Vault 名称: 包含用于续订的证书的密钥保管库。

  • 证书名称: 要续订的证书的名称。

  • 证书存储、名称和位置: 存储证书的证书存储区。 在 Windows 服务器上,名称的默认值为My“位置LocalMachine”,即计算机的个人证书存储。 在 Linux 服务器上,可以指定文件系统路径,假设默认值为 AzureKeyVault,即密钥保管库的证书存储。

  • linkOnRenewal: 一个标志,指示证书是否应在续订时链接到服务器。 如果它设置为 true Windows 计算机上,它将复制存储中的新证书并将其链接到旧证书,从而有效地重新绑定证书。 默认值为 false,因此需要显式绑定。

  • pollingIntervalInS: 此值指示 Key Vault 扩展检查证书更新的轮询间隔。 默认值为 3600 秒(1 小时)。

  • authenticationSetting: Key Vault 扩展的身份验证设置。 对于 Azure 服务器,可以省略此设置,因此 VM 的系统分配托管标识用于密钥保管库。 对于本地服务器,请指定设置 msiEndpoint = "http://localhost:40342/metadata/identity" ,以便使用与在 Azure Arc 载入过程中创建的计算机对象关联的服务主体。

注意

仅在初始设置过程中指定 Key Vault 扩展参数。 此方法可确保它们在整个续订过程中不会进行任何更改。

自动化帐户

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

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

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

存储帐户队列

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

混合 Runbook 辅助角色

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

密钥保管库

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

事件网格

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

  • 源: 包含证书的密钥保管库的名称。

  • 源类型: 源的类型。 例如,此解决方案的源类型为 Azure Key Vault

  • 事件类型: 要监视的事件类型。 例如,此解决方案的事件类型为 Microsoft.KeyVault.CertificateNearExpiry。 当证书即将过期时,将触发此事件。

  • Webhook 订阅:

    • 订阅名称: 事件订阅的名称。

    • 终结点类型: 要使用的终结点的类型。 例如,此解决方案的终结点类型为 Webhook

    • 端点: 与自动化帐户 Runbook 关联的 Webhook 的 URL。 有关详细信息,请参阅 “自动化帐户 ”部分。

  • StorageQueue 的订阅:

    • 订阅名称: 事件订阅的名称。

    • 终结点类型: 要使用的终结点的类型。 例如,此解决方案的终结点类型为 StorageQueue

    • 端点: 存储帐户队列。

Log Analytics 工作区和 Azure 工作簿

此解决方案使用 Log Analytics 工作区和 Azure 工作簿来增强 Key Vault 中存储的证书状态的监视和可视化效果。 这些组件在保持对证书运行状况的可见性方面起着重要作用:

  • Log Analytics 工作区 收集和存储有关证书状态的数据。 它标识证书是过期、即将过期还是仍然有效。

  • Azure 工作簿 从 Log Analytics 工作区检索数据,并将其呈现在具有视觉表示形式的仪表板中,如饼图和详细表。 它将证书分类为 “未过期 ”(绿色)、 即将过期 (黄色)和 “已过期 ”(红色)。

以下组件检索并显示工作簿中的证书信息:

  • 数据引入 Runbook 直接从 Azure 运行,不需要混合辅助角色的上下文。 它从 Key Vault 检索证书数据,并将其发送到 Log Analytics 工作区中定义的自定义表。 Runbook 按计划的节奏运行。

  • 工作簿查询自定义表中的数据,并将其显示在饼图和详细表中。 它根据证书的过期状态突出显示证书。

通过集成这些组件,解决方案构建了更全面的证书生命周期管理方法。

显示证书状态仪表板的屏幕截图。

备选方法

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

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

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

逻辑应用没有类似于混合 Runbook 辅助角色的功能,这会导致与 CA 的集成不太灵活,因此自动化帐户是首选方法。

方案详细信息

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

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

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

可能的用例

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

  • 使用 Microsoft 证书服务生成服务器证书。

  • 要求在证书续订过程中实现自动化,以加速操作并最大程度地减少错误,这有助于避免业务损失和服务级别协议 (SLA) 冲突。

  • 要求在密钥保管库等存储库中存储安全的证书。

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

注意事项

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

安全性

安全性提供针对故意攻击和滥用宝贵数据和系统的保证。 有关详细信息,请参阅 安全设计评审清单

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

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

  • 混合 Runbook 辅助角色的系统帐户,它在 VM 的帐户下运行。

  • Key Vault 扩展,该扩展使用与 VM 关联的托管标识。

  • 自动化帐户,该帐户使用其指定的托管标识。

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

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

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

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

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

成本优化

成本优化侧重于减少不必要的开支和提高运营效率的方法。 有关详细信息,请参阅 成本优化的设计评审清单

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

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

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

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

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

卓越运营

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

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

与事件网格集成会触发补充操作,例如通知 Microsoft Teams 或 Microsoft 365,并简化续订过程。 此集成可显著减少证书续订时间,并缓解可能导致业务中断和 SLA 冲突的错误的可能性。

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

部署此方案

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

部署到 Azure

可以在 代码示例 门户中找到有关部署所需的参数的详细信息。

重要

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

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

部署到 Azure

作者

Microsoft维护本文。 以下参与者撰写了本文。

主要作者:

若要查看非公共LinkedIn配置文件,请登录到LinkedIn。

后续步骤