如何确定用户分配的托管身份到Azure上运行的应用程序服务或功能的客户端ID?可以分配多个用户分配的托管身份,我想在运行时获取分配给我的应用程序的身份列表。
这样做的目的是避免将托管用户身份的客户端ID存储在配置中,以用于创建用于访问KeyVault和其他资源的DefaultAzureCredential
。
现在我的代码如下:
string managedIdentityClientId = Environment.GetEnvironmentVariable("ManagedIdentityClientId", EnvironmentVariableTarget.Process);
var options = new DefaultAzureCredentialOptions { ManagedIdentityClientId = managedIdentityClientId };
var keyVaultCredentials = new DefaultAzureCredential(options);
我想避免将ManagedIdentityClientId
存储在应用程序设置中,并尽可能从已配置的应用程序服务中读取它。
答案 0 :(得分:0)
没有凭据就无法在运行时获取用户分配的托管身份的客户端ID。
即使您可以使用其他方式,例如在代码中调用REST API来获取它们,您还需要使用另一个凭据(例如服务主体),这意味着您还需要在代码中公开客户端ID和密码或将其存储在应用程序设置中,这使得没有感。
因此,在您的情况下,我认为将客户端ID存储在应用程序设置中是使用MSI的最可行方法。
答案 1 :(得分:0)
由于您的Azure资源上可以有多个用户分配的托管身份,因此无法直接推断应使用哪个用户分配的身份,因此需要指定它。
对于系统分配的托管身份,您无需指定clientId,因为每个资源只能有1个系统分配的身份。
“我想避免在应用程序设置中存储ManagedIdentityClientId,并尽可能从已配置的应用程序服务中读取它。”
即使您可以列出分配给资源的所有用户分配资源,也必须有逻辑从列表中选择合适的资源。通过Config显式指定clientId更加容易。