Dela via


Avidentifiering av flera dokument med den asynkrona avidentifieringstjänsten

Azure Health Data Services-avidentifieringstjänsten kan avidentifiering av dokument i Azure Storage via ett asynkront jobb. Om du har många dokument som du vill av-identifiera är det ett bra alternativ att använda ett jobb. Jobb ger också konsekvent surrogat, vilket innebär att surrogatvärdena i de identifierade utdata matchar alla dokument. Mer information om avidentifiering, inklusive konsekvent surrogatdrift, finns i Vad är avidentifieringstjänsten?

När du väljer att lagra dokument i Azure Blob Storage debiteras du baserat på priser för Azure Storage. Den här kostnaden ingår inte i prissättningen för avidentifieringstjänsten. Utforska priser för Azure Blob Storage.

I den här handledningen kommer du att:

  • Skapa ett lagringskonto och en container
  • Ladda upp ett exempeldokument
  • Bevilja avidentifieringstjänsten åtkomst
  • Konfigurera nätverksisolering

Förutsättningar

Öppna Azure CLI

Installera Azure CLI och öppna valfri terminal. I den här självstudien använder vi PowerShell.

Skapa ett lagringskonto och en container

  1. Ange kontexten och ersätt prenumerationsnamnet som innehåller din avidentifieringstjänst för <subscription_name> platshållaren:
    az account set --subscription "<subscription_name>"
    
  2. Spara en variabel för resursgruppen och ersätt resursgruppen som innehåller din avidentifieringstjänst för <resource_group> platshållaren:
    $ResourceGroup = "<resource_group>"
    
  3. Skapa ett lagringskonto och ange ett värde för <storage_account_name> platshållaren:
    $StorageAccountName = "<storage_account_name>"
    $StorageAccountId = $(az storage account create --name $StorageAccountName --resource-group $ResourceGroup --sku Standard_LRS --kind StorageV2 --min-tls-version TLS1_2 --allow-blob-public-access false --query id --output tsv)
    
  4. Tilldela dig själv en roll för att utföra dataåtgärder på lagringskontot:
    $UserId = $(az ad signed-in-user show --query id -o tsv)
    az role assignment create --role "Storage Blob Data Contributor" --assignee $UserId --scope $StorageAccountId
    
  5. Skapa en container för att lagra exempeldokumentet:
    az storage container create --account-name $StorageAccountName --name deidtest --auth-mode login
    

Ladda upp ett exempeldokument

Sedan laddar du upp ett dokument som innehåller syntetisk PHI:

$DocumentContent = "The patient came in for a visit on 10/12/2023 and was seen again November 4th at Contoso Hospital."
az storage blob upload --data $DocumentContent --account-name $StorageAccountName --container-name deidtest --name deidsample.txt --auth-mode login

Bevilja avidentifieringstjänsten åtkomst till lagringskontot

I det här steget beviljar du avidentifieringstjänstens systemtilldelade rollbaserade åtkomst för hanterad identitet till containern. Du beviljar rollen Storage Blob Data Contributor eftersom avidentifieringstjänsten både läser det ursprungliga dokumentet och skriver avidentifierade utdatadokument. Ersätt namnet på din avidentifieringstjänst med <deid_service_name> platshållaren:

$DeidServicePrincipalId=$(az resource show -n <deid_service_name> -g $ResourceGroup --resource-type microsoft.healthdataaiservices/deidservices --query identity.principalId --output tsv)
az role assignment create --assignee $DeidServicePrincipalId --role "Storage Blob Data Contributor" --scope $StorageAccountId

För att kontrollera att avidentifieringstjänsten har åtkomst till lagringskontot kan du kontrollera på Azure-portalen under lagringskonton. Under fliken Lagringscenter och Resurser klickar du på namnet på ditt lagringskonto. Välj Åtkomstkontroll (IAM) och sök efter namnet på din avidentifieringstjänst ($ResourceGroup) i sökfältet.

Konfigurera nätverksisolering på lagringskontot

Därefter uppdaterar du lagringskontot för att inaktivera åtkomst till offentligt nätverk och endast tillåta åtkomst från betrodda Azure-tjänster, till exempel avidentifieringstjänsten. När du har kört det här kommandot kan du inte visa innehållet i lagringscontainern utan att ange ett nätverksfel. Läs mer i Konfigurera Azure Storage-brandväggar och virtuella nätverk.

az storage account update --name $StorageAccountName --public-network-access Disabled --bypass AzureServices

Använda Python SDK

Koden nedan innehåller ett exempel från Azure Health Deidentification SDK för Python.


"""
FILE: deidentify_documents_async.py

DESCRIPTION:
    This sample demonstrates a basic scenario of de-identifying documents in Azure Storage. 
    Taking a container URI and an input prefix, the sample will create a job and wait for the job to complete.

USAGE:
    python deidentify_documents_async.py

    Set the environment variables with your own values before running the sample:
    1) endpoint - the service URL endpoint for a de-identification service.
    2) storage_location - an Azure Storage container endpoint, like "https://<storageaccount>.blob.core.windows.net/<container>".
    3) INPUT_PREFIX - the prefix of the input document name(s) in the container.
        For example, providing "folder1" would create a job that would process documents like "https://<storageaccount>.blob.core.windows.net/<container>/folder1/document1.txt".
"""


import asyncio
from azure.core.polling import AsyncLROPoller
from azure.health.deidentification.aio import DeidentificationClient
from azure.health.deidentification.models import (
    DeidentificationJob,
    SourceStorageLocation,
    TargetStorageLocation,
)
from azure.identity.aio import DefaultAzureCredential
import os
import uuid


async def deidentify_documents_async():
    endpoint = "<YOUR SERVICE URL HERE>" ### Replace 
    storage_location = "https://<CONTAINER NAME>.blob.core.windows.net/deidtest/" ### Replace <CONTAINER NAME>
    inputPrefix = "deidsample" 
    outputPrefix = "_output"

    credential = DefaultAzureCredential()
    client = DeidentificationClient(endpoint, credential)

    jobname = f"sample-job-{uuid.uuid4().hex[:8]}"

    job = DeidentificationJob(
        source_location=SourceStorageLocation(
            location=storage_location,
            prefix=inputPrefix,
        ),
        target_location=TargetStorageLocation(location=storage_location, prefix=outputPrefix, overwrite=True),
    )

    async with client:
        lro: AsyncLROPoller = await client.begin_deidentify_documents(jobname, job)
        finished_job: DeidentificationJob = await lro.result()

        await credential.close()

        print(f"Job Name:   {finished_job.job_name}")
        print(f"Job Status: {finished_job.status}")  # Succeeded
        print(f"File Count: {finished_job.summary.total_count if finished_job.summary is not None else 0}")


async def main():
    await deidentify_documents_async()


if __name__ == "__main__":
    asyncio.run(main())


Rensa resurser

När du är klar med lagringskontot kan du ta bort lagringskontot och rolltilldelningarna:

az role assignment delete --assignee $DeidServicePrincipalId --role "Storage Blob Data Contributor" --scope $StorageAccountId
az role assignment delete --assignee $UserId --role "Storage Blob Data Contributor" --scope $StorageAccountId
az storage account delete --ids $StorageAccountId --yes

Nästa steg