我有一个在Service Fabric(SF)群集中运行的应用程序,并且我不想从其中访问Key Vault。
该集群托管了许多应用程序,我想为我的应用程序授予对Key Vault的访问权限,而又不授予对其他应用程序的访问权限。默认情况下,应用程序与SF群集在同一用户下运行,但是每个应用程序都有其自己的唯一名称,我的应用程序具有名称fabric:/ application1。
我的问题是,是否可以为fabric:/ application1创建Active Directory应用程序帐户并授予对密钥库的访问权限?
我知道可以在SF清单中使用RunAs选项,但这需要我在清单/源代码中存储一个加密密码,并且我想尝试避免这种情况。
答案 0 :(得分:1)
AFAIK,
拥有这种灵活性的唯一方法是使用ClientID & Secret
或Service Principal certificates
,并且每个应用程序都管理自己的凭据。
服务主体证书已集成到AD,但不需要应用程序,用户或主机成为域的一部分,唯一的要求是在AD上设置用户以授予Keyvault的权限。
还有其他使用AD集成的解决方案,例如Managed identities for Azure resources(以前:托管服务身份),但是我不确定您是否能够像您描述的那样限制每个应用程序的访问,因为MI将其添加为服务在该节点中,因此从技术上讲,其他应用程序也将具有访问权限,值得尝试验证是否可以限制此应用程序。
如果您想尝试这种方法,则可以与Microsoft.Azure.Services.AppAuthentication一起使用,以对集群中运行的服务进行隐式身份验证,在该集群中,节点是使用受管理的身份扩展名设置的,例如here。>
使用Microsoft.Azure.Services.AppAuthentication时,库将处理步骤2,而无需在密钥库身份验证逻辑中添加太多更改。
在具有以下功能的Azure应用服务或Azure VM上运行代码时 启用托管身份后,库会自动使用托管身份 身份。无需更改代码。
以下docs描述了可用于KeyVault身份验证的其他选项。
PS:我已经使用客户端密钥和证书完成了其他KeyVault集成,并且它们足够安全,有了证书,您可以将其存储在托管存储区或应用程序中,仅在解决方案要求时才建议使用MI