Nesta página, descrevemos como desidentificar dados confidenciais armazenados no Cloud Storage usando a API Cloud Data Loss Prevention.
Essa operação ajuda a garantir que os arquivos que você usa nos processos empresariais não contenham dados confidenciais, como informações de identificação pessoal (PII). O Cloud Data Loss Prevention pode inspecionar dados confidenciais em arquivos em um bucket do Cloud Storage e criar cópias desidentificadas desses arquivos em um bucket separado. É possível usar as cópias desidentificadas nos processos da sua empresa.
Para mais informações sobre o que acontece quando você desidentifica dados no armazenamento, consulte Desidentificação de dados confidenciais no armazenamento.
Antes de começar
Esta página pressupõe o seguinte:
Você ativou o faturamento.
Você ativou o Cloud DLP.
Você tem um bucket do Cloud Storage com dados que você quer desidentificar.
Saber enviar uma solicitação HTTP para a API DLP. Para saber mais, consulte Inspecionar texto confidencial usando a API DLP.
Saiba mais sobre as limitações e os pontos de consideração para essa operação.
A inspeção de armazenamento exige o seguinte escopo do OAuth:
https://www.googleapis.com/auth/cloud-platform
. Para saber mais, consulte Como autenticar na API DLP.
Papéis do IAM obrigatórios
Se todos os recursos para esta operação estiverem no mesmo projeto, o papel de agente de serviço da API DLP (roles/dlp.serviceAgent
) no agente de serviço é suficiente. Com esse papel, é possível 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, modelos de desidentificação, bucket de entrada, bucket de saída e tabela de detalhes de 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 de Leitor de objetos do Storage (
roles/storage.objectViewer
) no bucket de entrada ou no projeto que o contém. - O papel de Criador de objetos do Storage (
roles/storage.objectCreator
) no bucket de saída ou no projeto que o contém. - O papel de editor de dados do BigQuery (
roles/bigquery.dataEditor
) na tabela de detalhes de transformação ou o projeto que o contém.
Para conceder um papel ao agente de serviço, que é uma conta de serviço gerenciada pelo Google, consulte Conceder um único papel. Também é possível controlar o acesso nos seguintes níveis:
Visão geral da API
Para desidentificar conteúdo armazenado no Cloud Storage, configure um job de inspeção que procure dados confidenciais de acordo com os critérios que você especificar. Em seguida, no job de inspeção, forneça instruções de desidentificação na forma de uma ação Deidentify
.
Se quiser verificar apenas um subconjunto dos arquivos no bucket, limite 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 a expressão
regular (FileSet
).
Quando você ativa a ação Deidentify
, por padrão, o Cloud DLP
transforma todos os tipos de arquivos compatíveis incluídos na verificação. No entanto, é possível
configurar o job para transformar somente um subconjunto dos tipos de arquivos 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 oferecem instruções sobre como transformar as descobertas em arquivos estruturados, não estruturados e imagens.
Modelo de desidentificação: um
DeidentifyTemplate
padrão a ser usado para arquivos não estruturados, como arquivos de texto em formato livre. Esse tipo deDeidentifyTemplate
não pode conter um objetoRecordTransformations
, que é compatível somente com conteúdo estruturado. Se esse modelo não estiver presente, o Cloud DLP usará o métodoReplaceWithInfoTypeConfig
para transformar arquivos não estruturados.Modelo de desidentificação estruturado:um
DeidentifyTemplate
que será usado para arquivos estruturados, como arquivos CSV. EsseDeidentifyTemplate
pode conterRecordTransformations
. Se esse modelo não estiver presente, o Cloud DLP usará o modelo de desidentificação padrão que você criou. Se isso também não estiver presente, o Cloud DLP 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, o Cloud DLP 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 que tenha uma ação de desidentificação
O objeto DlpJob
fornece instruções sobre o que inspecionar, que 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 pesquisados e instruções de inspeção adicionais sobre como encontrar os dados confidenciais. 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 configuração para editar dados confidenciais de imagens.Se você não incluir um objeto
TransformationConfig
, o Cloud DLP substitui os dados confidenciais no texto pelo respectivo infoType. Nas imagens, ele abrange dados confidenciais com uma caixa preta.Um objeto
TransformationDetailsStorageConfig
, que especifica uma tabela do BigQuery em que o Cloud DLP precisa armazenar detalhes sobre cada transformação. Para cada transformação, os detalhes incluem uma descrição, um código de sucesso ou de erro, detalhes de erro, o número de bytes transformados, a localização do conteúdo transformado e o nome do job de inspeção em que o Cloud DLP fez a transformação. Essa tabela não armazena o conteúdo real desidentificado.
Quando os dados são gravados em uma tabela do BigQuery, o uso de faturamento e cotas é aplicado ao projeto que contém a tabela de destino.
Depois que o conteúdo copiado é desidentificado, o job de desidentificação é concluído. O job contém um resumo de quantas vezes as transformações especificadas foram aplicadas, e é possível recuperá-las usando o método projects.dlpJobs.get
na DlpJob
. O DlpJob
retornado inclui um objeto DeidentifyDataSourceDetails
e um objeto InspectDataSourceDetails
. Esses objetos contêm os resultados de uma ação Deidentify
e do
job de inspeção, respectivamente.
Se você incluiu um objeto TransformationDetailsStorageConfig
no DlpJob
, uma tabela
do BigQuery será criada com metadados sobre os detalhes da transformação. Para cada transformação que ocorrer, o Cloud DLP grava uma linha de metadados na tabela. Para mais informações sobre o conteúdo da tabela, consulte Referência de detalhes da transformação.
Exemplo de código
Veja no exemplo JSON a seguir como desidentificar arquivos em um diretório do Cloud Storage.
Método e URL HTTP
POST https://dlp.googleapis.com/v2/projects/PROJECT_ID/dlpJobs
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 com uma barra no final, os subdiretórios emINPUT_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 de 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, 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 de 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 de transformação.
No exemplo JSON anterior, observe o seguinte:
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 a ser inspecionado (StorageConfig
). Este exemplo especifica um bucket do Cloud StorageCloudStorageOptions
.inspectConfig
: informações sobre os dados confidenciais que você quer inspecionar (InspectConfig
). Este exemplo inspeciona o conteúdo correspondente ao infoType integradoPERSON_NAME
.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 o Cloud DLP a desidentificar os dados confidenciais correspondentes de acordo com a configuração especificada dentro (Deidentify
).cloud_storage_output
: especifica o URL do diretório do Cloud Storage que você quer inspecionar.transformation_config
: especifica como o Cloud DLP precisa desidentificar dados confidenciais em arquivos estruturados, arquivos não estruturados e imagens (TransformationConfig
).Se você não incluir um objeto
TransformationConfig
, o Cloud DLP substitui os dados confidenciais no texto pelo respectivo infoType. Nas imagens, ele abrange dados confidenciais com uma caixa preta.transformation_details_storage_config
: especifica que o Cloud DLP 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 o Cloud DLP precisa armazenar esses 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 arquivos compatíveis incluídos na operação de inspeção também serão incluídos na operação de desidentificação. Neste exemplo, o Cloud DLP desidentifica apenas arquivos de imagem, CSV e texto, mesmo que você tenha configuradoDlpJob
para inspecionar todos os tipos de arquivo compatíveis.
Criar o job de inspeção
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 anterior como um arquivo JSON e
execute o comando a seguir:
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.
O Cloud DLP retorna o identificador da DlpJob
recém-criada, o status dela 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ê 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 de dados no armazenamento.
- Saiba como desidentificar dados no armazenamento usando o console do Google Cloud.
- Siga o 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 de dados confidenciais.