保护机密的最佳做法
本文介绍了如何保护机密并降低未经授权而访问的风险。 请按照本文中的指导操作,帮助确保不会在代码、GitHub 存储库、日志、持续集成/持续部署 (CI/CD) 管道等中存储敏感信息(如凭据)。 本文中的指导是根据各个服务和 Microsoft 云安全基准 (MCSB) 中的建议编制的。
一般最佳实践
在当今的数字环境中,保护敏感信息(如应用程序凭据和机密)至关重要。 违反该规则可能导致严重后果,包括数据丢失、财务处罚和声誉损害。 实施全面的机密管理策略对于缓解这些风险至关重要。
进行审核以识别机密
你需要知道机密所在的位置,才能保护机密。 对系统和应用程序进行全面审核有助于识别需要保护的所有敏感信息。 这包括密码、API 密钥、连接字符串和其他凭据。 定期审核可确保将新机密纳入考虑范围,并正确管理现有机密。
请务必注意,即使是动态创建的机密(这种机密可能是临时的,如 OAuth 令牌)也仍需像长期机密一样严格保护。
避免对机密进行硬编码
将机密直接嵌入代码或配置文件会带来严重的安全风险。 如果代码库泄露,机密也将泄露。 请改用环境变量或配置管理工具,避免让机密出现在源代码中。 这种做法可最大限度地降低意外泄露的风险,并简化更新机密的过程。
此外,通过将机密检索集成到自动化部署管道并使用机密注入模式,可以防止在日志或版本控制中意外泄露机密,从而进一步增强部署过程的安全性。
使用安全密钥存储
利用安全密钥存储,可确保将机密存储在安全的加密位置。 Azure 密钥保管库和 Azure 托管 HSM 等服务将提供可靠的安全功能,包括访问控制、日志记录和自动轮换。 此方法可集中管理机密,并降低未经授权而访问的风险。
实现机密扫描工具
通过定期扫描代码库中嵌入的机密,可防止意外泄露。 GitHub 机密扫描功能等工具可以自动检测并提醒你存储库中找到的任何机密。 通过将这些工具集成到 CI/CD 管道,可确保持续监视。 必须将这些扫描工具发现的机密视为已泄露,这意味着应立即撤销和替换机密,以保持完好的安全态势。
利用托管标识
Azure 中的托管标识为应用程序提供了一种向 Azure 服务进行身份验证的安全方式,而无需在代码中存储凭据。 通过启用 Azure 资源托管标识,可以安全地访问 Azure 密钥保管库和其他服务,从而减少手动处理机密的需求。 此方法不仅最大限度地减少了机密的创建,而且减少了可能被作为突破口的攻击面,因为管理凭据的责任被委托给了平台。
应用精细访问控制
通过对机密应用精细访问控制,可践行最小特权原则。 使用 Azure 基于角色的访问控制 (RBAC) 可确保只有获得授权的实体才能访问特定机密。 请定期查看和更新访问权限,以防止未经授权的访问。 此外,建议实施不同的角色(例如用户、管理员和审核员)来管理对机密的访问,确保只有受信任的标识才能具有相应的权限级别。
请参阅 Azure 密钥保管库 RBAC 指南。
定期轮换机密
随着时间的推移,机密很容易泄露或暴露。 定期轮换机密可降低未经授权而访问的风险。 你可以为某些机密轮换 Azure 密钥保管库中的机密;对于无法自动轮换的机密,请建立手动轮换过程,并确保在不再使用时将其清除。
通过自动执行机密轮换过程并在机密管理中建立冗余,可以确保轮换不会破坏服务可用性。 在代码中实现重试逻辑和并发访问模式有助于最大程度地减少轮换时段内的问题。
监视和记录访问
请为机密管理系统启用日志记录和监视功能,以跟踪访问和使用情况。 使用密钥保管库日志记录以及/或 Azure Monitor 和 Azure 事件网格等服务监视与机密相关的所有活动。 这可让你了解都有哪些用户访问了机密,并帮助检测任何可疑行为或潜在的安全事件。 维护详细的审核线索对于检查和验证对机密的访问至关重要,这有助于防止身份盗用、避免抵赖和减少不必要的泄露。
实现网络隔离
通过实现网络隔离,可减少机密的泄露。 请配置防火墙和网络安全组以限制对密钥保管库的访问。 仅允许受信任的应用程序和服务访问机密,尽量减小攻击面并防止未经授权的访问。 此外,请考虑使用多个密钥保管库,从而为不同的组件创建隔离边界,确保如果一个组件遭到入侵,入侵者无法控制其他机密或整个工作负载。
加密静态和传输中的机密
请确保同时对静态和传输中的机密进行加密。 Azure 密钥保管库使用信封加密安全地存储机密,其中的数据加密密钥 (DEK) 由密钥加密密钥 (KEK) 进行加密,从而额外提供一层安全保障。 此方法增强了对未经授权的访问的防护。 此外,请使用安全通信协议(如 HTTPS)加密在应用程序和密钥保管库之间传输的数据,确保机密在存储和传输过程中都受到保护。
在 Azure 中,静态加密使用 AES 256 加密技术跨各种服务实现,而传输中的数据则通过 TLS 和 MACsec 进行保护,以防止在传输期间出现未经授权的访问。 这些加密做法为你的数据提供全面保护,无论是存储数据还是在系统之间传输数据。 有关详细信息,请参阅静态和传输中数据的加密。
机密的安全分发
分发机密时,请确保它们在组织内外安全共享。 请使用专为安全共享而设计的工具,并在灾难恢复计划中包括机密恢复过程。 如果密钥遭到泄露,应立即重新生成密钥。 为了进一步增强安全性,请为每个使用者使用不同的密钥,而不是共享密钥,即使他们具有类似的访问模式也是如此。 这种做法简化了密钥管理和吊销工作,确保可以撤销泄露的密钥,而不影响其他使用者。
特定于服务的最佳做法
各个服务可能具有保护机密的其他最佳做法和指导方针。 以下是一些示例:
- API 管理:将 Azure API 管理策略中的命名值与密钥保管库集成结合使用
- 请参阅使用应用服务和 Azure Functions 的密钥保管库引用
- 应用程序网关:使用 Azure 门户配置采用 TLS 终止的应用程序网关
- 自动化:管理 Azure 自动化中的凭据
- Azure 应用程序配置:教程:在 ASP.NET Core 应用中使用密钥保管库引用
- Azure Database for PostgreSQL 灵活服务器:使用客户管理的密钥的 Azure Database for PostgreSQL 灵活服务器数据加密
- Azure 信息保护:有关 Azure 信息保护密钥保管库支持的详细信息
- Azure Kubernetes 服务 (AKS):CSI 机密存储
- Azure 托管应用程序:部署 Azure 托管应用程序时访问密钥保管库机密
- Azure Purview:用于在 Microsoft Purview 中进行源身份验证的凭据
- Azure SignalR 服务:URL 模板设置中的密钥保管库机密引用
- Azure 服务总线:使用 Microsoft Entra ID 对应用程序进行身份验证和授权,使之能够访问 Azure 服务总线实体
- Azure Stack Hub:轮换机密
- 备份:配置保管库以使用客户管理的密钥进行加密
- 认知服务:使用密钥保管库开发 Azure 认知服务应用程序
- 数据工厂:在 Azure 密钥保管库中存储凭据
- ExpressRoute:为 ExpressRoute Direct 配置 MACsec 加密
- Functions:使用应用服务和 Azure Functions 的密钥保管库引用
- 密钥保管库:关于 Azure 密钥保管库机密
- 逻辑应用:逻辑应用标准应用设置
- 机器学习服务:在 Azure 机器学习作业中使用身份验证凭据机密
- SQL IaaS:为 Azure VM 上的 SQL Server 配置 Azure 密钥保管库集成(资源管理器)
- 存储:使用密钥保管库和 Azure CLI 管理存储帐户密钥
后续步骤
尽量减少安全风险是一种共同责任。 需要主动采取措施来保护工作负载。 详细了解云中的共同责任。
有关通过 Azure 设计、部署和管理云解决方案时可以使用的更多安全最佳做法,请参阅 Azure 安全最佳做法和模式。