es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Incluso sin pasar una cadena de conexión a AzureServiceTokenProvider, obtengo el error “Debe contener el atributo ‘TenantId’ y no debe estar vacío”.

En mi código, estoy intentando usar la Identidad Administrada para obtener un secreto de un Azure KeyVault.

var azureServiceTokenProvider = new AzureServiceTokenProvider();

var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

var certSecret = await keyVaultClient.GetSecretAsync(keyVaultUrl, keyVaultCertParam);

Este código funciona para mí localmente, ya que he dado acceso a mi cuenta personal al AKV también. Sin embargo, cuando intento ejecutar esto desde una VM que tiene una identidad administrada, obtengo el mensaje de error “La cadena de conexión RunAs=App;AppId={myMSIID} no es válida. Debe contener el atributo ‘TenantId’ y no debe estar vacío. en Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderFactory.ValidateAttribute(Dictionary`2 connectionSettings, String attribute, String connectionString)”.

Estoy muy confundido sobre por qué pide el tenantid si la cadena de conexión no se ha pasado en absoluto.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en .net, Azure, Azure Active Directory y Azure Managed Identity, parece que el mensaje de error que recibiste indica que AzureServiceTokenProviderFactory requiere que el atributo ‘TenantId’ esté presente en la cadena de conexión para que la autenticación mediante Managed Identity funcione.

    Para resolver este problema, puedes modificar tu código para incluir el atributo TenantId en la configuración de la conexión, como se muestra a continuación:

    var azureServiceTokenProvider = new AzureServiceTokenProvider("RunAs=App;TenantId={tuIdDelTenant}");
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    var certSecret = await keyVaultClient.GetSecretAsync(keyVaultUrl, keyVaultCertParam);
    

    Asegúrate de reemplazar {tuIdDelTenant} con el valor del ID del Tenant de Azure AD en el que se aprovisiona la VM.

    Con este cambio, AzureServiceTokenProviderFactory podrá autenticarse utilizando la Managed Identity asociada con la VM y recuperar el secreto del Azure Key Vault.

    Espero que esto te ayude a resolver el problema y a recuperar el secreto utilizando Managed Identity en tu código.

Comments are closed.