使用不同租户上的 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服务

Azure Active Directory-支持2个域的应用程序

Azure AD 中的企业应用程序缺少租户架构扩展应用程序

来自不同租户的 Azure AD 同意

如何填充 Azure Active Directory B2C 用户自定义用户属性?