首页 > 解决方案 > 使用 Azure Active Directory 访问 Service Fabric 应用程序的 Key Vault

问题描述

我有一个在 Service Fabric (SF) 群集中运行的应用程序,我不想从中访问 Key Vault。

群集托管了许多应用程序,我想为我的应用程序授予对 Key Vault 的访问权限,而不授予对其他应用程序的访问权限。默认情况下,应用程序与 SF 集群在同一用户下运行,但每个应用程序都有自己的唯一名称,我的名称为 fabric:/application1。

我的问题是,是否可以为 fabric:/application1 创建一个 Active Directory 应用程序帐户并授予对密钥保管库的访问权限?

我知道可以在 SF 清单中使用 RunAs 选项,但这需要我在清单/源代码中存储加密密码,并且我想尽可能避免这种情况。

标签: .net-coreazure-active-directoryazure-service-fabricazure-keyvault

解决方案


AFAIK,

获得这种灵活性的唯一方法是使用ClientID & SecretorService 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。


推荐阅读