使用不同租户上的 Azure Active Directory 访问 Azure Service Fabric 应用程序上的 Key Vault
Posted
技术标签:
【中文标题】使用不同租户上的 Azure Active Directory 访问 Azure Service Fabric 应用程序上的 Key Vault【英文标题】:Access Key Vault on Azure Service Fabric app using Azure Active Directory on different tenant 【发布时间】:2021-07-22 18:33:33 【问题描述】:我在 tenantA 中有 Azure 服务结构集群,它需要连接到 tenantB 中的 Azure 密钥保管库以加载一些连接字符串托管在其上的应用程序所需的
想试试下面的设置:
tenantA 中的 Service Fabric 集群和 tenantB 中的 Azure 密钥库之间建立握手是通过使用 Azure AD 应用程序属于 租户B。
将属于 tenantB 的 Azure AD 应用程序 ID 配置到 tenantA
中的 Azure Service Fabric 应用程序配置将 Azure AD 应用程序 ID 添加到 tenantB
中 Azure 密钥保管库的访问策略中通过此设置,Azure Service Fabric 集群和 Azure Key Vault 之间会发生握手吗?
(或)
Azure Service Fabric 集群、Azure Key Vault 和 Azure AD 应用程序必须在同一个租户中?
【问题讨论】:
【参考方案1】:只要用于访问 Key Vault 的应用程序 ID 与 Key Vault 位于同一租户中,该应用程序就可以在任何地方运行。应用程序(带有应用程序 ID)将从其自己的租户获取访问令牌,然后使用该令牌访问 Key Vault。使用应用程序 ID 和机密时,执行代码的环境可以具有来自多个租户的身份。
【讨论】:
@Matt Small,现在我们说对了。谢谢。你能解释一下我在租户 A 上运行的应用程序如何具有可见性/识别某些天蓝色 AD 应用程序属于租户 B 吗? 创建客户端的代码需要与密钥保管库位于同一租户的服务主体。代码可以在任何地方执行。当代码创建客户端时,它会从 Key Vault 的租户获取身份验证令牌并使用它来获取机密。一旦获得该秘密,应用程序就可以在任何地方使用它。如果不是这样,则本地应用程序将无法调用 Key Vault。 @Matt Small,因此为了获取身份验证令牌,客户端调用 AAD OAuth 端点并提供应用程序 ID 和相应的秘密/证书。然后,AAD OAuth 端点有责任 1) 验证 Azure 上任何租户之间是否存在应用程序 ID,2) 使用密钥/证书进行验证,然后向调用应用程序颁发访问令牌,无论调用应用程序属于哪个租户。这个流程正确吗? 是的,这是正确的。 AAD OAuth 端点可以跨任何租户验证服务主体(注册的应用程序)。但是,当它颁发令牌时,令牌必须与 Key Vault 中的访问策略中的身份相匹配。这意味着该身份与 Key Vault 位于同一租户中。【参考方案2】:通过此设置,Azure Service Fabric 集群和 Azure Key Vault 之间会发生握手吗?
这不行,当你将tenantB AD App Application ID添加到tenantB中Azure key vault的访问策略时,本质上是你将AD App对应的服务主体添加到keyvault中。服务主体是一个租户中 AD 应用程序的特定实例,它只适用于它所在的租户。
即使您通过admin consent URL 将tenantB AD App 同意给tenantA,它也只是在tenantA 中生成一个新的服务主体(企业应用程序),这与您在keyvault 中添加的对象不同,AD App 有一个1:与其对应的服务主体有很多关系。
Azure Service Fabric 集群、Azure Key Vault 和 Azure AD 应用程序必须在同一个租户中?
不完全是,但至少 Service Fabric 集群和 Key Vault 需要在同一个租户中,AD App 可以在另一个租户中,但应该是multi-tenant app,然后您需要同意如上所述的 keyvault 和服务结构集群的租户,然后将新生成的服务主体添加到访问策略中,然后再在服务结构集群中使用它。如果你对 Azure AD 不是很熟悉,会有点复杂,建议你在同一个租户中使用。
有关 AD 应用程序和服务主体之间关系的更多详细信息,请参阅link。
【讨论】:
任何方式我都可以在同一个租户中拥有 Azure AD 应用程序和 KeyVault,但在另一个租户上拥有 Azure SF 集群,并且仍然连接 Azure SF 集群和 KeyVault 以获得应用程序机密? @Joy Wang,这个example 说在其他租户上创建的服务主体可以针对家庭租户密钥库进行配置,我说对了吗? @ZackieKhan 也许我误解了你的意思。 1.如果你在SF集群中使用租户ID、客户端ID和秘密连接Azure keyvault,我认为它可以在另一个租户中。 2.不,服务主体只适用于它所在的租户,如果它位于消费者租户中,它将不适用于家庭租户。 @ZackieKhan 你能分享你提到的关于在 SF 集群中连接 keyvault 的文档吗? 我指的是“docs.microsoft.com/en-us/azure/active-directory/develop/…” 如流程图中所述,您能否解释一下 HR App 的 contoso/fabrikam 服务主体如何连接到 Adatum 租户的 HR APP 密钥?以上是关于使用不同租户上的 Azure Active Directory 访问 Azure Service Fabric 应用程序上的 Key Vault的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .NET Core Web 应用程序的单个实例中使用动态租户对 Azure Active Directory 中的用户进行身份验证?
用于查询Azure Active Directory的Azure服务