Configurare l'accesso sicuro ai servizi di intelligenza artificiale

Completato

Le soluzioni di database abilitate per intelligenza artificiale espongono spesso endpoint modello che le applicazioni chiamano per generare stime, incorporamenti o altre risposte basate sull'intelligenza artificiale. La protezione di questi endpoint protegge sia i modelli di intelligenza artificiale che i dati elaborati. L'identità gestita offre un modo sicuro e senza credenziali per autenticare le applicazioni agli endpoint del modello.

Quando le applicazioni chiamano Azure OpenAI, Azure Machine Learning o altri servizi di intelligenza artificiale dall'interno dell'ambiente di database, è necessario controllare chi può richiamare queste chiamate e proteggere il canale di comunicazione. Verranno ora esaminate le strategie per proteggere gli endpoint del modello nei database SQL Server, SQL di Azure e SQL in Microsoft Fabric.

Comprendere i problemi di sicurezza degli endpoint del modello

Gli endpoint del modello presentano problemi di sicurezza univoci rispetto alle operazioni di database tradizionali. Questi endpoint spesso elaborano dati sensibili, possono comportare costi significativi per ogni chiamata e possono esporre la proprietà intellettuale incorporata in modelli ottimizzati.

Cosa accade se un utente ottiene l'accesso non autorizzato? Possono esfiltrare i dati tramite richieste attentamente create, provocare costi imprevisti con chiamate API eccessive, o analizzare i comportamenti del modello proprietario. Ecco perché la protezione di questi endpoint richiede l'autenticazione, l'autorizzazione e il monitoraggio.

Nei database SQL di Azure e nei database SQL in Microsoft Fabric, è possibile chiamare servizi di intelligenza artificiale esterni usando stored procedure o funzioni che effettuano richieste HTTP. Queste chiamate devono eseguire l'autenticazione al servizio di intelligenza artificiale, in genere usando le chiavi API o l'identità gestita.

Configurare l'identità gestita per i servizi di intelligenza artificiale

L'identità gestita elimina la necessità di archiviare le chiavi API nel codice del database o dell'applicazione. Azure gestisce automaticamente le credenziali di identità e si concede a quell'identità l'accesso ai servizi di intelligenza artificiale.

Per un database SQL di Azure che deve chiamare Azure OpenAI, iniziare abilitando l'identità gestita assegnata dal sistema:

-- The managed identity is enabled in Azure portal or via Azure CLI
-- Verify the identity exists
SELECT * FROM sys.dm_external_provider_certificate_store;

Concedere quindi all'identità gestita l'accesso ad Azure OpenAI usando il controllo degli accessi in base al ruolo di Azure:

# Get the managed identity principal ID from Azure SQL
$sqlIdentity = (Get-AzSqlServer -ServerName myserver -ResourceGroupName myrg).Identity.PrincipalId

# Assign Cognitive Services User role on the Azure OpenAI resource
New-AzRoleAssignment -ObjectId $sqlIdentity `
    -RoleDefinitionName "Cognitive Services User" `
    -Scope "/subscriptions/{sub-id}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{aoai-name}"

Creare una credenziale a livello di database che usa l'identità gestita:

CREATE DATABASE SCOPED CREDENTIAL AzureOpenAICredential
WITH IDENTITY = 'Managed Identity',
SECRET = '{"resourceId": "https://cognitiveservices.azure.com/"}';

Questa credenziale indica a SQL di ottenere un token per l'ambito delle risorse di Servizi cognitivi usando la relativa identità gestita.

Implementare chiamate di endpoint sicure

Ora mettiamo tutto insieme. Usare la chiamata all'endpoint REST esterno per chiamare i servizi di intelligenza artificiale in modo sicuro. Creare prima di tutto un'origine dati esterna che faccia riferimento all'endpoint di intelligenza artificiale:

CREATE EXTERNAL DATA SOURCE AzureOpenAI
WITH (
    TYPE = REST,
    LOCATION = 'https://myopenai.openai.azure.com',
    CREDENTIAL = AzureOpenAICredential
);

Creare quindi una stored procedure che chiama l'endpoint di intelligenza artificiale:

CREATE PROCEDURE dbo.GetEmbedding
    @InputText nvarchar(max),
    @Embedding nvarchar(max) OUTPUT
AS
BEGIN
    DECLARE @payload nvarchar(max) = JSON_OBJECT('input': @InputText);
    DECLARE @response nvarchar(max);
    
    EXEC sp_invoke_external_rest_endpoint
        @url = 'https://myopenai.openai.azure.com/openai/deployments/text-embedding/embeddings?api-version=2024-02-01',
        @method = 'POST',
        @payload = @payload,
        @credential = AzureOpenAICredential,
        @response = @response OUTPUT;
    
    SET @Embedding = JSON_VALUE(@response, '$.data[0].embedding');
END;

Concedere l'autorizzazione di esecuzione solo agli utenti che devono accedere alle funzionalità di intelligenza artificiale:

-- Create a role for AI feature access
CREATE ROLE AIFeatureUsers;
GRANT EXECUTE ON dbo.GetEmbedding TO AIFeatureUsers;

-- Add specific users to the role
ALTER ROLE AIFeatureUsers ADD MEMBER [app-service-identity];

Importante

Limitare gli utenti del database che possono richiamare gli endpoint di intelligenza artificiale. Le chiamate di intelligenza artificiale spesso comportano costi e possono elaborare dati sensibili. Usare l'accesso in base al ruolo per controllare quali applicazioni e utenti possono usare queste funzionalità.

Proteggere gli endpoint di Azure Machine Learning

Gli endpoint del modello di Azure Machine Learning seguono modelli simili. Configurare l'accesso alle identità gestite e creare le credenziali per l'autenticazione.

Ecco come configurare l'accesso per gli endpoint di inferenza in tempo reale:

CREATE DATABASE SCOPED CREDENTIAL AMLCredential
WITH IDENTITY = 'Managed Identity',
SECRET = '{"resourceId": "https://ml.azure.com/"}';

CREATE EXTERNAL DATA SOURCE AMLEndpoint
WITH (
    TYPE = REST,
    LOCATION = 'https://myworkspace.region.inference.ml.azure.com',
    CREDENTIAL = AMLCredential
);

Per gli endpoint di inferenza batch, in genere si inviano dati all'archiviazione e si attiva una pipeline. Assicurarsi di proteggere l'accesso alle risorse di archiviazione usando l'identità gestita.

Implementare il monitoraggio degli endpoint

È possibile monitorare l'utilizzo degli endpoint di intelligenza artificiale per rilevare le anomalie e mantenere sotto controllo i costi. Ecco un approccio di registrazione semplice:

-- Create a logging table for AI calls
CREATE TABLE dbo.AIEndpointLog (
    LogID int IDENTITY PRIMARY KEY,
    CallTimestamp datetime2 DEFAULT SYSUTCDATETIME(),
    CallerPrincipal nvarchar(128) DEFAULT ORIGINAL_LOGIN(),
    EndpointName nvarchar(256),
    InputLength int,
    ResponseStatus int,
    DurationMs int
);

-- Modify procedures to log calls
CREATE PROCEDURE dbo.GetEmbeddingWithLogging
    @InputText nvarchar(max),
    @Embedding nvarchar(max) OUTPUT
AS
BEGIN
    DECLARE @StartTime datetime2 = SYSUTCDATETIME();
    DECLARE @response nvarchar(max);
    DECLARE @status int;
    
    -- Make the AI call
    EXEC sp_invoke_external_rest_endpoint
        @url = 'https://myopenai.openai.azure.com/openai/deployments/text-embedding/embeddings?api-version=2024-02-01',
        @method = 'POST',
        @payload = JSON_OBJECT('input': @InputText),
        @credential = AzureOpenAICredential,
        @response = @response OUTPUT;
    
    -- Log the call
    INSERT INTO dbo.AIEndpointLog (EndpointName, InputLength, ResponseStatus, DurationMs)
    VALUES ('text-embedding', LEN(@InputText), 200, DATEDIFF(millisecond, @StartTime, SYSUTCDATETIME()));
    
    SET @Embedding = JSON_VALUE(@response, '$.data[0].embedding');
END;

Con questa registrazione sul posto, è possibile eseguire una query sul log per individuare modelli insoliti:

-- Find users making excessive AI calls
SELECT CallerPrincipal, COUNT(*) AS CallCount, AVG(DurationMs) AS AvgDuration
FROM dbo.AIEndpointLog
WHERE CallTimestamp > DATEADD(hour, -1, SYSUTCDATETIME())
GROUP BY CallerPrincipal
HAVING COUNT(*) > 100
ORDER BY CallCount DESC;

Suggerimento

Configurare avvisi per modelli di utilizzo insoliti degli endpoint di intelligenza artificiale. Picchi improvvisi di chiamate o chiamate da entità impreviste possono indicare i bug delle credenziali compromesse o delle applicazioni.

Funzionalità di intelligenza artificiale sicura in Microsoft Fabric

I database SQL in Microsoft Fabric gestiscono l'accesso agli endpoint di intelligenza artificiale in modo diverso rispetto a SQL di Azure. Anziché credenziali con ambito database e identità gestita, Fabric usa i ruoli dell'area di lavoro e il controllo degli accessi in base alla capacità.

In Infrastruttura le funzionalità di intelligenza artificiale sono associate all'area di lavoro. Gli utenti con ruoli collaboratore o di area di lavoro superiore possono richiamare funzionalità di intelligenza artificiale come competenze di intelligenza artificiale e Copilot. Il controllo di accesso avviene a livello di area di lavoro anziché tramite le autorizzazioni del database.

Per proteggere le funzionalità di intelligenza artificiale in Fabric:

  • Assegnare con attenzione i ruoli dell'area di lavoro, poiché controllano l'accesso all'intelligenza artificiale
  • Monitorare l'utilizzo tramite le metriche di capacità e i log attività di Fabric
  • Usare le funzionalità di protezione dei dati di Fabric per controllare quali funzionalità di intelligenza artificiale dei dati possono accedere

Per indicazioni dettagliate sulla configurazione dei servizi di IA in Fabric, vedere la documentazione di Fabric AI.