Questa pagina spiega come anonimizzare i dati sensibili nelle risorse FHIR utilizzando l'API Cloud Healthcare ai seguenti livelli:
- A livello di set di dati utilizzando
datasets.deidentify
- A livello di archivio FHIR utilizzando
fhirStores.deidentify
Questa pagina spiega anche come applicare i filtri per l'anonimizzazione dei dati a livello di negozio FHIR.
Panoramica dell'anonimizzazione
Anonimizzazione a livello di set di dati
Per anonimizzare i dati FHIR a livello di set di dati, chiama l'operazione datasets.deidentify
. La chiamata API di anonimizzazione
ha i seguenti componenti:
- Il set di dati di origine: un set di dati contenente archivi FHIR con una o più risorse che includono dati sensibili.
- Il set di dati di destinazione: l'anonimizzazione non interessa il set di dati originale o i dati al suo interno. Le copie anonimizzate dei dati originali vengono invece scritte in un nuovo set di dati, chiamato set di dati di destinazione.
- Cosa anonimizzare: parametri di configurazione che specificano come elaborare il set di dati. Puoi configurare questi parametri specificandoli in un elemento
FhirConfig
e/oTextConfig
all'interno dell'oggettoDeidentifyConfig
e passandolo attraverso:- Impostazione del campo
config
del corpo della richiesta - Archiviazione in Cloud Storage in formato JSON e definizione della posizione del file nel bucket tramite il campo
gcsConfigUri
del corpo della richiesta
- Impostazione del campo
La maggior parte degli esempi in questa guida mostra come anonimizzare i dati FHIR a livello di set di dati.
Anonimizzazione a livello di archivio FHIR
Anonimizzare i dati FHIR a livello di archivio FHIR ti consente di avere un maggiore controllo su quali dati FHIR sono anonimizzati.
Per anonimizzare i dati FHIR in un archivio FHIR, chiama il metodo fhirStores.deidentify
. La chiamata API di anonimizzazione
ha i seguenti componenti:
- L'archivio FHIR di origine: un archivio FHIR contenente una o più risorse con dati sensibili.
- Archivio FHIR di destinazione: l'anonimizzazione non influisce sull'archivio FHIR originale o sui relativi dati. Le copie anonimizzate dei dati originali vengono invece scritte nell'archivio FHIR di destinazione. L'archivio FHIR di destinazione deve esistere già.
- Cosa anonimizzare: parametri di configurazione che specificano come elaborare l'archivio FHIR. Puoi configurare questi parametri specificandoli in un elemento
FhirConfig
e/oTextConfig
all'interno dell'oggettoDeidentifyConfig
e passandolo attraverso:- Impostazione del campo
config
del corpo della richiesta - Archiviazione in Cloud Storage in formato JSON e definizione della posizione del file nel bucket tramite il campo
gcsConfigUri
del corpo della richiesta
- Impostazione del campo
Per un esempio di come anonimizzare i dati FHIR a livello di archivio FHIR, consulta Anonimizzazione dei dati a livello di archivio FHIR.
Filtri
Puoi anonimizzare un sottoinsieme di dati in un archivio FHIR specificando un elenco di ID risorsa FHIR nella richiesta fhirStores.deidentify
. Per un esempio, consulta Anonimizzazione di un sottoinsieme di un archivio FHIR.
Esempio di risorsa FHIR utilizzata in questa guida
Gli esempi in questa guida utilizzano una risorsa Paziente
(DSTU2,
STU3
e R4)
in un archivio FHIR. Il paziente ha le proprietà mostrate nell'esempio
seguente. Il valore id
viene generato dal server. Se crei la risorsa Paziente nel tuo archivio FHIR, il valore id
restituito è diverso dal valore indicato nel paziente campione.
{
"address": [
{
"city": "Anycity",
"district": "Anydistrict",
"line": [
"123 Main Street"
],
"period": {
"start": "1990-12-05"
},
"postalCode": "12345",
"state": "CA",
"text": "123 Main Street Anycity, Anydistrict, CA 12345",
"type": "both",
"use": "home"
}
],
"birthDate": "1980-12-05",
"gender": "female",
"id": "r77433dd-dkeuc-633743nfd-383nfdsjds732",
"name": [
{
"family": "Smith",
"given": [
"Darcy"
],
"use": "official"
}
],
"resourceType": "Patient",
"text": {
"status": "generated",
"div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>"
}
}
Anonimizzazione dei dati FHIR predefinita
Puoi anonimizzare i dati FHIR utilizzando un metodo "default" che oscura le informazioni sanitarie protette (PHI) comuni nelle risorse in un archivio FHIR. Il metodo predefinito oscura le seguenti informazioni:
- infoType specificati negli infoType FHIR predefiniti
- Percorsi specificati nel profilo di anonimizzazione FHIR predefinito
Gli esempi riportati di seguito mostrano come anonimizzare la risorsa Paziente utilizzando il metodo predefinito FHIR. Quando utilizzi il metodo predefinito, utilizza un FhirConfig
vuoto all'interno dell'oggetto DeidentifyConfig
.
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': {} } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "", "district": "", "line": [ "" ], "period": { "start": "1990-12-05" }, "postalCode": "", "state": "CA", "text": "", "type": "both", "use": "home" } ], "birthDate": "1981-02-24", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMA" }, "name": [ { "family": "", "given": [ "" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: [PERSON_NAME][PERSON_NAME][PERSON_NAME]</p><p><b>DateOfBirth</b>: 1981-02-24</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': {} } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "", "district": "", "line": [ "" ], "period": { "start": "1990-12-05" }, "postalCode": "", "state": "CA", "text": "", "type": "both", "use": "home" } ], "birthDate": "1981-02-24", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMA" }, "name": [ { "family": "", "given": [ "" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: [PERSON_NAME][PERSON_NAME][PERSON_NAME]</p><p><b>DateOfBirth</b>: 1981-02-24</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
Puoi vedere che i seguenti valori sono stati trasformati per anonimizzare la risorsa:
- È stato fornito un nuovo valore nel campo
birthDate
utilizzando una tecnica di spostamento delle date con una differenza di 100 giorni. - Il valore in
address.city
è stato oscurato. - Il valore in
address.district
è stato oscurato. - Il valore in
address.line
è stato oscurato. - Il valore in
address.postalCode
è stato oscurato. - Il valore in
address.text
è stato oscurato. - Il valore in
name.family
è stato oscurato. - Il valore in
name.given
è stato oscurato. - Il testo libero nel campo
text.div
è stato modificato per sostituire il nome del paziente con il suo infoType,[PERSON_NAME]
. Il valore della data di nascita del paziente è stato trasformato allo stesso modo in cui è stato trasformato il valore nel campobirthDate
.
Anonimizzazione di percorsi FHIR specifici
Per specificare i percorsi FHIR da anonimizzare e come trasformarli, configura
fieldMetadataList
nell'oggetto FhirConfig
.
All'interno di fieldMetadataList
, devi specificare un elenco separato da un
punto di nomi dei campi o nomi di tipi di risorse FHIR in un elenco paths
. In seguito,
specifica un valore Action
da applicare a tutto ciò che è elencato in paths
. Consulta la documentazione di Action
per i valori possibili.
Per informazioni su come impostare il campo paths
nell'API Cloud Healthcare, vedi paths
.
La formattazione dei valori all'interno di paths
si basa su FHIRPath.
Profilo di anonimizzazione FHIR predefinito
Per impostazione predefinita, se non specifichi alcun percorso FHIR in fieldMetadataList
, l'API Cloud Healthcare applica i seguenti profili di anonimizzazione per selezionare e trasformare i percorsi FHIR. Il profilo applicato dipende dalla versione FHIR in uso. Puoi espandere le seguenti sezioni per visualizzare
i profili della versione in uso. Puoi anche scaricare i profili
(DSTU2,
STU3
e R4).
Utilizzo dei percorsi per anonimizzare le risorse
Gli esempi riportati di seguito mostrano come configurare l'anonimizzazione delle risorse per i pazienti con i criteri seguenti:
- Ai valori
HumanName
(DSTU2, STU3 e R4) della risorsa Paziente viene applicata automaticamente una percentualeTRANSFORM
(oscuramento). Per il paziente di esempio, i valori HumanName sono"family": "Smith"
e"given": [ "Darcy" ]
.
Nessun altro valore viene fornito nell'elenco paths
all'interno di fieldMetadataList
, pertanto i dati rimanenti restano invariati.
I seguenti esempi mostrano come anonimizzare i valori HumanName della risorsa Patient:
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': [ { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } ] } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "", "given": [ "" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': [ { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } ] } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "", "given": [ "" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
Puoi vedere che i seguenti valori sono stati trasformati per anonimizzare la risorsa:
- Il valore in
name.family
è stato oscurato. - Il valore in
name.given
è stato oscurato.
Tuttavia, a differenza dell'esempio di anonimizzazione FHIR predefinita, che ha trasformato i PHI comuni, address
, birthDate
e testo libero del paziente non sono stati trasformati perché non sono stati aggiunti all'elenco paths
in fieldMetadataList
.
Utilizzo di infoType e trasformazioni primitive con risorse FHIR
L'API Cloud Healthcare può utilizzare i tipi di informazioni (infoType) per definire i dati scansionati durante l'anonimizzazione delle risorse FHIR. Un infoType è un tipo di dati sensibili, ad esempio nome di un paziente, indirizzo email, numero di telefono, numero di identificazione o numero di carta di credito. Gli infoType utilizzati nell'operazione di anonimizzazione dell'API Cloud Healthcare includono quelli rilevati nella Prevenzione della perdita di dati Cloud.
Le trasformazioni primitive sono regole utilizzate per trasformare un valore di input.
InfoType FHIR predefiniti
Gli infoType predefiniti utilizzati per l'anonimizzazione dei dati FHIR sono:
AGE
CREDIT_CARD_NUMBER
DATE
EMAIL_ADDRESS
IP_ADDRESS
LOCATION
MAC_ADDRESS
PASSPORT
PERSON_NAME
PHONE_NUMBER
SWIFT_CODE
US_DRIVERS_LICENSE_NUMBER
US_SOCIAL_SECURITY_NUMBER
US_VEHICLE_IDENTIFICATION_NUMBER
US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER
Opzioni di trasformazione originaria
Le opzioni di trasformazione primitiva dell'API Cloud Healthcare includono:
RedactConfig
: oscura un valore rimuovendolo.CharacterMaskConfig
: maschera la stringa completamente o parzialmente sostituendo i caratteri di input con un carattere fisso specificato.DateShiftConfig
: sposta le date in base a un numero casuale di giorni, con l'opzione di essere coerenti per lo stesso contesto.CryptoHashConfig
: utilizza SHA-256 per sostituire i valori di input con una rappresentazione con codifica Base64 di una stringa di output sottoposta ad hashing generata utilizzando una determinata chiave di crittografia dei dati.ReplaceWithInfoTypeConfig
: sostituisce un valore di input con il nome del suo infoType.
Specifica delle configurazioni in TextConfig
Gli infoType e le trasformazioni primitive sono specificati all'interno di un elemento
InfoTypeTransformation
,
che è un oggetto all'interno di
TextConfig
.
Specifica gli infoType nell'array infoTypes
come valori separati da virgole.
La specifica di un infoType è facoltativa. Se non specifichi almeno un infoType, la trasformazione viene applicata a tutti gli infoType integrati nei dati.
Se specifichi gli infoType in InfoTypeTransformation
, specifica almeno una trasformazione primitiva.
Le sezioni seguenti mostrano come utilizzare le trasformazioni primitive disponibili in InfoTypeTransformation
, insieme a infoType per personalizzare la modalità di anonimizzazione delle risorse FHIR.
RedactConfig
Specificando redactConfig
, oscurerai un determinato valore rimuovendolo completamente. Il messaggio
redactConfig
non contiene argomenti; specifica che abilita la trasformazione.
I seguenti esempi mostrano come oscurare la data di nascita della risorsa Paziente nel campo Patient.text.div
.
Questa attività viene completata impostando l'infoType DATE
con il percorso Patient.text.div
e la trasformazione redactConfig
.
Dopo aver inviato la richiesta di anonimizzazione all'API Cloud Healthcare, la data di nascita nel valore Patient.text.div
viene oscurata.
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.text.div' ], 'action': 'INSPECT_AND_TRANSFORM' } }, 'text': { 'transformations': [ { 'infoTypes': [ 'DATE' ], 'redactConfig': {} } ] } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "Smith", "given": [ "Darcy" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: </p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.text.div' ], 'action': 'INSPECT_AND_TRANSFORM' } }, 'text': { 'transformations': [ { 'infoTypes': [ 'DATE' ], 'redactConfig': {} } ] } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "Smith", "given": [ "Darcy" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: </p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
L'output mostra che il valore di DateOfBirth
in text.div
è stato rimosso. Ciò è in contrasto con l'esempio in Anonimizzazione di specifici percorsi FHIR
in cui il valore di DateOfBirth
in text.div
non è stato rimosso utilizzando la configurazione predefinita.
CharacterMaskConfig
Specificando characterMaskConfig
sostituisce le stringhe che
corrispondono agli infoType specificati con un carattere fisso specificato. Ad esempio, anziché oscurare il nome di un paziente o trasformarlo mediante hashing crittografico, puoi sostituirlo con una serie di asterischi (*
).
Specifica il carattere fisso come valore nel campo maskingCharacter
.
I seguenti esempi mostrano come espandersi sul campione utilizzato in Anonimizzazione di specifici percorsi FHIR, ma ora includono l'impostazione dell'infoType PERSON_NAME
con la trasformazione characterMaskConfig
. Non viene fornito un carattere fisso, pertanto per impostazione predefinita viene utilizzato un asterisco. Dopo aver inviato la richiesta di anonimizzazione
all'API Cloud Healthcare, i valori in
name.family
e name.given
vengono sostituiti con asterischi.
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } }, 'text': { 'transformations': [ { 'infoTypes': [ 'PERSON_NAME' ], 'characterMaskConfig': { 'maskingCharacter': '' } } ] } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "*****", "given": [ "*****" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } }, 'text': { 'transformations': [ { 'infoTypes': [ 'PERSON_NAME' ], 'characterMaskConfig': { 'maskingCharacter': '' } } ] } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "*****", "given": [ "*****" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
L'output mostra che i valori in name.family
e name.given
sono stati sostituiti con asterischi. Ciò è in contrasto con l'esempio in Anonimizzazione di percorsi FHIR specifici in cui sono stati oscurati i valori in name.family
e name.given
.
DateShiftConfig
L'API Cloud Healthcare può trasformare le date spostandole entro un intervallo preimpostato. Per garantire la coerenza delle trasformazioni delle date
in tutte le esecuzioni di anonimizzazione, utilizza DateShiftConfig
con una delle seguenti opzioni:
- (Deprecato): una chiave con codifica AES a 128/192/256 bit non elaborata a 64 bit.
- (Consigliato): una chiave aggregata Cloud Key Management Service (Cloud KMS). Consulta la sezione Anonimizzare e reidentificare il testo sensibile per un esempio di come utilizzare le chiavi con wrapping di Cloud KMS.
Devi concedere un ruolo con l'cloudkms.cryptoKeyVersions.useToDecrypt
autorizzazione all'agente di servizio Cloud Healthcare Account di servizio per decriptare la chiave aggregata Cloud KMS. Consigliamo di utilizzare il ruolo
Decriptatore crittografico Cloud KMS (roles/cloudkms.cryptoKeyDecrypter
).
Se utilizzi Cloud KMS per le operazioni crittografiche, vengono applicati i costi. Per ulteriori informazioni, consulta i prezzi di Cloud Key Management Service.
L'API Cloud Healthcare utilizza questa chiave per calcolare la data entro la quale le date, ad esempio la data di nascita di un paziente, vengono spostate in un valore differenziale di 100 giorni.
Se non fornisci una chiave, l'API Cloud Healthcare genera una propria chiave ogni volta che l'operazione di anonimizzazione viene eseguita sui valori della data. Ciò può causare output di date incoerenti tra le esecuzioni.
I seguenti esempi mostrano come impostare l'infoType DATE
con la trasformazione DateShiftConfig
sui percorsi Patient.birthDate
e Patient.text.div
. Dopo aver inviato la richiesta di anonimizzazione
all'API Cloud Healthcare, il valore birthDate
e la
data di nascita in Patient.text.div
verranno spostati entro
più o meno 100 giorni dalla data di nascita originale, 1980-12-05
.
La criptochiave fornita nell'esempio, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=
,
è una chiave con crittografia AES a 256 bit non criptata, generata utilizzando il seguente comando. Quando richiesto, fornisci una password a tua scelta per il comando:
echo -n "test" | openssl enc -e -aes-256-ofb -a -salt
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.birthDate', 'Patient.text.div' ], 'action': 'INSPECT_AND_TRANSFORM' } }, 'text': { 'transformations': { 'infoTypes': [ 'DATE' ], 'dateShiftConfig': { 'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=' } } } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1981-02-19", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "Smith", "given": [ "Darcy" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1981-02-19</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName', 'Patient.text.div' ], 'action': 'INSPECT_AND_TRANSFORM' } }, 'text': { 'transformations': { 'infoTypes': [ 'DATE' ], 'dateShiftConfig': { 'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=' } } } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1981-02-19", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "Smith", "given": [ "Darcy" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1981-02-19</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
L'output mostra che il valore in birthDate
e la data di nascita in Patient.text.div
sono stati trasformati in un nuovo valore di 1981-02-19
. Questa trasformazione è frutto di una combinazione della differenza di 100 giorni con l'ID paziente e il valore cryptoKey
fornito.
I nuovi valori per birthDate
e la data di nascita in Patient.text.div
sono
coerenti per questo paziente tra
l'esecuzione dell'anonimizzazione, a condizione che venga fornito lo stesso cryptoKey
.
CryptoHashConfig
L'API Cloud Healthcare è in grado di trasformare i dati sostituendo i valori con hash crittografici (chiamati anche valori surrogati). Per farlo, specifica un
messaggio cryptoHashConfig
.
Puoi lasciare vuoto il campo cryptoHashConfig
oppure puoi fornirlo con:
- (Deprecato): una chiave con codifica AES a 128/192/256 bit non elaborata a 64 bit.
- (Consigliato): una chiave aggregata Cloud Key Management Service (Cloud KMS). Consulta la sezione Anonimizzare e reidentificare il testo sensibile per un esempio di come utilizzare le chiavi con wrapping di Cloud KMS.
Devi concedere un ruolo con l'cloudkms.cryptoKeyVersions.useToDecrypt
autorizzazione all'agente di servizio Cloud Healthcare Account di servizio per decriptare la chiave aggregata Cloud KMS. Consigliamo di utilizzare il ruolo
Decriptatore crittografico Cloud KMS (roles/cloudkms.cryptoKeyDecrypter
).
Se utilizzi Cloud KMS per le operazioni crittografiche, vengono applicati i costi. Per ulteriori informazioni, consulta i prezzi di Cloud Key Management Service.
Fornisci una chiave coerente genera valori surrogati coerenti tra le esecuzioni di anonimizzazione. Se non fornisci una chiave, l'API Cloud Healthcare genera una nuova chiave ogni volta che viene eseguita l'operazione. L'utilizzo di una chiave diversa produce valori di surrogato differenti.
Gli esempi riportati di seguito si espandono nell'esempio utilizzato in Anonimizzazione di percorsi FHIR specifici, ma ora includono l'impostazione dell'infoType PERSON_NAME
con la trasformazione cryptoKey
sul percorso Patient.HumanName
. Dopo aver inviato la richiesta di anonimizzazione all'API Cloud Healthcare, i valori name.family
e name.given
vengono sostituiti con valori surrogati.
La criptochiave fornita nell'esempio, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=
,
è una chiave con crittografia AES a 256 bit non criptata, generata utilizzando il seguente comando. Quando richiesto, fornisci una password a tua scelta per il comando:
echo -n "test" | openssl enc -e -aes-256-ofb -a -salt
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName' ], 'action': 'INSPECT_AND_TRANSFORM' } }, 'text': { 'transformations': { 'infoTypes': [ 'PERSON_NAME' ], 'cryptoHashConfig': { 'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=' } } } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "NlVBV12Hhb5DD8WNqlTpXboFxzlUSlqAmYDet/jIViQ=", "given": [ "FSH4D/IGb80a1rS0L0kqfC3DCDt6//17VPhIkOzH2pk=" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } }, 'text': { 'transformations': { 'infoTypes': [ 'PERSON_NAME' ], 'cryptoHashConfig': { 'cryptoKey': 'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=' } } } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "NlVBV12Hhb5DD8WNqlTpXboFxzlUSlqAmYDet/jIViQ=", "given": [ "FSH4D/IGb80a1rS0L0kqfC3DCDt6//17VPhIkOzH2pk=" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
L'output mostra che i valori per name.family
e name.given
sono stati trasformati utilizzando l'hashing crittografico. Questa trasformazione è avvenuta come risultato della combinazione dell'ID paziente e del valore cryptoKey
fornito.
I nuovi valori name.family
e name.given
sono coerenti per questo paziente
tra l'esecuzione dell'anonimizzazione, a condizione che venga fornito lo stesso cryptoKey
.
ReplaceWithInfoTypeConfig
L'API Cloud Healthcare può trasformare i dati sostituendo i valori con il nome infoType
del valore. Puoi farlo specificando un messaggio
replaceWithInfoTypeConfig
.
Gli esempi riportati di seguito si espandono sul campione utilizzato in Anonimizzazione di percorsi FHIR specifici, ma definiscono la trasformazione di replaceWithInfoType
in PERSON_NAME
e il percorso fieldMetadataList
impostato su Patient.HumanName
.
Dopo aver inviato la richiesta di anonimizzazione
all'API Cloud Healthcare, i valori name.family
e name.given
vengono sostituiti con infoType
.
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName' ], 'action': 'INSPECT_AND_TRANSFORM' } }, 'text': { 'transformations': { 'infoTypes': [ 'PERSON_NAME' ], 'replaceWithInfoType': {} } } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/fhir+json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732"Il server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "[PERSON_NAME]", "given": [ "[PERSON_NAME]" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID', 'config': { 'fhir': { 'fieldMetadataList': { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } }, 'text': { 'transformations': { 'infoTypes': [ 'PERSON_NAME' ], 'replaceWithInfoTypeConfig': {} } } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione
get
per monitorare lo stato dell'operazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentSe la richiesta ha esito positivo, il server restituisce la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene
"done": true
.
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_NUMBER", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifySummary", "successStoreCount": "1", "successResourceCount": "1" } }Utilizza quindi l'ID della risorsa Patient per recuperare i relativi dettagli nel nuovo set di dati di destinazione:
$cred = gcloud auth print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-RestMethod ` -Method Get ` -Headers $headers ` -ContentType: "application/fhir+json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/datasets/DESTINATION_DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient/r77433dd-dkeuc-633743nfd-383nfdsjds732" | ConvertTo-JsonIl server restituisce la seguente risposta:
{ "address": [ { "city": "Anycity", "district": "Anydistrict", "line": [ "123 Main Street" ], "period": { "start": "1990-12-05" }, "postalCode": "12345", "state": "CA", "text": "123 Main Street Anycity, Anydistrict, CA 12345", "type": "both", "use": "home" } ], "birthDate": "1980-12-05", "gender": "female", "id": "r77433dd-dkeuc-633743nfd-383nfdsjds732", "meta": { "lastUpdated": "2018-01-01T2018-01-01T00:00:00+00:00", "versionId": "MTU0MDU4NTcxNjI2MTUxNDAwMAA" }, "name": [ { "family": "[PERSON_NAME]", "given": [ "[PERSON_NAME]" ], "use": "official" } ], "resourceType": "Patient", "text": { "div": "<div><p><b>Patient</b></p><p><b>Name</b>: Smith, Darcy</p><p><b>DateOfBirth</b>: 1980-12-05</p><p><b>Gender</b>: Female</p></div>", "status": "generated" } }
L'output mostra che i valori per name.family
e name.given
sono stati sostituiti dal infoType di valore.
Anonimizzazione dei dati a livello di archivio FHIR
Gli esempi precedenti mostrano come anonimizzare i dati FHIR a livello di set di dati. Per modificare una richiesta di anonimizzazione del set di dati in una richiesta di anonimizzazione dell'archivio FHIR, apporta le seguenti modifiche:
- Modifica il
destinationDataset
nel corpo della richiesta indestinationStore
- Aggiungi
fhirStores/DESTINATION_FHIR_STORE_ID
alla fine del valore indestinationStore
- Aggiungi
fhirStores/SOURCE_FHIR_STORE_ID
quando specifichi la posizione dei dati di origine.
Ad esempio:
Anonimizzazione a livello di set di dati:
'destinationDataset': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID' … "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"
Anonimizzazione a livello di negozio FHIR:
'destinationStore': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/fhirStores/DESTINATION_FHIR_STORE_ID' … "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/fhirStores/SOURCE_FHIR_STORE_ID:deidentify"
Gli esempi riportati di seguito si espandono su anonimizzazione di percorsi FHIR specifici, ma l'anonimizzazione avviene in un singolo archivio FHIR e i dati anonimizzati vengono copiati in un nuovo archivio FHIR. Tieni presente che deve esistere già l'archivio FHIR a cui viene fatto riferimento da DESTINATION_FHIR_STORE_ID.
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationStore': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/fhirStores/DESTINATION_FHIR_STORE_ID', 'config': { 'fhir': { 'fieldMetadataList': [ { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } ] } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/fhirStores/SOURCE_FHIR_STORE_ID:deidentify"
Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON.
Al termine dell'anonimizzazione, la risposta contiene "done": true
.
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyFhirStore", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifyFhirStoreSummary" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationStore': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/fhirStores/DESTINATION_FHIR_STORE_ID', 'config': { 'fhir': { 'fieldMetadataList': [ { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } ] } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/fhirStores/SOURCE_FHIR_STORE_ID:deidentify" | Select-Object -Expand Content
Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
La risposta contiene un ID operazione. Puoi utilizzare il metodo Operazione get
per monitorare lo stato dell'operazione:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
Se la richiesta ha esito positivo, il server restituisce
la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene "done": true
.
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyFhirStore", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifyFhirStoreSummary" } }
Anonimizzazione di un sottoinsieme di un archivio FHIR
Quando anonimizzi i dati FHIR a livello di archivio FHIR, puoi anonimizzare un sottoinsieme di dati specificando un filtro.
Il filtro si presenta sotto forma di elenco di ID risorse FHIR. Devi specificare gli ID in un oggetto Resources
all'interno dell'oggetto FhirFilter
.
L'esempio seguente si espande sull'anonimizzazione dei dati a livello di archivio FHIR, ma viene fornito un elenco di due ID risorsa FHIR (uno per un paziente e uno per un'osservazione) che determina quali risorse sono anonimizzate.
Curling
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'destinationStore': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/fhirStores/DESTINATION_FHIR_STORE_ID', 'config': { 'fhir': { 'fieldMetadataList': [ { 'action': 'TRANSFORM', 'paths': [ 'Patient.HumanName' ] } ] } }, 'resourceFilter': { 'resources': { 'resources': [ 'Patient/PATIENT_ID', 'Observation/OBSERVATION_ID' ] } } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/fhirStores/SOURCE_FHIR_STORE_ID:deidentify"
Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
La risposta contiene il nome di un'operazione. Puoi utilizzare il metodo Operazione get
per monitorare lo stato dell'operazione:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"
Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON.
Al termine dell'anonimizzazione, la risposta contiene "done": true
.
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyFhirStore", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifyFhirStoreSummary" } }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'destinationStore': 'projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/fhirStores/DESTINATION_FHIR_STORE_ID', 'resourceFilter': { 'resources': { 'resources': [ 'Patient/PATIENT_ID', 'Observation/OBSERVATION_ID' ] } }, 'config': { 'fhir': { 'fieldMetadataList': [ { 'paths': [ 'Patient.HumanName' ], 'action': 'TRANSFORM' } ] } } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/fhirStores/SOURCE_FHIR_STORE_ID:deidentify" | Select-Object -Expand Content
Se la richiesta ha esito positivo, il server restituisce la risposta in formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
La risposta contiene un ID operazione. Puoi utilizzare il metodo Operazione get
per monitorare lo stato dell'operazione:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
Se la richiesta ha esito positivo, il server restituisce
la risposta in formato JSON. Al termine del processo di anonimizzazione, la risposta contiene "done": true
.
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.deidentify.DeidentifyService.DeidentifyFhirStore", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.deidentify.DeidentifyFhirStoreSummary" } }
Anonimizzazione dei dati nella console
Puoi anonimizzare i dati nella console per un set di dati o per un archivio FHIR. La configurazione di anonimizzazione FHIR viene utilizzata per anonimizzare sia i set di dati che gli archivi FHIR. Per ulteriori informazioni, consulta la sezione Anonimizzazione dei dati FHIR predefinita.
Anonimizzazione dei dati per un set di dati
Per anonimizzare i dati per un set di dati, procedi nel seguente modo:
Nella console, vai alla pagina Set di dati.
Scegli Anonimizza dall'elenco Azioni per il set di dati che stai anonimizzando.
Viene visualizzata la pagina Anonimizzazione del set di dati.
Seleziona Imposta set di dati di destinazione e inserisci un nome per il nuovo set di dati per archiviare i dati anonimizzati.
Fai clic su Anonimizza per anonimizzare i dati nel set di dati.
Anonimizzazione dei dati in un archivio FHIR
Per anonimizzare i dati in un archivio FHIR, completa i seguenti passaggi:
Nella console, vai alla pagina Set di dati.
Fai clic sul set di dati per il quale vuoi anonimizzare i dati.
Nell'elenco degli archivi FHIR, scegli Anonimizza dall'elenco Azioni per l'archivio Filestore che stai anonimizzando.
Viene visualizzata la pagina Anonimizza il negozio FHIR.
Seleziona Imposta archivio dati di destinazione e scegli il set di dati e l'archivio FHIR in cui vengono salvati i dati anonimizzati.
Nota: se vuoi archiviare i tuoi dati anonimizzati in un nuovo archivio FHIR, devi prima creare il nuovo archivio e poi selezionarlo come negozio FHIR di destinazione.
Fai clic su Anonimizza per anonimizzare i dati nell'archivio FHIR.
Risolvere i problemi relativi all'anonimizzazione FHIR
Se si verificano errori durante un'operazione di anonimizzazione FHIR, vengono registrati in Cloud Logging. Per saperne di più, consulta Visualizzazione dei log degli errori in Cloud Logging.
Se l'intera operazione restituisce un errore, consulta la sezione Risoluzione dei problemi relativi alle operazioni a lunga esecuzione.