Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nella maggior parte dei casi, un'assegnazione di ruolo concede le autorizzazioni necessarie alle risorse di Azure. Tuttavia, in alcuni casi potrebbe essere necessario fornire un controllo di accesso più granulare aggiungendo una condizione di assegnazione di ruolo.
In questa esercitazione si apprenderà come:
- Aggiungere una condizione a un'assegnazione di ruolo
- Limitare l'accesso ai BLOB in base a un tag indice BLOB
Importante
Il controllo degli accessi in base all'attributo di Azure (Azure ABAC) è disponibile a livello generale per il controllo dell'accesso ad Archiviazione BLOB di Azure, Azure Data Lake Storage Gen2 e Code di Azure tramite gli attributi request, resource, environment e principal nei livelli di prestazioni dell'account di archiviazione Standard e Premium. Il BLOB di elenco include attualmente l'attributo di richiesta e l'attributo di richiesta snapshot per lo spazio dei nomi gerarchico, disponibili in ANTEPRIMA. Per informazioni complete sullo stato della funzionalità di controllo degli accessi in base all'attributo (ABAC) per Archiviazione di Azure, vedere Stato delle funzionalità relative alle condizioni in Archiviazione di Azure.
Vedere le condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure per termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale.
Prerequisiti
Per informazioni sui prerequisiti per l'aggiunta o la modifica di condizioni di assegnazione di ruolo, vedere Prerequisiti per le condizioni.
Condizione
In questa esercitazione si limita l'accesso ai BLOB con un tag specifico. Ad esempio, si aggiunge una condizione a un'assegnazione di ruolo in modo che Chandra possa leggere solo i file con il tag Project=Cascade.

Se Chandra tenta di leggere un BLOB senza il tag Project=Cascade, l'accesso non è consentito.

Ecco l'aspetto della condizione nel codice:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND NOT
SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
Passaggio 1: Accedere ad Azure
Usare il comando az login e seguire le istruzioni visualizzate per accedere alla directory come Amministratore accesso utenti o Proprietario.
az loginUsare az account show per ottenere l'ID delle sottoscrizioni.
az account showDeterminare l'ID sottoscrizione e inizializzare la variabile.
subscriptionId="<subscriptionId>"
Passaggio 2: Creare un utente
Usare az ad user create per creare un utente o trovare un utente esistente. Questa esercitazione usa Chandra come esempio.
Inizializzare la variabile per l'ID oggetto dell'utente.
userObjectId="<userObjectId>"
Passaggio 3: Configurare l'archiviazione
È possibile autorizzare l'accesso all'archiviazione BLOB dall'interfaccia della riga di comando di Azure con le credenziali di Microsoft Entra o usando la chiave di accesso dell'account di archiviazione. Questo articolo illustra come autorizzare le operazioni di archiviazione BLOB usando Microsoft Entra ID. Per altre informazioni, vedere Avvio rapido: Creare, scaricare ed elencare BLOB con l'interfaccia della riga di comando di Azure
Usare az storage account per creare un account di archiviazione compatibile con la funzionalità di indice BLOB. Per altre informazioni, vedere Gestire e trovare i dati BLOB di Azure con tag indice BLOB.
Usare az storage container per creare un nuovo contenitore BLOB all'interno dell'account di archiviazione e impostare il livello di accesso anonimo su Privato (nessun accesso anonimo).
Usare az storage blob upload per caricare un file di testo nel contenitore.
Aggiungere il tag di indice BLOB seguente al file di testo. Per altre informazioni, vedere Usare i tag indice BLOB per gestire e trovare dati in Archiviazione BLOB di Azure.
Annotazioni
I BLOB supportano anche la possibilità di archiviare metadati chiave-valore arbitrari definiti dall'utente. Anche se i metadati sono simili ai tag indice BLOB, è necessario usare i tag indice BLOB con le condizioni.
Chiave Valore Progetto Cascade Caricare un secondo file di testo nel contenitore.
Aggiungere il tag di indice BLOB seguente al secondo file di testo.
Chiave Valore Progetto Baker Inizializzare le variabili seguenti con i nomi usati.
resourceGroup="<resourceGroup>" storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameCascade="<blobNameCascade>" blobNameBaker="<blobNameBaker>"
Passaggio 4: Assegnare un ruolo con una condizione
Inizializzare le variabili del ruolo Lettore di dati BLOB di archiviazione.
roleDefinitionName="Storage Blob Data Reader" roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Inizializzare l'ambito per il gruppo di risorse.
scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Inizializzare la condizione.
condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<\$key_case_sensitive\$>] StringEquals 'Cascade'))"In Bash, se l'espansione della cronologia è abilitata, è possibile che venga visualizzato il messaggio
bash: !: event not founda causa del punto esclamativo (!). In questo caso, è possibile disabilitare l'espansione della cronologia con il comandoset +H. Per riabilitare l'espansione della cronologia, utilizzareset -H.In Bash, un segno di dollaro ($) ha un significato speciale per l'espansione. Se la condizione include un segno di dollaro ($), potrebbe essere necessario anteporre una barra rovesciata (\). Ad esempio, questa condizione usa segni di dollaro per delineare il nome della chiave del tag. Per altre informazioni sulle regole per le virgolette in Bash, vedere Virgolette doppie.
Inizializzare la versione e la descrizione della condizione.
conditionVersion="2.0" description="Read access to blobs with the tag Project=Cascade"Usare az role assignment create per assegnare il ruolo Lettore di dati BLOB di archiviazione con una condizione all'utente in un ambito del gruppo di risorse.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersionDi seguito è riportato un esempio dell'output:
{ "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
Passaggio 5: (Facoltativo) Visualizzare la condizione nel portale di Azure
Nel portale di Azure aprire il gruppo di risorse.
Seleziona Controllo di accesso (IAM).
Nella scheda Assegnazioni di ruolo trovare l'assegnazione di ruolo.
Nella colonna Condizione selezionare Visualizza/Modifica per visualizzare la condizione.
Passaggio 6: Testare la condizione
Aprire una nuova finestra di comando.
Usare az login per accedere come Chandra.
az loginInizializzare le variabili seguenti con i nomi usati.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"Usare az storage blob show per provare a leggere le proprietà del file per il progetto Baker.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode loginEcco un esempio dell'output. Si noti che non è possibile leggere il file a causa della condizione aggiunta.
You do not have the required permissions needed to perform this operation. Depending on your operation, you may need to be assigned one of the following roles: "Storage Blob Data Contributor" "Storage Blob Data Reader" "Storage Queue Data Contributor" "Storage Queue Data Reader" If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value.Leggi le proprietà del file relativo al progetto Cascade.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode loginEcco un esempio dell'output. Si noti che è possibile leggere le proprietà del file perché ha il tag Project=Cascade.
{ "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, "isAppendBlobSealed": null, "isCurrentVersion": null, "lastAccessedOn": null, "metadata": {}, "name": "<blobNameCascade>", "objectReplicationDestinationPolicy": null, "objectReplicationSourceProperties": [], "properties": { "appendBlobCommittedBlockCount": null, "blobTier": "Hot", "blobTierChangeTime": null, "blobTierInferred": true, "blobType": "BlockBlob", "contentLength": 7, "contentRange": null, ... }
Passaggio 7: (Facoltativo) Modificare la condizione
Nell'altra finestra di comando usare az role assignment list per ottenere l'assegnazione di ruolo aggiunta.
az role assignment list --assignee $userObjectId --resource-group $resourceGroupL'output è simile al seguente:
[ { "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "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" } ]Creare un file JSON con il formato seguente e aggiornare le
conditionproprietà edescription.{ "canDelegate": null, "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Baker'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade or Project=Baker", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "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" }Usare az role assignment update per aggiornare la condizione per l'assegnazione di ruolo.
az role assignment update --role-assignment "./path/roleassignment.json"
Passaggio 8: Pulire le risorse
Usare az role assignment delete per rimuovere l'assegnazione di ruolo e la condizione aggiunta.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroupEliminare l'account di archiviazione creato.
Eliminare l'utente creato.
