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:
- Attributo Definition Amministrazione istrator e Attribute Assignment Amministrazione istrator
- Controllo di accesso Amministrazione istrator basato su ruoli
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.
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
.
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
Accedi al portale di Azure.
Fare clic su Microsoft Entra ID>Attributi di sicurezza personalizzati.
Aggiungere un attributo denominato
Project
con i valori diBaker
eCascade
. In alternativa, usare un attributo esistente. Per altre informazioni, vedere Aggiungere o disattivare attributi di sicurezza personalizzati in Microsoft Entra ID.
Passaggio 2: Assegnare l'attributo di sicurezza personalizzato a un utente
In Microsoft Entra ID creare un gruppo di sicurezza.
Aggiungere un utente come membro del gruppo.
Assegnare l'attributo
Project
con un valore diCascade
all'utente. Per altre informazioni, vedere Assegnare, aggiornare, elencare o rimuovere attributi di sicurezza personalizzati per un utente.Assicurarsi di fare clic su Salva per salvare l'assegnazione.
Passaggio 3: Configurare i tag di archiviazione e indice BLOB
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.
Creare un nuovo contenitore all'interno dell'account di archiviazione e impostare il livello di accesso pubblico su Privato (nessun accesso anonimo).
Impostare il tipo di autenticazione su Account utente di Azure AD.
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
Aprire una nuova scheda e accedere al portale di Azure.
Aprire il gruppo di risorse con l'account di archiviazione.
Fare clic su Controllo di accesso (IAM).
Fare clic sulla scheda Assegnazioni di ruolo per visualizzare le assegnazioni di ruolo in questo ambito.
Fare clic su Aggiungi aggiungi>assegnazione di ruolo.
Nella scheda Ruolo selezionare il ruolo lettore dati BLOB Archiviazione.
Nella scheda Membri selezionare il gruppo di sicurezza creato in precedenza.
(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.
Nella scheda Condizioni (facoltativo) fare clic su Aggiungi condizione.
Verrà visualizzata la pagina Aggiungi condizione di assegnazione di ruolo.
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.
Fare clic su Leggi un BLOB e quindi su Seleziona.
Nella sezione Espressione di compilazione fare clic su Aggiungi.
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.
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$>] ) )
Fare clic su Salva per salvare la condizione.
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
In una nuova finestra accedere al Portale di Azure.
Accedere come utente creato con l'attributo
Project=Cascade
di sicurezza personalizzato.Aprire l'account di archiviazione e il contenitore creati.
Assicurarsi che il metodo di autenticazione sia impostato su Account utente di Azure AD e non sulla chiave di accesso.
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.
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
Usare il comando Connessione-AzAccount e seguire le istruzioni visualizzate per accedere alla directory come role based Controllo di accesso Amministrazione istrator.
Connect-AzAccount
Usare Get-AzRoleAssignment per ottenere l'assegnazione di ruolo assegnata al gruppo di sicurezza.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
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`$>]))"
Impostare la
ConditionVersion
proprietà dell'oggetto assegnazione di ruolo.$groupRoleAssignment.ConditionVersion = "2.0"
Usare Set-AzRoleAssignment per aggiornare l'assegnazione di ruolo.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Testare la condizione
In una nuova finestra di PowerShell usare il comando Connessione-AzAccount per accedere come membro del gruppo di sicurezza.
Connect-AzAccount
Usare New-Az Archiviazione Context per impostare il contesto per l'account di archiviazione.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
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. ...
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
Usare il comando az login e seguire le istruzioni visualizzate per accedere alla directory come role based Controllo di accesso Amministrazione istrator.
az login
Usare az role assignment list per ottenere l'assegnazione di ruolo assegnata al gruppo di sicurezza.
az role assignment list --assignee <groupObjectId> --scope <scope>
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" }
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$>]))",
Aggiornare la
conditionVersion
proprietà ."conditionVersion": "2.0",
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
In una nuova finestra di comando usare il comando az login per accedere come membro del gruppo di sicurezza.
az login
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. ...
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, ... }