Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Prerrequisitos
Para asignar atributos de seguridad personalizados y agregar condiciones de asignaciones de roles en el inquilino de Microsoft Entra, necesita:
- Administrador de definiciones de atributos y Administrador de asignación de atributos
- Administrador de control de acceso basado en roles
Importante
De forma predeterminada, el administrador global y otros roles de administrador no tienen permisos para leer, definir ni asignar atributos de seguridad personalizados. Si no cumple estos requisitos previos, no verá los atributos del principal 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. Esto se logra agregando 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 blob Project=Baker. Del mismo modo, 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 Microsoft Entra ID>Atributos de seguridad personalizados.
Agregue un atributo denominado
Projectcon valores deBakeryCascade. 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
Projectatributo con un valor deCascadeal 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: Configuración de almacenamiento y etiquetas de índice de blobs
Cree una cuenta de almacenamiento que sea compatible con la función de etiquetas indexadas de blobs. Para obtener más información, consulte Administrar y buscar datos de Azure Blob con etiquetas de índice de blobs.
Cree un contenedor en 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.
Suba los archivos de texto al contenedor y establezca las siguientes etiquetas de índice de blobs.
Archivo Key Importancia Archivo de texto Baker Proyecto Pastelero Archivo de texto en cascada Proyecto Cascada 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: Asignación del rol 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 rol.
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, introduzca Acceso de lectura a los blobs cuando el usuario tenga un atributo de seguridad personalizado que coincida con la etiqueta del índice de blobs.
En la pestaña Condiciones (opcional), haga clic en Agregar condición.
Aparece la página Agregar una condición de asignación de funciones.
En la sección Agregar acción , haga clic en Agregar acción.
Aparece el panel Seleccionar 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, haga clic en Seleccionar.
En la sección Build expression (Expresión de compilación ), haga clic en Agregar.
Escriba la siguiente configuración:
Configuración Importancia Origen de atributo Entidad de seguridad Atributo <attributeset>_Proyecto Operator StringEquals Opción Atributo Origen de atributo Resource Atributo Etiquetas de índice de blobs [Valores de la clave] Key Proyecto Nota:
Si Principal no aparece como una opción en la fuente del atributo, asegúrese de que ha definido el atributo de seguridad personalizado como se ha descrito anteriormente en Paso 1: Añadir un nuevo atributo de seguridad personalizado.
Desplácese hacia arriba hasta 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: Asignar el rol 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 Lector. Sin embargo, esto se hace para que pueda probar la condición mediante Azure Portal.
Paso 6: Probar la condición
En una nueva ventana, abra Azure Portal.
Inicie sesión como el usuario que creó con el
Project=Cascadeatributo de seguridad personalizado.Abra la cuenta de almacenamiento y el contenedor que creó.
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 comandos siguientes 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 Connect-AzAccount y siga las instrucciones que aparecen para iniciar sesión en el directorio como Administrador de control de acceso basado en roles.
Connect-AzAccountUtilice Get-AzRoleAssignment para obtener la asignación de rol que asignó al grupo de seguridad.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>Establezca la
Conditionpropiedad 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
ConditionVersionpropiedad 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-AzAccountUse 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 $bearerCtxNO 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 asignaciones de roles. Los comandos siguientes 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 Administrador de control de acceso basado en roles.
az loginUse 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 siguiente formato.
{ "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
conditionpropiedad. Asegúrese de usar su nombre de 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
conditionVersionpropiedad."conditionVersion": "2.0",Use az role assignment update para agregar la condición a 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 loginUse 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 loginNO 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, ... }