Vai al contenuto

Configurare Azure SQL Server con Identità Gestita in Django

Scopri come integrare Microsoft Entra con Azure SQL Server in un’app Django, eliminando la necessità di credenziali fisse.

La crescente preoccupazione per la sicurezza dei dati impone nuove soluzioni per gestire in modo sicuro le credenziali di accesso ai database. Utilizzare le identità gestite assegnate dall’utente (User Assigned Managed Identity) in combinazione con il framework Django, permette di evitare l’uso di username e password fisse, migliorando così la sicurezza del sistema. Questa guida spiega come configurare Azure SQL Server per autenticarsi tramite un’identità gestita e come integrare questa funzionalità in una web app Django.

Perché Usare le Identità Gestite

Microsoft Entra consente di integrare l’autenticazione con Azure SQL Server eliminando la necessità di salvare le credenziali in chiaro. Questo aumenta la sicurezza delle PaaS services di Azure (come Function App o App Services) facilitando la comunicazione sicura tra i servizi.

Architettura

L’architettura implementata per questa soluzione prevede la configurazione di diversi componenti:

  • Amministratore del database: Un utente designato per configurare e mantenere gli utenti del database.
  • Identità gestite: Create dal dipartimento sicurezza, queste identità vengono utilizzate dalle Web App per richiedere accessi al database.
  • Database configurato solo con Entra: Sostituisce l’autenticazione tradizionale con username e password con Entra-only authentication.
  • Web App: Implementata dal team di sviluppo per la logica di business e l’accesso al database.

Procedura di Configurazione

Vediamo ora in dettaglio i passaggi da seguire per configurare un’Azure SQL Server con identità gestite in un progetto Django.

1. Creazione dell’Identità Gestita

Dal Azure Portal, create una User Assigned Managed Identity e annotate i relativi Client ID e Resource ID, che serviranno in seguito per le configurazioni.

2. Configurazione di Azure SQL Server

Durante la configurazione di Azure SQL Server, selezionate “Microsoft Entra-only authentication”. Questo approccio elimina totalmente l’uso di username e password tradizionali, aumentando la sicurezza del sistema.

3. Accesso al Database tramite Identità Gestita

Utilizzate PowerShell per accedere al database con l’account amministratore creato in precedenza. Eseguiamo il seguente comando per loggare al SQL Server:

sqlcmd -S .database.windows.net -d  -U  -G

4. Configurazione della Web App in Django

Create una nuova Web App in Azure con stack Python. Poi, assegnate l’identità gestita alla Web App tramite Azure Cloud Shell, usando il comando:

az webapp identity assign --resource-group  --name  --identities 

Infine, aggiungete il pacchetto mssql-django in requirements.txt e configurate il file settings.py di Django come segue:

DATABASES = {    'default': {        'ENGINE': 'mssql',        'NAME': '',        'HOST': '.database.windows.net',        'PORT': '1433',        'USER': '',        'OPTIONS': {            'driver': 'ODBC Driver 18 for SQL Server',            'extra_params': 'Authentication=ActiveDirectoryMsi',        }    }}

5. Creazione della Logica di Accesso al Database

Create una vista in Django per accedere al database. In views.py, scrivete il codice seguente per eseguire query al database:

def index(request):    raw_text = ""    with connection.cursor() as cursor:        cursor.execute("SELECT Column2 FROM TestTable")        rows = cursor.fetchall()    for row in rows:        raw_text = row    return HttpResponse(raw_text, content_type='text/plain')

I comandi SQL necessari per creare una tabella di test sono mostrati di seguito:

CREATE TABLE TestTable (    Column1 INT,    Column2 NVARCHAR(100));INSERT INTO TestTable (Column1, Column2) VALUES (1, 'First Record');INSERT INTO TestTable (Column1, Column2) VALUES (2, 'Second Record');

Conclusione

In questo modo, è possibile configurare una Web App Django che utilizza Azure SQL Server autenticandosi attraverso un’identità gestita. Questo approccio garantisce maggiore sicurezza e facilità di gestione delle credenziali, eliminando la necessità di username e password fissi.