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.

GetAccessPolicyAsync/SetAccessPolicyAsync no funciona con Identidad Administrada.

Estoy actualizando un código heredado para que funcione con una identidad administrada en lugar de una clave de acceso.
El código:
1. Crea un DataLakeServiceClient
2. Usa eso para obtener un DataLakeFileSystemClient de archivo (var dlfsc = dlsc.GetFileSystemClient(containerName);)
3. Llama a GetAccessPolicyAsync y SetAccessPolicyAsync (var acl = await client.GetAccessPolicyAsync().ConfigureAwait(false);)

Cuando construyo el DataLakeServiceClient usando un StorageSharedKeyCredential, todo funciona bien.
Sin embargo, cuando construyo el DataLakeServiceClient usando una
ManagedIdentityCredential va(DefaultAzureCredential), se lanza la siguiente excepción:

El recurso especificado no existe.
RequestId:f2543e09-a01e-000d-321b-e47741000000
Time:2021-11-28T05:51:15.6906885Z
Status: 404 (El recurso especificado no existe.)
ErrorCode: ResourceNotFound

Content:
<?xml version="1.0" encoding="utf-8"?><Error><Code>ResourceNotFound</Code><Message>El recurso especificado no existe.
RequestId:f2543e09-a01e-000d-321b-e57741000000
Time:2021-11-28T05:51:15.6906885Z</Message></Error>

Supongo que esto proviene de cuando Azure.Identity intenta obtener un token usando ManagedIdentityCredential?

Un punto importante a tener en cuenta es que el método ExistsAsync() de DataLakeFileSystemClient también se está llamando y funciona bien en ambos casos.

Entonces mi pregunta es, ¿por qué los métodos de AccessPolicy funcionan bien cuando se ha creado DataLakeFileSystemClient usando StorageSharedKeyCredential, pero no cuando se crea usando ManagedIdentityCredential?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema podría estar relacionado con la lista de control de acceso de la cuenta de almacenamiento de Data Lake. Al utilizar ManagedIdentityCredential, la aplicación se autentica con la identidad gestionada asignada por el sistema del recurso de Azure. La identidad gestionada se utiliza para obtener un token de acceso para acceder a la cuenta de almacenamiento de Data Lake. Si la lista de control de acceso de la cuenta no incluye la identidad gestionada, no tendrá los permisos necesarios para realizar la operación solicitada.

    Para resolver el problema, puede intentar agregar la identidad gestionada asignada por el sistema a la lista de control de acceso de la cuenta de almacenamiento de Data Lake y otorgarle los permisos necesarios. Además, asegúrese de utilizar el URI de recurso correcto al acceder a la cuenta de almacenamiento de Data Lake.

    También es importante señalar que al utilizar ManagedIdentityCredential, el token de acceso obtenido sólo es válido por un corto período de tiempo (generalmente una hora). Por lo tanto, si el código se está ejecutando durante un largo período de tiempo, puede ser necesario actualizar periódicamente el token de acceso.

Comments are closed.