Share via


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:

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.

Diagram of role assignment with a condition.

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.

Diagram showing read access to blobs based on tags and custom security attributes.

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

  1. Inicie sesión en Azure Portal.

  2. Haga clic en Atributos de seguridad personalizados de Microsoft Entra ID>.

  3. Agregue un atributo denominado Project con los valores de Baker y Cascade. O bien use un atributo existente. Para obtener más información, vea Agregar o desactivar atributos de seguridad personalizados en Microsoft Entra ID.

    Screenshot of adding a custom security attribute.

Paso 2: Asignar el atributo de seguridad personalizado a un usuario

  1. En Microsoft Entra ID, cree un grupo de seguridad.

  2. Agregue un usuario como miembro del grupo.

  3. Asigne el atributo Project con un valor de Cascade al usuario. Para obtener más información, vea Asignar, actualizar, enumerar o quitar atributos de seguridad personalizados para un usuario.

    Screenshot of assigning a custom security attribute.

  4. Asegúrese de hacer clic en Guardar para guardar la asignación.

Paso 3: Configurar etiquetas de índice de blobs y almacenamiento

  1. 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.

  2. 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).

  3. Establezca el tipo de autenticación en Cuenta de usuario de Azure AD.

  4. 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

  1. Abra una nueva pestaña e inicie sesión en Azure Portal.

  2. Abra el grupo de recursos que tiene la cuenta de almacenamiento.

  3. Haga clic en Control de acceso (IAM).

  4. Haga clic en la pestaña Asignaciones de roles para ver todas las asignaciones de roles en este ámbito.

  5. Haga clic en Agregar>Agregar asignación de roles.

  6. En la pestaña Rol, seleccione el rol Lector de datos de Storage Blob.

  7. En la pestaña Miembros seleccione el grupo de seguridad que creó anteriormente.

  8. (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.

  9. En la pestaña Condiciones (opcional) , haga clic en Agregar condición.

    Aparece la página de condiciones de Agregar asignación de roles.

  10. 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.

  11. Haga clic en Leer un blob y, a continuación, en Seleccionar.

  12. En la sección Build expression (Generar expresión), haga clic en Agregar.

  13. 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.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. 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$>]
     )
    )
    
  15. Haga clic en Guardar para guardar la condición.

  16. 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

  1. Abra Azure Portal en una nueva ventana.

  2. Inicie sesión como el usuario que creó con el atributo de seguridad personalizado Project=Cascade.

  3. Abra la cuenta de almacenamiento y el contenedor que ha creado.

  4. 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.

    Screenshot of storage container with test files.

  5. 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.

  6. 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

  1. 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
    
  2. Use Get-AzRoleAssignment para obtener la asignación de roles que asignó al grupo de seguridad.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. 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`$>]))"
    
  4. Establezca la propiedad ConditionVersion del objeto de asignación de roles.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Use Set-AzRoleAssignment para actualizar la asignación de roles.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Prueba de la condición

  1. En una nueva ventana de PowerShell, use el comando Connect-AzAccount para iniciar sesión como miembro del grupo de seguridad.

    Connect-AzAccount
    
  2. Use New-AzStorageContext para establecer el contexto de la cuenta de almacenamiento.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. 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.
    ...
    
  4. 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

  1. 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
    
  2. 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>
    
  3. 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"
    }
    
  4. 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$>]))",
    
  5. Actualice la propiedad conditionVersion.

    "conditionVersion": "2.0",
    
  6. 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

  1. En una nueva ventana de comandos, use el comando az login para iniciar sesión como miembro del grupo de seguridad.

    az login
    
  2. 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.
    ...
    
  3. 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,
    ...
    }
    

Pasos siguientes