azure - 使用 Azure 托管服务标识、AKS、AAD 和 Key Vault 时。所有这些资源是否需要在同一个订阅/资源组或 VNET 中
问题描述
基本上我有一个设置
- azure 中的 Hub-Spoke 订阅和 vnet 拓扑。
- 内部用户和开发人员访问的 AAD 和外部用户的 b2c。
- AAD 和 Keyvault 在 HUB 订阅/VNET 中。
- 在 Azure AKS 群集中部署的 API 位于分支订阅中。
- 还有 API 管理位于与 AKS/API 相同的订阅和 VNET 中的 API 前面,因此在 Spoke 订阅中
鉴于上述设置,我有这些问题
- 是否所有 API、API 管理、Keyvault 和 Azure AD 都需要绑定到同一个订阅,或者我可以在我的中心订阅中拥有 Keyvault,而在不同订阅中拥有其他服务。
- 我们是否将每个 API 注册为与 KEYVAULT 相同的 AAD 中的应用程序,或者我们可以只注册 API 管理并使用 API 管理来获取机密。
- 我们是否可以使用托管服务标识,即使组件在不同的订阅中但在同一个 Azure AD 中注册
解决方案
Azure 中的身份验证是在租户级别完成的,因此假设您没有使用 Key Vault 的高级服务(ARM 访问、VM 加密等),您可以在一个订阅中拥有您的 Key Vault,并在不同订阅中从 MSI 访问它 -只要您授予该 MSI 用户对密钥保管库的权限。
只要您授予资源权限,AAD 就很少意识到订阅(订阅基本上是您可以授予权限的一大资源)
编辑以阐明高级访问策略
密钥保管库有三种高级访问策略。
- 启用部署
- enabledForDiskEncryption
- enabledForTemplateDeployment
enabledForTemplateDeployment
仅当您从 ARM 模板部署中读取机密时,该策略才适用。即,如果您直接从 Key Vault 传递 VM 密码。
对于您的情况,如果这是一个要求,那么您可以简单地将它们放在位于同一订阅中的不同密钥保管库中。
推荐阅读
- c - 使用结构从另一个函数调用变量
- c++ - 在带有 LLD 的 Windows 10 上使用 Clang
- r - 避免覆盖 data.table 函数中的现有列
- mysql - mysql:外键不起作用?存在不应该存在的记录
- javascript - vue.js:如何从数组中的对象进行计算?
- r - 如何运行 Chow 测试以检查面板数据中随时间推移的结构性中断?
- php - 为表单中的函数命名
- geoserver - 使用 UWP MapControl 和离线 GeoServer 切片
- android - 使用两种方法的回调在 NonActivity 类和 Fragment 之间不起作用
- r - 如何在 R 中的 quantmod 中使用 getFin 下载财务