Azure RelayManagementClient 的 ManagedIdentityCredential

问题描述

对于 Azure Key Vault,我使用 DefaultAzureCredential。这在本地开发和使用应用程序标识发布到 Azure 时非常有用。我不需要在应用程序中存储任何 ID 或机密。

我还需要利用 RelayManagementClient 来管理来自应用程序的 (CRUD) 混合连接。我无法使用 Microsoft.Azure.Management.Relay 包找到类似的授权方法。这个客户端的构造函数接受一个 ServiceClientCredentials 实例,它有三个派生类; BasicAuthenticationCredentials、CertificateCredentials 和 TokenCredentials - 这些都不合适。

我通过调用创建了一个 ServiceClientCredentials 实例

SdkContext.AzureCredentialsFactory
   .FromServicePrincipal(config.ClientId,config.ClientSecret,config.TenantId,AzureEnvironment.AzureGlobalCloud);

但是通过这种方式,我会在配置中公开 Azure 租户详细信息。最初这不是一个大问题,因为配置是安全的,但我想知道是否可以为此客户端使用 ManagedIdentityCredentials?

我可以将这些值存储在使用托管身份凭据的 keyvault 中,但也许以前有人这样做过。

解决方法

是的,您可以使用托管身份进行身份验证,只需在创建 ServiceClientCredentials 实例时使用 FromSystemAssignedManagedServiceIdentityFromUserAssigedManagedServiceIdentity 而不是 FromServicePrincipal。第一个用于系统分配的托管标识,第二个用于用户分配的托管标识。