Nesta página, descrevemos como inspecionar um recurso do Cloud Storage e criar cópias desidentificadas dos dados usando a API Cloud Data Loss Prevention.
Essa operação ajuda a garantir que os arquivos usados nos processos dos seus negócios não contenham dados confidenciais, como informações de identificação pessoal (PII). A proteção de dados confidenciais pode inspecionar dados confidenciais em arquivos em um bucket do Cloud Storage e criar cópias desidentificadas desses arquivos em um bucket separado. Você pode usar as cópias desidentificadas nos seus processos comerciais.
Para mais informações sobre esse atributo, consulte Desidentificação de dados confidenciais no Cloud Storage.
Antes de começar
Nesta página, pressupomos o seguinte:
Você ativou o faturamento.
Você ativou a proteção de dados sensíveis.
Você tem um bucket do Cloud Storage com dados que quer desidentificar.
Enviar uma solicitação HTTP para a API DLP. Para mais informações, consulte Inspecionar textos confidenciais usando a API DLP.
Saiba mais sobre as limitações e os pontos de consideração dessa operação.
A inspeção de armazenamento requer o seguinte escopo do OAuth:
https://www.googleapis.com/auth/cloud-platform
. Para mais informações, consulte Como autenticar na API DLP.
Papéis do IAM obrigatórios
Se todos os recursos dessa operação estiverem no mesmo projeto, o papel de Agente de serviço da API DLP (roles/dlp.serviceAgent
) no agente de serviço será suficiente. Com esse papel, você pode fazer o seguinte:
- Criar o job de inspeção
- Ler os arquivos no diretório de entrada
- Gravar os arquivos desidentificados no diretório de saída
- Gravar os detalhes da transformação em uma tabela do BigQuery
Os recursos relevantes incluem o job de inspeção, os modelos de desidentificação, o bucket de entrada, o bucket de saída e a tabela de detalhes da transformação.
Se você precisa ter os recursos em projetos separados, verifique se o agente de serviço do projeto também tem os seguintes papéis:
- O papel Leitor de objetos do Storage (
roles/storage.objectViewer
) no bucket de entrada ou no projeto que o contém. - O papel Criador de objetos do Storage (
roles/storage.objectCreator
) no bucket de saída ou no projeto que o contém. - O papel Editor de dados do BigQuery (
roles/bigquery.dataEditor
) na tabela de detalhes da transformação ou no projeto que a contém.
Para conceder um papel ao seu agente de serviço, que é uma conta serviço gerenciado pelo Google, consulte Conceder um único papel. Também é possível controlar o acesso nos seguintes níveis:
Visão geral da API
Para criar cópias desidentificadas do conteúdo armazenado no Cloud Storage,
configure um job de inspeção
que procure dados confidenciais
de acordo com os critérios especificados. Em seguida, no job de inspeção, forneça instruções de desidentificação na forma de uma ação Deidentify
.
Se você quiser verificar apenas um subconjunto dos arquivos no seu bucket, poderá
limitar os arquivos que o job verifica. As opções aceitas para jobs com desidentificação são a filtragem de arquivos por tipo (FileType
) e expressão regular (FileSet
).
Quando você ativa a ação Deidentify
, por padrão, a proteção de dados sensíveis
cria cópias desidentificadas (transformadas) de todos os tipos de arquivos compatíveis
incluídos na verificação. No entanto, é possível configurar o job para transformar apenas um
subconjunto dos tipos de arquivo compatíveis.
Opcional: criar modelos de desidentificação
Se você quiser controlar como as descobertas são transformadas, crie os modelos a seguir. Esses modelos fornecem instruções sobre como transformar descobertas em arquivos estruturados, arquivos não estruturados e imagens.
Desidentificar modelo:um
DeidentifyTemplate
padrão a ser usado para arquivos não estruturados, como arquivos de texto de formato livre. Esse tipo deDeidentifyTemplate
não pode conter um objetoRecordTransformations
, que é compatível apenas com conteúdo estruturado. Se esse modelo não estiver presente, a proteção de dados sensíveis usará o métodoReplaceWithInfoTypeConfig
para transformar arquivos não estruturados.Modelo de desidentificação estruturado: um
DeidentifyTemplate
a ser usado para arquivos estruturados, como arquivos CSV. EsseDeidentifyTemplate
pode conterRecordTransformations
. Se esse modelo não estiver presente, a proteção de dados sensíveis vai usar o modelo de desidentificação padrão que você criou. Se isso também não estiver presente, a proteção de dados sensíveis usará o métodoReplaceWithInfoTypeConfig
para transformar arquivos estruturados.Modelo de edição de imagem:um
DeidentifyTemplate
a ser usado para imagens. Esse modelo precisa conter um objetoImageTransformations
. Se esse modelo não estiver presente, a proteção de dados sensíveis editará todas as descobertas em imagens com uma caixa preta.
Saiba mais sobre como criar um modelo de desidentificação.
Criar um job de inspeção com uma ação de desidentificação
O objeto DlpJob
fornece instruções sobre o que inspecionar, quais tipos
de dados sinalizar como confidenciais e o que fazer com as descobertas.
Para desidentificar dados confidenciais em um diretório do Cloud Storage, o
DlpJob
precisa definir pelo menos o seguinte:
- Um objeto
StorageConfig
, que especifica o diretório do Cloud Storage a ser inspecionado. - Um objeto
InspectConfig
, que contém os tipos de dados a serem procurados e outras instruções de inspeção sobre como encontrar os dados sensíveis. Uma ação
Deidentify
que contém o seguinte:Um objeto
TransformationConfig
, que especifica todos os modelos que você criou para desidentificar dados em arquivos estruturados e não estruturados. Também é possível incluir a configuração para encobrir dados sensíveis de imagens.Se você não incluir um objeto
TransformationConfig
, a proteção de dados sensíveis substituirá dados confidenciais no texto pelo infoType. Em imagens, ele cobre dados sensíveis com uma caixa preta.Um objeto
TransformationDetailsStorageConfig
, que especifica uma tabela do BigQuery em que a proteção de dados confidenciais precisa armazenar detalhes sobre cada transformação. Para cada transformação, os detalhes incluem uma descrição, um código de sucesso ou erro, todos os detalhes do erro, o número de bytes transformados, o local do conteúdo transformado e o nome do job de inspeção em que a proteção de dados sensíveis fez a transformação. Esta tabela não armazena o conteúdo real desidentificado.
Quando os dados são gravados em uma tabela do BigQuery, o faturamento e o uso de cota são aplicados ao projeto que contém a tabela de destino.
Depois que o conteúdo copiado for desidentificado, o job de desidentificação
será concluído. O job contém um resumo de quantas vezes as transformações
especificadas foram aplicadas, que pode ser recuperado usando o
método projects.dlpJobs.get
em DlpJob
. O DlpJob
retornado inclui
um objeto DeidentifyDataSourceDetails
e um objeto
InspectDataSourceDetails
. Esses objetos contêm os resultados de uma ação Deidentify
e o
job de inspeção, respectivamente.
Se você incluiu um objeto TransformationDetailsStorageConfig
em DlpJob
, uma tabela do BigQuery será criada contendo metadados sobre os detalhes da transformação. Para cada
transformação que ocorre, a proteção de dados sensíveis grava uma linha de metadados
na tabela. Para mais informações sobre o conteúdo da tabela,
consulte Referência de detalhes de transformação.
Exemplos de código
Os exemplos a seguir demonstram como usar a API DLP para criar cópias desidentificadas dos arquivos do Cloud Storage.
Método e URL HTTP
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
C#
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para saber como instalar e usar a biblioteca de cliente para proteção de dados sensíveis, consulte Bibliotecas de cliente de proteção de dados sensíveis.
Para usar a proteção de dados sensíveis, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
REST
Entrada JSON{
"inspect_job": {
"storage_config": {
"cloud_storage_options": {
"file_set": {
"url": "INPUT_DIRECTORY"
}
}
},
"inspect_config": {
"info_types": [
{
"name": "PERSON_NAME"
}
]
},
"actions": {
"deidentify": {
"cloud_storage_output": "OUTPUT_DIRECTORY",
"transformation_config": {
"deidentify_template": "DEIDENTIFY_TEMPLATE_NAME",
"structured_deidentify_template": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME",
"image_redact_template": "IMAGE_REDACTION_TEMPLATE_NAME"
},
"transformation_details_storage_config": {
"table": {
"project_id": "TRANSFORMATION_DETAILS_PROJECT_ID",
"dataset_id": "TRANSFORMATION_DETAILS_DATASET_ID",
"table_id": "TRANSFORMATION_DETAILS_TABLE_ID"
}
},
"fileTypesToTransform": ["IMAGE","CSV", "TEXT_FILE"]
}
}
}
}
Substitua:
PROJECT_ID
: o ID do projeto em que você quer armazenar o job de inspeção.INPUT_DIRECTORY
: o diretório do Cloud Storage que você quer inspecionar. Por exemplo,gs://input-bucket/folder1/folder1a
. Se o URL terminar em uma barra à direita, os subdiretórios dentro deINPUT_DIRECTORY
não serão verificados.OUTPUT_DIRECTORY
: o diretório do Cloud Storage em que você quer armazenar os arquivos desidentificados. Esse diretório não pode estar no mesmo bucket do Cloud Storage queINPUT_DIRECTORY
.DEIDENTIFY_TEMPLATE_NAME
: o nome completo do recurso do modelo de desidentificação padrão, para arquivos não estruturados e estruturados, se você criou um. Esse valor precisa estar no formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.STRUCTURED_DEIDENTIFY_TEMPLATE_NAME
: o nome completo do recurso do modelo de desidentificação para arquivos estruturados, se você tiver criado um. Esse valor precisa estar no formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.IMAGE_REDACTION_TEMPLATE_NAME
: o nome completo do recurso do modelo de edição de imagens para imagens, se você tiver criado um. Esse valor precisa estar no formatoprojects/projectName/(locations/locationId)/deidentifyTemplates/templateName
.TRANSFORMATION_DETAILS_PROJECT_ID
: o ID do projeto em que você quer armazenar os detalhes da transformação.TRANSFORMATION_DETAILS_DATASET_ID
: o ID do conjunto de dados do BigQuery em que você quer armazenar os detalhes da transformação. Se você não fornecer um ID de tabela, o sistema criará um automaticamente.TRANSFORMATION_DETAILS_TABLE_ID
: o ID da tabela do BigQuery em que você quer armazenar os detalhes da transformação.
Observe os seguintes objetos:
inspectJob
: o objeto de configuração do job (DlpJob
). Esse objeto contém a configuração dos estágios de inspeção e de desidentificação.storageConfig
: o local do conteúdo que será inspecionado (StorageConfig
). Este exemplo especifica um bucket do Cloud StorageCloudStorageOptions
.inspectConfig
: informações sobre os dados confidenciais que você quer inspecionar (InspectConfig
). Neste exemplo, este exemplo inspeciona o conteúdo que corresponde ao infoTypePERSON_NAME
integrado.actions
: as ações a serem realizadas após a conclusão da parte de inspeção do job (Action
).deidentify
: especificar essa ação instrui a proteção de dados sensíveis a desidentificar os dados sensíveis correspondentes de acordo com a configuração especificada em (Deidentify
).cloud_storage_output
: especifica o URL do diretório do Cloud Storage que você quer inspecionar.transformation_config
: especifica como a proteção de dados sensíveis precisa desidentificar dados confidenciais em arquivos estruturados, arquivos não estruturados e imagens (TransformationConfig
).Se você não incluir um objeto
TransformationConfig
, a proteção de dados sensíveis substituirá dados confidenciais no texto pelo infoType. Em imagens, ele cobre dados sensíveis com uma caixa preta.transformation_details_storage_config
: especifica que a proteção de dados sensíveis precisa armazenar metadados sobre cada transformação executada para esse job. Além disso, ele especifica o local e o nome da tabela em que a proteção de dados sensíveis precisa armazenar os metadados (TransformationDetailsStorageConfig
).fileTypesToTransform
: limita a operação de desidentificação apenas aos tipos de arquivo que você lista. Se você não definir esse campo, todos os tipos de arquivo compatíveis incluídos na operação de inspeção também serão incluídos na operação de desidentificação. Nesse exemplo, a proteção de dados sensíveis desidentifica apenas arquivos de imagem, CSV e texto, mesmo que você tenha configurado oDlpJob
para inspecionar todos os tipos de arquivos compatíveis.
Criar um job de inspeção usando a API REST
Para criar o job de inspeção (DlpJob
), envie uma solicitação projects.dlpJobs.create
. Para enviar a solicitação usando cURL, salve o exemplo REST anterior como um arquivo JSON e execute o seguinte comando:
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs \
-d @PATH_TO_JSON_FILE
Substitua:
PROJECT_ID
: o ID do projeto em que você armazenou oDlpJob
.PATH_TO_JSON_FILE
: o caminho para o arquivo JSON que contém o corpo da solicitação.
A proteção de dados sensíveis retorna o identificador do DlpJob
recém-criado, o status dele e um snapshot da configuração de inspeção
definida.
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "PENDING", ... }
Recuperar os resultados do job de inspeção
Para recuperar os resultados de DlpJob
, envie uma solicitação projects.dlpJobs.get
:
curl -s \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "X-Goog-User-Project: PROJECT_ID" \
https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs/JOB_ID
Substitua:
PROJECT_ID
: o ID do projeto em que você armazenou oDlpJob
.JOB_ID
: o ID do job que foi retornado quando você criou oDlpJob
.
Se a operação for concluída, você vai receber uma resposta semelhante a esta:
{ "name": "projects/PROJECT_ID/dlpJobs/JOB_ID", "type": "INSPECT_JOB", "state": "DONE", "inspectDetails": { "requestedOptions": { "snapshotInspectTemplate": {}, "jobConfig": { "storageConfig": { "cloudStorageOptions": { "fileSet": { "url": "INPUT_DIRECTORY" } } }, "inspectConfig": { "infoTypes": [ { "name": "PERSON_NAME" } ], "limits": {} }, "actions": [ { "deidentify": { "transformationDetailsStorageConfig": { "table": { "projectId": "TRANSFORMATION_DETAILS_PROJECT_ID", "datasetId": "TRANSFORMATION_DETAILS_DATASET_ID", "tableId": "TRANSFORMATION_DETAILS_TABLE_ID" } }, "transformationConfig": { "deidentifyTemplate": "DEIDENTIFY_TEMPLATE_NAME", "structuredDeidentifyTemplate": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "imageRedactTemplate": "IMAGE_REDACTION_TEMPLATE_NAME" }, "fileTypesToTransform": [ "IMAGE", "CSV", "TEXT_FILE" ], "cloudStorageOutput": "OUTPUT_DIRECTORY" } } ] } }, "result": { "processedBytes": "25242", "totalEstimatedBytes": "25242", "infoTypeStats": [ { "infoType": { "name": "PERSON_NAME" }, "count": "114" } ] } }, "createTime": "2022-06-09T23:00:53.380Z", "startTime": "2022-06-09T23:01:27.986383Z", "endTime": "2022-06-09T23:02:00.443536Z", "actionDetails": [ { "deidentifyDetails": { "requestedOptions": { "snapshotDeidentifyTemplate": { "name": "DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T17:46:34.208923Z", "updateTime": "2022-06-09T17:46:34.208923Z", "deidentifyConfig": { "infoTypeTransformations": { "transformations": [ { "primitiveTransformation": { "characterMaskConfig": { "maskingCharacter": "*", "numberToMask": 25 } } } ] } }, "locationId": "global" }, "snapshotStructuredDeidentifyTemplate": { "name": "STRUCTURED_DEIDENTIFY_TEMPLATE_NAME", "createTime": "2022-06-09T20:51:12.411456Z", "updateTime": "2022-06-09T21:07:53.633149Z", "deidentifyConfig": { "recordTransformations": { "fieldTransformations": [ { "fields": [ { "name": "Name" } ], "primitiveTransformation": { "replaceConfig": { "newValue": { "stringValue": "[redacted]" } } } } ] } }, "locationId": "global" }, "snapshotImageRedactTemplate": { "name": "IMAGE_REDACTION_TEMPLATE_NAME", "createTime": "2022-06-09T20:52:25.453564Z", "updateTime": "2022-06-09T20:52:25.453564Z", "deidentifyConfig": {}, "locationId": "global" } }, "deidentifyStats": { "transformedBytes": "3972", "transformationCount": "110" } } } ], "locationId": "global" }
A seguir
- Saiba mais sobre o processo de desidentificação dos dados no armazenamento.
- Saiba como desidentificar dados no armazenamento usando o console do Google Cloud.
- Siga as etapas do codelab Como criar uma cópia desidentificada de dados no Cloud Storage.
- Saiba mais sobre transformações de desidentificação.
- Saiba como inspecionar o armazenamento em busca de dados sensíveis.