Azure 容器应用提供了多个内置安全功能,可帮助你构建安全的容器化应用程序。 本指南探讨关键安全原则,包括托管标识、机密管理和令牌存储,同时提供最佳做法来帮助设计安全且可缩放的应用程序。
托管标识
托管标识 无需在代码或配置中存储凭据,只需在 Microsoft Entra ID 中提供自动托管标识。 容器应用可以使用这些标识向任何支持Microsoft Entra 身份验证的服务进行身份验证,例如 Azure Key Vault、Azure 存储或 Azure SQL 数据库。
托管身份类型
Azure 容器应用支持两种类型的托管标识:
系统分配的标识:在容器应用的生命周期内自动创建和管理。 当您的应用被删除时,其身份标识也会被删除。
用户分配的标识:独立创建,可分配给多个容器应用,从而允许跨资源共享标识。
托管标识的安全优势
- 无需在应用程序代码中管理和轮换凭据
- 降低配置文件中凭据泄露的风险
- 通过 Azure RBAC 提供精细的访问控制
- 仅授予必要的权限,支持最低权限原则
何时使用每个标识类型
对具有以下特征的工作负载使用系统分配的标识:
- 包含在单个资源中
- 需要独立的标识
对具有以下特征的工作负载使用用户分配的标识:
- 跨共享单个标识的多个资源运行
- 需要预授权来保护资源
用于映像拉取的托管标识
常见的安全模式是使用托管标识从 Azure 容器注册表中的专用存储库 拉取映像 。 这种方法:
- 避免对注册表使用管理凭据
- 通过 ACRPull 角色提供精细的访问控制
- 支持系统分配标识和用户分配标识
- 可以控制限制对特定容器的访问
有关详细信息,请参阅 托管身份 以及 使用托管身份从 Azure 容器注册表拉取映像 ,详细了解如何为应用程序设置托管身份。
机密管理
Azure 容器应用提供内置机制,用于安全地存储和访问敏感配置值,例如连接字符串、API 密钥和证书。
用于机密的关键安全功能
- 机密隔离:机密的范围限定为应用程序级别,独立于特定修订
- 环境变量引用:将机密以环境变量形式暴露给容器
- 卷装载:将机密作为文件装载到容器中
- Key Vault 集成:引用存储在 Azure Key Vault 中的机密
机密的安全性最佳做法
- 避免将机密直接存储在用于生产环境的容器应用中
- 使用 Azure Key Vault 集成进行集中式机密管理
- 在授予对敏感信息的访问权限时实施最小特权原则
- 在环境变量中使用机密引用,而不是硬编码值
- 在适当情况下,使用卷装载以文件形式访问机密
- 实施适当的机密轮换做法
有关详细信息,请参阅 从 Azure Key Vault 导入证书 ,详细了解如何为应用程序设置机密管理。
用于安全身份验证的令牌存储
令牌存储功能提供了一种安全的方式来管理独立于应用程序代码的身份验证令牌。
令牌存储的工作原理
- 令牌存储在 Azure Blob 存储中,独立于应用程序代码
- 缓存令牌仅可供关联用户访问
- 容器应用自动处理令牌刷新
- 此功能通过消除自定义令牌管理代码来减少攻击面
有关详细信息,请参阅 “启用身份验证令牌存储 ”,详细了解如何为应用程序设置令牌存储。