Permitir el acceso de lectura a blobs en función de etiquetas y atributos de seguridad personalizados
En este artículo, aprenderá a permitir el acceso de lectura a blobs basado en etiquetas de índice de blobs y atributos de seguridad personalizados mediante condiciones de control de acceso basado en atributos (ABAC). Esto puede facilitar la administración del acceso a los blobs.
Requisitos previos
Para asignar atributos de seguridad personalizados y agregar condiciones de asignaciones de roles en el inquilino de Microsoft Entra, necesita:
- Administrador de definición de atributos y administrador de asignación de atributos
- Control de acceso basado en rol Administración istrator
Importante
De forma predeterminada, el rol Administrador global y otros roles de administrador no tienen permisos para leer, definir o asignar atributos de seguridad personalizados. Si no cumple estos requisitos previos, no verá los atributos de entidad de seguridad o usuario en el editor de condiciones.
Condición
En este artículo, permitirá el acceso de lectura a blobs si el usuario tiene un atributo de seguridad personalizado que coincide con la etiqueta de índice de blobs. Para lograrlo, agregue una condición a la asignación de roles.
Por ejemplo, si Brenda tiene el atributo Project=Baker
, solo puede leer blobs con la etiqueta de índice de blobs Project=Baker
. De forma similar, Chandra solo puede leer blobs con Project=Cascade
.
Este es el aspecto de la condición en el código:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
)
)
Para más información sobre las condiciones, consulte ¿Qué es el control de acceso basado en atributos de Azure (Azure ABAC)?.
Paso 1: Agregar un nuevo atributo de seguridad personalizado
Inicie sesión en Azure Portal.
Haga clic en Atributos de seguridad personalizados de Microsoft Entra ID>.
Agregue un atributo denominado
Project
con los valores deBaker
yCascade
. O bien use un atributo existente. Para obtener más información, vea Agregar o desactivar atributos de seguridad personalizados en Microsoft Entra ID.
Paso 2: Asignar el atributo de seguridad personalizado a un usuario
En Microsoft Entra ID, cree un grupo de seguridad.
Agregue un usuario como miembro del grupo.
Asigne el atributo
Project
con un valor deCascade
al usuario. Para obtener más información, vea Asignar, actualizar, enumerar o quitar atributos de seguridad personalizados para un usuario.Asegúrese de hacer clic en Guardar para guardar la asignación.
Paso 3: Configurar etiquetas de índice de blobs y almacenamiento
Cree una cuenta de almacenamiento que sea compatible con la característica de etiquetas de índice de blobs. Para obtener más información, consulte Administración y búsqueda de datos de Azure Blob con etiquetas de índice de blobs.
Cree un contenedor de blobs dentro de la cuenta de almacenamiento y establezca el nivel de acceso Público en Privado (sin acceso anónimo).
Establezca el tipo de autenticación en Cuenta de usuario de Azure AD.
Cargue archivos de texto en el contenedor y establezca las siguientes etiquetas de índice de blobs.
Archivo Clave Value Archivo de texto Baker Proyecto Baker Archivo de texto Cascade Proyecto Cascade Sugerencia
Para obtener información sobre los caracteres permitidos para las etiquetas de índice de blobs, consulte Establecimiento de etiquetas de índice de blobs.
Paso 4: Asignar el rol de lector de datos de Storage Blob con una condición
Abra una nueva pestaña e inicie sesión en Azure Portal.
Abra el grupo de recursos que tiene la cuenta de almacenamiento.
Haga clic en Control de acceso (IAM).
Haga clic en la pestaña Asignaciones de roles para ver todas las asignaciones de roles en este ámbito.
Haga clic en Agregar>Agregar asignación de roles.
En la pestaña Rol, seleccione el rol Lector de datos de Storage Blob.
En la pestaña Miembros seleccione el grupo de seguridad que creó anteriormente.
(Opcional) En el cuadro Descripción, escriba Acceso de lectura a blobs si el usuario tiene un atributo de seguridad personalizado que coincide con la etiqueta de índice de blobs.
En la pestaña Condiciones (opcional) , haga clic en Agregar condición.
Aparece la página de condiciones de Agregar asignación de roles.
En la sección Agregar acción, haga clic en Agregar acción.
Se muestra el panel Selección de una acción. Este panel es una lista filtrada de acciones de datos basada en la asignación de roles que será el destino de la condición.
Haga clic en Leer un blob y, a continuación, en Seleccionar.
En la sección Build expression (Generar expresión), haga clic en Agregar.
Escriba la siguiente configuración:
Configuración Valor Origen del atributo Principal Attribute <attributeset>_Project Operador StringEquals Opción Atributo Origen del atributo Resource Atributo Etiquetas de índice de blobs [Valores en clave] Clave Proyecto Nota:
Si entidad de seguridad no aparece como opción en Origen de atributo, asegúrese de que ha definido el atributo de seguridad personalizado como se describió anteriormente en Paso 1: Agregar un nuevo atributo de seguridad personalizado.
Desplácese hacia arriba hasta Editor type (tipo de editor) y haga clic en Código.
La condición debe tener un aspecto similar al siguiente:
( ( !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) ) OR ( @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ) )
Haga clic en Guardar para guardar la condición.
En la pestaña Revisar y asignar, haga clic en Revisar y asignar para asignar el rol Lector de datos de Storage Blob con una condición.
Paso 5: Asignación del rol de lector
Repita los pasos anteriores para asignar el rol de lector del grupo de seguridad en el ámbito del grupo de recursos.
Nota:
Normalmente no es necesario asignar el rol de lector. Sin embargo, esto se hace para que pueda probar la condición mediante Azure Portal.
Paso 6: Prueba de la condición
Abra Azure Portal en una nueva ventana.
Inicie sesión como el usuario que creó con el atributo de seguridad personalizado
Project=Cascade
.Abra la cuenta de almacenamiento y el contenedor que ha creado.
Asegúrese de que el método de autenticación esté establecido en Cuenta de usuario de Azure AD y no en Clave de acceso.
Haga clic en el archivo de texto Baker.
NO debería poder ver ni descargar el blob y se debería mostrar un mensaje de error de autorización.
Haga clic en el archivo de texto Cascade.
Debería poder ver y descargar el blob.
Azure PowerShell
También puede usar Azure PowerShell para agregar condiciones de asignación de roles. Los siguientes comandos muestran cómo agregar condiciones. Para más información, consulte Tutorial: Adición de una condición de asignación de roles para restringir el acceso a blobs mediante Azure PowerShell.
Agregar una condición
Use el comando Conectar-AzAccount y siga las instrucciones que parecen iniciar sesión en el directorio como Control de acceso basado en rol Administración istrator.
Connect-AzAccount
Use Get-AzRoleAssignment para obtener la asignación de roles que asignó al grupo de seguridad.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
Establezca la propiedad
Condition
del objeto de asignación de roles. Asegúrese de usar el nombre del conjunto de atributos.$groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"
Establezca la propiedad
ConditionVersion
del objeto de asignación de roles.$groupRoleAssignment.ConditionVersion = "2.0"
Use Set-AzRoleAssignment para actualizar la asignación de roles.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Prueba de la condición
En una nueva ventana de PowerShell, use el comando Connect-AzAccount para iniciar sesión como miembro del grupo de seguridad.
Connect-AzAccount
Use New-AzStorageContext para establecer el contexto de la cuenta de almacenamiento.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
Use Get-AzStorageBlob para intentar leer el archivo Baker.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
NO debería poder leer el blob y se debería mostrar un mensaje de error de autorización.
Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation using this permission. ...
Use Get-AzStorageBlob para intentar leer el archivo Cascade.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx You should be able to read the blob. AccountName: <storageAccountName>, ContainerName: <containerName> Name BlobType Length ContentType LastModified AccessTier SnapshotT ime ---- -------- ------ ----------- ------------ ---------- --------- CascadeFile.txt BlockBlob 7 text/plain 2021-04-24 05:35:24Z Hot
CLI de Azure
También puede usar la CLI de Azure para agregar condiciones de asignación de roles. Los siguientes comandos muestran cómo agregar condiciones. Para más información, consulte Tutorial: Adición de una condición de asignación de roles para restringir el acceso a blobs mediante la CLI de Azure.
Agregar una condición
Use el comando az login y siga las instrucciones que aparecen para iniciar sesión en el directorio como Role Based Access Control Administración istrator.
az login
Use az role assignment list para obtener la asignación de roles que asignó al grupo de seguridad.
az role assignment list --assignee <groupObjectId> --scope <scope>
Cree un archivo JSON con el formato siguiente.
{ "canDelegate": null, "condition": "", "conditionVersion": "", "description": "", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{groupObjectId}", "principalName": "{principalName}", "principalType": "Group", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
Actualice la propiedad
condition
. Asegúrese de usar el nombre del conjunto de atributos."condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",
Actualice la propiedad
conditionVersion
."conditionVersion": "2.0",
Use az role assignment update para agregar la condición de la asignación de roles.
az role assignment update --role-assignment "./path/roleassignment.json"
Prueba de la condición
En una nueva ventana de comandos, use el comando az login para iniciar sesión como miembro del grupo de seguridad.
az login
Use az storage blob show para intentar leer las propiedades del archivo Baker.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
NO debería poder leer el blob y se debería mostrar un mensaje de error de autorización.
You do not have the required permissions needed to perform this operation. ...
Use az storage blob show para intentar leer las propiedades del archivo Cascade.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login You should be able to read the blob. { "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, ... }