Compartilhar via


Desidentificar vários documentos com o serviço de desidentificação assíncrona

O serviço de desidentificação dos Serviços de Dados de Saúde do Azure pode desidentificar documentos no Armazenamento do Azure por meio de um trabalho assíncrono. Se você tiver muitos documentos que gostaria de desidentificar, usar um trabalho é uma boa opção. Os trabalhos também fornecem uma substituição consistente, o que significa que os valores substitutos na saída desidentificada corresponderão a todos os documentos. Para obter mais informações sobre desidentificação, incluindo a substituição consistente, consulte O que é o serviço de desidentificação?

Ao optar por armazenar documentos no Armazenamento de Blobs do Azure, você será cobrado com base nos preços do Armazenamento do Microsoft Azure. Esse custo não está incluído no preço do serviço de desidentificação. Preços do Armazenamento de Blobs do Azure.

Neste tutorial, você:

  • Criar uma conta e um contêiner de armazenamento
  • Carregar um documento de exemplo
  • Conceder acesso ao serviço de desidentificação
  • Configurar o isolamento de rede

Pré-requisitos

Abrir a CLI do Azure

Instale a CLI do Azure e abra o terminal de sua escolha. Neste tutorial, estamos usando o PowerShell.

Criar uma conta e um contêiner de armazenamento

  1. Defina o contexto, substituindo o nome da assinatura que contém o serviço de desidentificação pelo espaço reservado <subscription_name>:
    az account set --subscription "<subscription_name>"
    
  2. Salve uma variável para o grupo de recursos, substituindo o grupo de recursos que contém o serviço de desidentificação para o espaço reservado <resource_group>:
    $ResourceGroup = "<resource_group>"
    
  3. Crie uma conta de armazenamento, fornecendo um valor para o espaço reservado <storage_account_name>:
    $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. Atribua a si mesmo uma função para executar operações de dados na conta de armazenamento:
    $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. Crie um contêiner para armazenar seu documento de exemplo:
    az storage container create --account-name $StorageAccountName --name deidtest --auth-mode login
    

Carregar um documento de exemplo

Em seguida, você carrega um documento que contém PHI sintético:

$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

Conceder acesso à conta de armazenamento ao serviço de desidentificação

Nesta etapa, você concederá ao contêiner o acesso baseado em função de identidade gerenciada atribuído ao sistema do serviço de desidentificação. Você concede a função Colaborador de Dados do Blob de Armazenamento porque o serviço de desidentificação lerá o documento original e gravará documentos desidentificados de saída. Substitua o nome do serviço de desidentificação pelo espaço reservado <deid_service_name>:

$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

Para verificar se o serviço de des identificação tem acesso à conta de armazenamento, você pode verificar no portal do Azure em contas de armazenamento. Na guia Centro de Armazenamento e Recursos , clique no nome da conta de armazenamento. Selecione controle de acesso (IAM) e, na barra de pesquisa, pesquise o nome do serviço de desidentificação ($ResourceGroup).

Configurar o isolamento de rede na conta de armazenamento

Em seguida, você atualiza a conta de armazenamento para desabilitar o acesso à rede pública e permitir apenas o acesso de serviços confiáveis do Azure, como o serviço de desidentificação. Depois de executar esse comando, você não poderá exibir o conteúdo do contêiner de armazenamento sem definir uma exceção de rede. Saiba mais em Como configurar redes virtuais e firewalls do Armazenamento do Azure.

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

Usar o SDK do Python

O código a seguir contém um exemplo do SDK de Desidentificação de Saúde do Azure para 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())


Limpar os recursos

Quando terminar de usar a conta de armazenamento, você poderá excluir a conta de armazenamento e as atribuições de função:

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

Próxima etapa