Autorización con Azure Active Directory

Azure Storage proporciona integración con Azure Active Directory (Azure AD) para la autorización basada en identidades de las solicitudes a los servicios Blob, Queue y Table. Con Azure AD, puede usar el control de acceso basado en rol (RBAC) para conceder acceso a recursos de blob, cola y tabla a usuarios, grupos o aplicaciones. Puede conceder permisos cuyo ámbito sea el nivel de un contenedor, una cola o una tabla individuales.

Para más información sobre la integración de Azure AD en Azure Storage, consulte Autorización del acceso a blobs y colas de Azure mediante Azure Active Directory.

Para obtener más información sobre las ventajas de usar Azure AD en la aplicación, vea Integración con Azure Active Directory.

Sugerencia

La autorización del acceso a datos de blobs, colas y tablas con Azure AD proporciona una mayor seguridad y facilidad de uso en otras opciones de autorización. Cuando se usa Azure AD para autorizar las solicitudes que se realizan desde las aplicaciones, se evita tener que almacenar la clave de acceso de la cuenta con el código, como se hace con la autorización de clave compartida. Aunque puede seguir usando la autorización de clave compartida con las aplicaciones de blob, cola y tabla, Microsoft recomienda pasar a Azure AD siempre que sea posible. Para más información sobre la integración de Azure AD en Azure Storage, consulte Autorización del acceso a blobs y colas de Azure mediante Azure Active Directory.

Uso de tokens de acceso de OAuth para la autenticación

Azure Storage acepta tokens de acceso de OAuth 2.0 del inquilino de Azure AD asociado a la suscripción que contiene la cuenta de almacenamiento. Azure Storage acepta tokens de acceso para:

  • Usuarios
  • Entidades de servicio
  • Identidades administradas de recursos de Azure
  • Aplicaciones que usan permisos delegados por los usuarios

Azure Storage expone un único ámbito de delegación denominado user_impersonation que permite a las aplicaciones realizar cualquier acción permitida por el usuario.

Para solicitar tokens para Azure Storage, especifique el valor https://storage.azure.com/ del identificador de recurso.

Para obtener más información sobre la solicitud de tokens de acceso de Azure AD para usuarios y entidades de servicio, consulte el artículo sobre escenarios de autenticación de Azure AD.

Para más información sobre cómo solicitar tokens de acceso para recursos configurados con identidades administradas, consulte Uso de identidades administradas para recursos de Azure en una máquina virtual de Azure para adquirir un token de acceso.

Llamada a operaciones de almacenamiento con tokens de OAuth

Para llamar a las operaciones de Blob, Queue y Table service mediante tokens de acceso de OAuth, pase el token de acceso en el encabezado Authorization mediante el esquema Bearer y especifique una versión de servicio de 2017-11-09 o superior, como se muestra en el ejemplo siguiente:

Request:
GET /container/file.txt
x-ms-version: 2017-11-09
Authorization: Bearer eyJ0eXAiO...V09ccgQ
User-Agent: PostmanRuntime/7.6.0
Accept: */*
Host: sampleoautheast2.blob.core.windows.net
accept-encoding: gzip, deflate

Response:
HTTP/1.1 200
status: 200
Content-Length: 28
Content-Type: text/plain
Content-MD5: dxG7IgOBzApXPcGHxGg5SA==
Last-Modified: Wed, 30 Jan 2019 07:21:32 GMT
Accept-Ranges: bytes
ETag: "0x8D686838F9E8BA7"
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 09f31964-e01e-00a3-8066-d4e6c2000000
x-ms-version: 2017-11-09
x-ms-creation-time: Wed, 29 Aug 2018 04:22:47 GMT
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-blob-type: BlockBlob
x-ms-server-encrypted: true
Date: Wed, 06 Mar 2019 21:50:50 GMT
Welcome to Azure Storage!!

Desafío de portador

El desafío de portador forma parte del protocolo OAuth RFC 6750 y se usa para la detección de autoridad. En el caso de solicitudes anónimas o solicitudes con un token de portador de OAuth no válido, el servidor devolverá el código de estado 401 (no autorizado) con el proveedor de identidades y la información de recursos. Consulte el vínculo para ver cómo usar estos valores durante la autenticación con Azure AD.

Azure Storage blob y queue services devuelven un desafío de portador para la versión 2019-12-12 y versiones posteriores. Azure Storage Table service devuelve un desafío de portador de la versión 2020-12-06. Azure Data Lake Storage Gen2 devuelve un desafío de portador para la versión 2017-11-09 y versiones posteriores.

A continuación se muestra un ejemplo de una respuesta de desafío de portador cuando la solicitud de cliente no incluye el token de portador en la solicitud de blob de descarga anónima:

Request:
GET /container/file.txt
x-ms-version: 2019-12-12
Host: sampleoautheast2.blob.core.windows.net

Response:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri=https://login.microsoftonline.com/<tenant_id>/oauth2/authorize resource_uri=https://storage.azure.com

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>NoAuthenticationInformation</Code>
    <Message>Server failed to authenticate the request. Please refer to the information in the www-authenticate header.
RequestId:ec4f02d7-1003-0006-21f9-c55bc8000000
Time:2020-01-08T08:01:46.2063459Z</Message>
</Error>
Parámetro Descripción
authorization_uri URI (punto de conexión físico) del servidor de autorización. Este valor también se utiliza como clave de búsqueda con el fin de obtener más información del servidor a partir de un punto de conexión de detección. El cliente debe validar que el servidor de autorización sea de confianza. Cuando el recurso está protegido por Azure AD, es suficiente comprobar que la dirección URL comienza con https://login.microsoftonline.com u otro nombre de host que admite Azure AD. Los recursos específicos del inquilino siempre deben devolver un URI de autorización exclusivo del inquilino.
resource_id Devuelve el identificador único del recurso. La aplicación cliente puede usar este identificador como valor del parámetro de recurso cuando solicita un token de acceso para el recurso. Es importante que la aplicación cliente compruebe este valor; de lo contrario, un servicio malintencionado podría inducir un ataque de elevación de privilegios. La estrategia recomendada para evitar un ataque es comprobar que el resource_id coincide con la base de la dirección URL de API web a la que se accede. https://storage.azure.comes el identificador de recurso de Azure Storage usado con carácter general.

Administración de derechos de acceso con RBAC

Azure AD controla la autorización del acceso a recursos protegidos a través de RBAC. Con RBAC, puede asignar roles a usuarios, grupos o entidades de servicio. Cada rol abarca un conjunto de permisos para un recurso. Una vez asignado el rol al usuario, grupo o entidad de servicio, tienen acceso a ese recurso. Puede asignar derechos de acceso mediante los Azure Portal, las herramientas de línea de comandos de Azure y las API de administración de Azure. Para más información sobre RBAC, consulte Comenzar con Role-Based Access Control.

Para Azure Storage, puede conceder acceso a los datos de un contenedor o una cola en la cuenta de almacenamiento. Azure Storage proporciona estos roles integrados de RBAC para su uso con Azure AD:

Para más información sobre cómo se definen los roles integrados para Azure Storage, consulte Descripción de las definiciones de roles para los recursos de Azure.

También puede definir roles personalizados para su uso con Blob Storage y Azure Queues. Para más información, consulte Creación de roles personalizados para el control de acceso basado en roles de Azure.

Permisos para llamar a operaciones de datos

En las tablas siguientes se describen los permisos necesarios para que un usuario, grupo o entidad de servicio de Azure AD llame a operaciones de Azure Storage específicas. Para permitir que un cliente llame a una operación determinada, asegúrese de que el rol RBAC asignado del cliente ofrezca permisos suficientes para esa operación.

Permisos para las operaciones de Blob Service

Operación de servicio de blob Acción de RBAC
Enumerador de contenedores Microsoft. Storage/storageAccounts/blobServices/containers/read (con ámbito de la cuenta de almacenamiento o superior)
Establecer propiedades de Blob Service Microsoft.Storage/storageAccounts/blobServices/write
Obtención de propiedades de Blob Service Microsoft.Storage/storageAccounts/blobServices/read
Solicitud de blob preparatoria Anónimas
Obtención de estadísticas de Blob Service Microsoft.Storage/storageAccounts/blobServices/read
Obtener información de la cuenta No compatible
Obtención de la clave de delegación de usuarios Microsoft.Storage/storageAccounts/blobServices/generateUserDelegationKey/action
Creación de un contenedor Microsoft.Storage/storageAccounts/blobServices/containers/write
Get Container Properties Microsoft.Storage/storageAccounts/blobServices/containers/read
Get Container Metadata Microsoft.Storage/storageAccounts/blobServices/containers/read
Establecer metadatos de contenedor Microsoft.Storage/storageAccounts/blobServices/containers/write
Get Container ACL No compatible
Establecer lista de control de acceso de contenedor No compatible
Lease Container Microsoft.Storage/storageAccounts/blobServices/containers/write
Delete Container Microsoft.Storage/storageAccounts/blobServices/containers/delete
Restaurar contenedor Microsoft.Storage/storageAccounts/blobServices/containers/write
Enumeración de blobs Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Búsqueda de blobs por etiquetas en el contenedor Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action
Put Blob Para crear o reemplazar: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write
Para crear un nuevo blob: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action
Colocar blob desde la dirección URL Para crear o reemplazar: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write
Para crear un nuevo blob: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action
Get Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Get Blob Properties Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Set Blob Properties Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Get Blob Metadata Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Set Blob Metadata Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Obtener etiquetas de blobs Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/read
Establecer etiquetas de blobs Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
Búsqueda de blobs por etiquetas Microsoft.Storage/storageAccounts/blobServices/containers/blobs/filter/action
Concesión de blobs Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Snapshot Blob Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write o
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Copy Blob Para el blob de destino: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write o Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action (al escribir un nuevo blob en el destino)
Para el blob de origen en la misma cuenta de almacenamiento: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/read
Para el blob de origen en otra cuenta de almacenamiento: disponible como anónimo o incluye un token de SAS válido.
Copy Blob from URL Para el blob de destino: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write o Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action (al escribir un nuevo blob en el destino)
Para el blob de origen en la misma cuenta de almacenamiento: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/read
Para el blob de origen en otra cuenta de almacenamiento: disponible como anónimo o incluye un token de SAS válido.
Abort Copy Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Delete Blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
Undelete Blob Microsoft.Storage/storageAccounts/blobServices/containers/write
Set Blob Tier Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Blob Batch Solicitud principal: Microsoft. Storage/storageAccounts/blobServices/containers/write
Subrecursos: vea permisos para ese tipo de solicitud.
Establecer directiva de inmutabilidad Microsoft.Storage/storageAccounts/blobServices/containers/write
Eliminar directiva de inmutabilidad Microsoft.Storage/storageAccounts/blobServices/containers/write
Establecimiento de la suspensión legal del blob Microsoft.Storage/storageAccounts/blobServices/containers/write
Put Block Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Put Block from URL Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Put Block List Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Get Block List Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Consultar el contenido del blob Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Put Page Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Put Page from URL (Poner página de dirección URL) Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Get Page Ranges (Conseguir intervalos de páginas) Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Incremental Copy Blob (Copia incremental del blob) Para el blob de destino: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write
Para el blob de origen: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/read
Para el nuevo blob: Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action
Append Block Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write o Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action
Append Block from URL (Anexar bloque desde dirección URL) Microsoft. Storage/storageAccounts/blobServices/containers/blobs/write o Microsoft. Storage/storageAccounts/blobServices/containers/blobs/add/action
Establecer expiración de blobs Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write

Permisos para las operaciones de Queue Service

Operación de Queue Service Acción de RBAC
Enumerar colas Microsoft. Storage/storageAccounts/queueServices/queues/read (con ámbito en la cuenta de almacenamiento o superior)
Establecer propiedades de Queue Service Microsoft.Storage/storageAccounts/queueServices/read
Obtener propiedades de Queue Service Microsoft.Storage/storageAccounts/queueServices/read
Preflight Queue Request Anónimas
Obtener estadísticas del servicio Cola Microsoft.Storage/storageAccounts/queueServices/read
Crear cola Microsoft.Storage/storageAccounts/queueServices/queues/write
Eliminar cola Microsoft.Storage/storageAccounts/queueServices/queues/delete
Get Queue Metadata Microsoft.Storage/storageAccounts/queueServices/queues/read
Establecer metadatos de cola Microsoft.Storage/storageAccounts/queueServices/queues/write
Get Queue ACL No disponible a través de OAuth
Set Queue ACL No disponible a través de OAuth
Put Message Microsoft. Storage/storageAccounts/queueServices/queues/messages/add/action o Microsoft. Storage/storageAccounts/queueServices/queues/messages/write
Get Messages Microsoft. Storage/storageAccounts/queueServices/queues/messages/process/action o (Microsoft.Storage /storageAccounts/queueServices/queues/messages/delete y Microsoft. Storage/storageAccounts/queueServices/queues/messages/read)
Peek Messages Microsoft.Storage/storageAccounts/queueServices/queues/messages/read
Eliminar mensaje Microsoft. Storage/storageAccounts/queueServices/queues/messages/process/action o Microsoft. Storage/storageAccounts/queueServices/queues/messages/delete
Borrar mensajes Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete
Actualizar mensaje Microsoft.Storage/storageAccounts/queueServices/queues/messages/write

Permisos para las operaciones de Table service

Operación de Table service Acción de RBAC
Establecer las propiedades de Table Service Microsoft.Storage/storageAccounts/tableServices/write
Obtener las propiedades de Table Service Microsoft.Storage/storageAccounts/tableServices/read
Preflight Table Request Anónimas
Obtener estadísticas de Table service Microsoft.Storage/storageAccounts/tableServices/read
Realizar transacciones con grupos de entidades La suboperaciones autoriza por separado
Tablas de consulta Microsoft. Storage/storageAccounts/tableServices/tables/read (con ámbito de la cuenta de almacenamiento o superior)
Creación de tablas Microsoft.Storage/storageAccounts/tableServices/tables/write
Eliminar tabla Microsoft.Storage/storageAccounts/tableServices/tables/delete
Get Table ACL No disponible a través de OAuth
Set Table ACL No disponible a través de OAuth
Query Entities Microsoft.Storage/storageAccounts/tableServices/tables/entities/read
Insert Entity Microsoft. Storage/storageAccounts/tableServices/tables/entities/write o Microsoft. Storage/storageAccounts/tableServices/tables/entities/add/action
Insertar o combinar entidad Microsoft. Storage/storageAccounts/tableServices/tables/entities/write o (Microsoft.Storage /storageAccounts/tableServices/tables/entities/add/action y Microsoft. Storage/storageAccounts/tableServices/tables/entities/update/action)
Insertar o reemplazar entidad Microsoft. Storage/storageAccounts/tableServices/tables/entities/write o (Microsoft.Storage /storageAccounts/tableServices/tables/entities/add/action y Microsoft. Storage/storageAccounts/tableServices/tables/entities/update/action)
Update Entity Microsoft. Storage/storageAccounts/tableServices/tables/entities/write o Microsoft. Storage/storageAccounts/tableServices/tables/entities/update/action
Merge Entity Microsoft. Storage/storageAccounts/tableServices/tables/entities/write o Microsoft. Storage/storageAccounts/tableServices/tables/entities/update/action
Delete Entity Microsoft.Storage/storageAccounts/tableServices/tables/entities/delete

Consulte también