Consentire l'accesso in lettura ai BLOB in base ai tag e agli attributi di sicurezza personalizzati

Questo articolo illustra come consentire l'accesso in lettura ai BLOB in base ai tag di indice BLOB e agli attributi di sicurezza personalizzati usando condizioni di controllo degli accessi in base agli attributi. In questo modo è più semplice gestire l'accesso ai BLOB.

Prerequisiti

Per assegnare attributi di sicurezza personalizzati e aggiungere condizioni di assegnazione di ruolo nel tenant di Microsoft Entra, è necessario:

Importante

Per impostazione predefinita, Global Amministrazione istrator e altri ruoli di amministratore non dispongono delle autorizzazioni per leggere, definire o assegnare attributi di sicurezza personalizzati. Se non si soddisfano questi prerequisiti, non verranno visualizzati gli attributi principal/user nell'editor delle condizioni.

Condizione

In questo articolo si consente l'accesso in lettura ai BLOB se l'utente ha un attributo di sicurezza personalizzato corrispondente al tag di indice BLOB. A tale scopo, aggiungere una condizione all'assegnazione di ruolo.

Diagram of role assignment with a condition.

Ad esempio, se Brenda ha l'attributo Project=Baker, può leggere solo i BLOB con il Project=Baker tag di indice BLOB. Analogamente, Chandra può leggere solo i BLOB con Project=Cascade.

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

Ecco l'aspetto della condizione nel codice:

(
 (
  !(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$>]
 )
)

Per altre informazioni sulle condizioni, vedere Che cos'è il controllo degli accessi in base all'attributo di Azure?.

Passaggio 1: Aggiungere un nuovo attributo di sicurezza personalizzato

  1. Accedi al portale di Azure.

  2. Fare clic su Microsoft Entra ID>Attributi di sicurezza personalizzati.

  3. Aggiungere un attributo denominato Project con i valori di Baker e Cascade. In alternativa, usare un attributo esistente. Per altre informazioni, vedere Aggiungere o disattivare attributi di sicurezza personalizzati in Microsoft Entra ID.

    Screenshot of adding a custom security attribute.

Passaggio 2: Assegnare l'attributo di sicurezza personalizzato a un utente

  1. In Microsoft Entra ID creare un gruppo di sicurezza.

  2. Aggiungere un utente come membro del gruppo.

  3. Assegnare l'attributo Project con un valore di Cascade all'utente. Per altre informazioni, vedere Assegnare, aggiornare, elencare o rimuovere attributi di sicurezza personalizzati per un utente.

    Screenshot of assigning a custom security attribute.

  4. Assicurarsi di fare clic su Salva per salvare l'assegnazione.

Passaggio 3: Configurare i tag di archiviazione e indice BLOB

  1. Creare un account di archiviazione compatibile con la funzionalità dei tag di indice BLOB. Per altre informazioni, vedere Gestire e trovare i dati BLOB di Azure con tag di indice BLOB.

  2. Creare un nuovo contenitore all'interno dell'account di archiviazione e impostare il livello di accesso pubblico su Privato (nessun accesso anonimo).

  3. Impostare il tipo di autenticazione su Account utente di Azure AD.

  4. Caricare file di testo nel contenitore e impostare i tag di indice BLOB seguenti.

    file Chiave valore
    File di testo Baker Project Fornaio
    File di testo a catena Project Cascade

    Suggerimento

    Per informazioni sui caratteri consentiti per i tag di indice BLOB, vedere Impostazione dei tag di indice BLOB.

Passaggio 4: Assegnare Archiviazione ruolo Lettore dati BLOB con una condizione

  1. Aprire una nuova scheda e accedere al portale di Azure.

  2. Aprire il gruppo di risorse con l'account di archiviazione.

  3. Fare clic su Controllo di accesso (IAM).

  4. Fare clic sulla scheda Assegnazioni di ruolo per visualizzare le assegnazioni di ruolo in questo ambito.

  5. Fare clic su Aggiungi aggiungi>assegnazione di ruolo.

  6. Nella scheda Ruolo selezionare il ruolo lettore dati BLOB Archiviazione.

  7. Nella scheda Membri selezionare il gruppo di sicurezza creato in precedenza.

  8. (Facoltativo) Nella casella Descrizione immettere Accesso in lettura ai BLOB se l'utente dispone di un attributo di sicurezza personalizzato corrispondente al tag di indice BLOB.

  9. Nella scheda Condizioni (facoltativo) fare clic su Aggiungi condizione.

    Verrà visualizzata la pagina Aggiungi condizione di assegnazione di ruolo.

  10. Nella sezione Aggiungi azione fare clic su Aggiungi azione.

    Viene visualizzato il riquadro Seleziona un'azione. Questo riquadro è un elenco filtrato di azioni di dati in base all'assegnazione di ruolo che sarà la destinazione della condizione.

  11. Fare clic su Leggi un BLOB e quindi su Seleziona.

  12. Nella sezione Espressione di compilazione fare clic su Aggiungi.

  13. Immetti le impostazioni seguenti:

    Impostazione valore
    Origine attributo Entità di sicurezza
    Attributo <attributeset>_Project
    Operatore StringEquals
    Opzione Attributo
    Origine attributo Risorsa
    Attributo Tag di indice BLOB [Valori nella chiave]
    Key Project

    Nota

    Se Principal non è elencato come opzione nell'origine attributo, assicurarsi di avere definito l'attributo di sicurezza personalizzato come descritto in precedenza nel passaggio 1: Aggiungere un nuovo attributo di sicurezza personalizzato.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. Scorrere verso l'alto fino al tipo di editor e fare clic su Codice.

    La condizione dovrebbe essere simile alla seguente:

    (
     (
      !(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. Fare clic su Salva per salvare la condizione.

  16. Nella scheda Rivedi e assegna fare clic su Rivedi e assegna per assegnare il ruolo lettore di dati BLOB Archiviazione con una condizione.

Passaggio 5: Assegnare il ruolo lettore

  • Ripetere i passaggi precedenti per assegnare il ruolo Lettore per il gruppo di sicurezza nell'ambito del gruppo di risorse.

    Nota

    In genere non è necessario assegnare il ruolo Lettore. Tuttavia, questa operazione viene eseguita in modo da poter testare la condizione usando il portale di Azure.

Passaggio 6: Testare la condizione

  1. In una nuova finestra accedere al Portale di Azure.

  2. Accedere come utente creato con l'attributo Project=Cascade di sicurezza personalizzato.

  3. Aprire l'account di archiviazione e il contenitore creati.

  4. Assicurarsi che il metodo di autenticazione sia impostato su Account utente di Azure AD e non sulla chiave di accesso.

    Screenshot of storage container with test files.

  5. Fare clic sul file di testo Baker.

    Non dovrebbe essere possibile visualizzare o scaricare il BLOB e dovrebbe essere visualizzato un messaggio di autorizzazione non riuscito.

  6. Fare clic su File di testo a cascata.

    Dovrebbe essere possibile visualizzare e scaricare il BLOB.

Azure PowerShell

È anche possibile usare Azure PowerShell per aggiungere condizioni di assegnazione di ruolo. I comandi seguenti illustrano come aggiungere condizioni. Per informazioni, vedere Esercitazione: Aggiungere una condizione di assegnazione di ruolo per limitare l'accesso ai BLOB tramite Azure PowerShell.

Aggiungi una condizione

  1. Usare il comando Connessione-AzAccount e seguire le istruzioni visualizzate per accedere alla directory come role based Controllo di accesso Amministrazione istrator.

    Connect-AzAccount
    
  2. Usare Get-AzRoleAssignment per ottenere l'assegnazione di ruolo assegnata al gruppo di sicurezza.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. Impostare la Condition proprietà dell'oggetto assegnazione di ruolo. Assicurarsi di usare il nome del set di attributi.

    $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. Impostare la ConditionVersion proprietà dell'oggetto assegnazione di ruolo.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Usare Set-AzRoleAssignment per aggiornare l'assegnazione di ruolo.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Testare la condizione

  1. In una nuova finestra di PowerShell usare il comando Connessione-AzAccount per accedere come membro del gruppo di sicurezza.

    Connect-AzAccount
    
  2. Usare New-Az Archiviazione Context per impostare il contesto per l'account di archiviazione.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Usare Get-Az Archiviazione Blob per provare a leggere il file Baker.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
    

    Non dovrebbe essere possibile leggere il BLOB e dovrebbe essere visualizzato un messaggio di autorizzazione non riuscito.

    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. Usare Get-Az Archiviazione Blob per provare a leggere il file 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
    

Interfaccia della riga di comando di Azure

È anche possibile usare l'interfaccia della riga di comando di Azure per aggiungere condizioni per le assegnazioni di ruolo. I comandi seguenti illustrano come aggiungere condizioni. Per informazioni, vedere Esercitazione: Aggiungere una condizione di assegnazione di ruolo per limitare l'accesso ai BLOB tramite l'interfaccia della riga di comando di Azure.

Aggiungi una condizione

  1. Usare il comando az login e seguire le istruzioni visualizzate per accedere alla directory come role based Controllo di accesso Amministrazione istrator.

    az login
    
  2. Usare az role assignment list per ottenere l'assegnazione di ruolo assegnata al gruppo di sicurezza.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Creare un file JSON con il formato seguente.

    {
        "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. Aggiornare la condition proprietà . Assicurarsi di usare il nome del set di attributi.

    "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. Aggiornare la conditionVersion proprietà .

    "conditionVersion": "2.0",
    
  6. Usare az role assignment update per aggiungere la condizione all'assegnazione di ruolo.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

Testare la condizione

  1. In una nuova finestra di comando usare il comando az login per accedere come membro del gruppo di sicurezza.

    az login
    
  2. Usare az storage blob show per provare a leggere le proprietà per il file Baker.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
    

    Non dovrebbe essere possibile leggere il BLOB e dovrebbe essere visualizzato un messaggio di autorizzazione non riuscito.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Usare az storage blob show per provare a leggere le proprietà per il file 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,
    ...
    }
    

Passaggi successivi