.net-core - 使用 Azure Active Directory 访问 Service Fabric 应用程序的 Key Vault
问题描述
我有一个在 Service Fabric (SF) 群集中运行的应用程序,我不想从中访问 Key Vault。
群集托管了许多应用程序,我想为我的应用程序授予对 Key Vault 的访问权限,而不授予对其他应用程序的访问权限。默认情况下,应用程序与 SF 集群在同一用户下运行,但每个应用程序都有自己的唯一名称,我的名称为 fabric:/application1。
我的问题是,是否可以为 fabric:/application1 创建一个 Active Directory 应用程序帐户并授予对密钥保管库的访问权限?
我知道可以在 SF 清单中使用 RunAs 选项,但这需要我在清单/源代码中存储加密密码,并且我想尽可能避免这种情况。
解决方案
AFAIK,
获得这种灵活性的唯一方法是使用ClientID & Secret
orService Principal certificates
并且每个应用程序管理自己的凭据。
服务主体证书已集成到 AD,但不需要应用程序、用户或主机成为域的一部分,唯一的要求是在 AD 上设置用户以授予对 Keyvault 的权限。
还有其他使用 AD 集成的解决方案,例如Azure 资源的托管身份(以前:托管服务身份),但我不确定您是否能够像您描述的那样限制每个应用程序的访问,因为 MI 将其作为服务添加到节点中,因此从技术上讲,其他应用程序也可以访问,如果您可以限制这一点,值得尝试验证。
如果您想尝试这种方法,您可以使用Microsoft.Azure.Services.AppAuthentication对集群中运行的服务进行隐式身份验证,其中节点设置为使用 Managed Identities 扩展,如此处所述。
当您使用Microsoft.Azure.Services.AppAuthentication时,第 2 步将由库处理,您不必对密钥保管库身份验证逻辑添加太多更改。
在启用托管标识的 Azure 应用服务或 Azure VM 上运行代码时,库会自动使用托管标识。无需更改代码。
以下文档描述了可用于 KeyVault 身份验证的其他选项。
PS:我已经使用客户端密钥和证书完成了其他 KeyVault 集成,它们足够安全,使用证书,您可以将其存储在托管存储或应用程序中,只有当您的解决方案需要时,我才会推荐 MI。
推荐阅读
- react-native - react-native start gives me "Watchman error: too many pending cache jobs"
- php - Silverstripe 博客根据条件渲染到模板
- amazon-web-services - AWS EC2 实例(免费版)在训练简单 ANN 时运行不足
- python - 确保复制 DataFrame (pandas) 的最佳实践
- c - 为什么 pthread_join 在最后一次迭代中失败(给出分段错误)?
- javascript - 合并搜索两列中的字符
- database - Amazon Aurora 是否支持可序列化隔离?
- swift - MacOS 上的 Swift - 我如何将 PHP 发布函数的响应保存到全局变量
- python - 将 Python 中的变量插入 PostgreSQL 语句
- openshift - Openshift SCC 和 InitContainers