このページでは、Cloud Healthcare API を使用して、次のレベルで FHIR リソース内の機密データを匿名化する方法について説明します。
datasets.deidentify
を使用したデータセット レベルfhirStores.deidentify
を使用した FHIR ストアレベル
また、このページでは、FHIR ストアレベルでデータを匿名化する場合にフィルタを適用する方法についても説明します。
匿名化の概要
データセット レベルの匿名化
データセット レベルで FHIR データを匿名化するには、datasets.deidentify
オペレーションを呼び出します。匿名化 API 呼び出しには次のコンポーネントがあります。
- ソース データセット: 機密データを含む 1 つ以上のリソースがある FHIR ストアを含むデータセット。
- 宛先データセット: 匿名化は元のデータセットまたはそのデータに影響しません。代わりに、元のデータの匿名化されたコピーは、新しいデータセット(宛先データセット)に書き込まれます。
- 匿名化の対象: データセットの処理方法を指定する構成パラメータ。これらのパラメータは、
DeidentifyConfig
オブジェクト内のFhirConfig
またはTextConfig
を指定し、次のいずれかによって渡すことによって構成できます。- リクエスト本文の
config
フィールドを設定する - Cloud Storage に JSON 形式で保存し、リクエスト本文の
gcsConfigUri
フィールドを使用してバケット内のファイルの場所を指定する
- リクエスト本文の
このガイドのサンプルの大部分は、データセット レベルで FHIR データを匿名化する方法を示しています。
FHIR ストアレベルの匿名化
FHIR ストアレベルで FHIR データを匿名化すると、匿名化する FHIR データをより細かく制御できます。
FHIR ストア内の FHIR データを匿名化するには、fhirStores.deidentify
メソッドを呼び出します。匿名化 API 呼び出しには次のコンポーネントがあります。
- ソース FHIR ストア: 機密データを含む 1 つ以上のリソースを持つ FHIR ストア。
- 宛先 FHIR ストア: 匿名化は元の FHIR ストアまたはそのデータに影響を与えません。代わりに、元のデータの匿名化されたコピーが宛先 FHIR ストアに書き込まれます。宛先 FHIR ストアはすでに存在している必要があります。
- 匿名化の対象: FHIR ストアの処理方法を指定する構成パラメータ。これらのパラメータは、
DeidentifyConfig
オブジェクト内のFhirConfig
またはTextConfig
を指定し、次のいずれかによって渡すことによって構成できます。- リクエスト本文の
config
フィールドを設定する - Cloud Storage に JSON 形式で保存し、リクエスト本文の
gcsConfigUri
フィールドを使用してバケット内のファイルの場所を指定する
- リクエスト本文の
FHIR ストアレベルで FHIR データを匿名化する方法の例については、FHIR ストアレベルのデータの匿名化をご覧ください。
フィルタ
FHIR ストア内のデータのサブセットを匿名化するには、fhirStores.deidentify
リクエストで FHIR リソース ID のリストを指定します。例については、FHIR ストアのサブセットの匿名化をご覧ください。
このガイドで使用する FHIR リソースの例
このガイドのサンプルでは、FHIR ストアの Patient(DSTU2、STU3、R4)リソースを使用します。Patient には、次のサンプルのようなプロパティがあります。id
値はサーバーによって生成されます。独自の FHIR ストアで Patient リソースを作成した場合、返される id
値はサンプルの Patient に表示される値とは異なります。
{
"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>"
}
}
デフォルトの FHIR データの匿名化
FHIR データを匿名化するには、FHIR ストア内のリソースに共通する保護対象保健情報(PHI)を秘匿化する「デフォルト」の方法があります。デフォルトの方法では、次の情報が削除されます。
- デフォルト FHIR infoType で指定された infoType
- デフォルト FHIR 匿名化プロファイルで指定されたパス
次のサンプルは、FHIR のデフォルト メソッドを使用して Patient リソースを匿名化する方法を示しています。デフォルトのメソッドを使用する場合は、DeidentifyConfig
オブジェクト内で空の FhirConfig
を使用します。
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
次の値が変換され、リソースを匿名化されていることがわかります。
- 日付シフト手法で 100 日間の差分が使用され、
birthDate
フィールドに新しい値が指定されました。 address.city
の値が編集されました。address.district
の値が編集されました。address.line
の値が編集されました。address.postalCode
の値が編集されました。address.text
の値が編集されました。name.family
の値が編集されました。name.given
の値が編集されました。text.div
フィールドの自由テキストが変更され、患者の名前が infoType の[PERSON_NAME]
に置き換えられました。患者の生年月日の値がbirthDate
フィールドと同じ方法で変換されました。
特定の FHIR パスの匿名化
匿名化する FHIR パスとその変換方法を指定するには、FhirConfig
オブジェクトで fieldMetadataList
を構成します。
fieldMetadataList
内で、paths
リスト内のフィールド名または FHIR リソースタイプ名のピリオド区切りのリストを指定します。次に、paths
にリストされているすべての項目に適用する Action
値を指定します。有効な値については、Action
のドキュメントをご覧ください。
Cloud Healthcare API で paths
フィールドを設定する方法については、paths
をご覧ください。paths
の値の形式は FHIRPath に基づいています。
デフォルトの FHIR 匿名化プロファイル
デフォルトでは、fieldMetadataList
に FHIR パスを指定しない場合、Cloud Healthcare API は次の匿名化プロファイルを適用して FHIR パスを選択し変換します。適用されるプロファイルは、使用している FHIR のバージョンによって異なります。以下のセクションを展開して、使用しているバージョンのプロファイルを表示できます。プロファイル(DSTU2、STU3、R4)をダウンロードすることもできます。
パスを使用したリソースの匿名化
次のサンプルは、次の条件で Patient リソースの匿名化を構成する方法を示しています。
- Patient リソースの
HumanName
(DSTU2、STU3、R4)値には、自動的にTRANSFORM
(削除)が適用されます。サンプル患者の場合、HumanName の値は"family": "Smith"
と"given": [ "Darcy" ]
です。
fieldMetadataList
内の paths
リストには他の値が指定されていないため、残りのデータは変更されません。
次のサンプルは、Patient リソースの HumanName 値を匿名化する方法を示しています。
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
次の値が変換され、リソースを匿名化されていることがわかります。
name.family
の値が編集されました。name.given
の値が編集されました。
ただし、一般的な PHI を変換するデフォルトの FHIR 匿名化のサンプルとは異なり、text.div
の患者の address
、birthDate
、自由テキストは fieldMetadataList
の paths
リストに追加されていないため、変換されません。
infoType とプリミティブ変換を FHIR リソースに使用する
Cloud Healthcare API では、情報タイプ(infoType)を使用して、FHIR リソースで匿名化を実施するときにスキャンするデータを定義できます。infoType は、患者名、メールアドレス、電話番号、識別番号、クレジット カード番号などの機密データのタイプを表します。Cloud Healthcare API の匿名化オペレーションで使用される infoType には、Cloud Data Loss Prevention にあるものが含まれます。
プリミティブ変換は、入力値の変換に使用されるルールです。
デフォルトの FHIR infoType
FHIR データの匿名化で使用されるデフォルトの infoType は次のとおりです。
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
プリミティブ変換オプション
Cloud Healthcare API のプリミティブ変換オプションは次のとおりです。
RedactConfig
: 値を削除します。CharacterMaskConfig
: 指定された固定文字で入力文字を置換し、文字列全体または一部をマスキングします。DateShiftConfig
: コンテキストの一貫性を維持しながら、任意の日数で日付をシフトします。CryptoHashConfig
: SHA-256 を使用して入力値を、指定したデータ暗号鍵で生成されたハッシュ出力文字列の Base64 エンコード表現に置き換えます。ReplaceWithInfoTypeConfig
: infoType の名前で入力値を置換します。
TextConfig
での構成の指定
InfoType とプリミティブ変換は、TextConfig
内のオブジェクトである InfoTypeTransformation
内で指定されます。infoTypes
配列で infoType をカンマ区切り値として指定します。
infoType の指定は省略できます。infoType を 1 つも指定しない場合、変換はデータ内のすべての組み込み infoType に適用されます。
InfoTypeTransformation
で infoType を指定する場合、少なくとも 1 つのプリミティブ変換を指定します。
以下のセクションでは、InfoTypeTransformation
で利用できるプリミティブ変換と infoType を使用して、FHIR リソースの匿名化方法をカスタマイズする方法を示します。
RedactConfig
redactConfig
を指定すると、特定の値を完全に削除してその値を秘匿化します。redactConfig
メッセージに引数はありません。指定すると、変換が有効になります。
次のサンプルは、Patient.text.div
フィールドの Patient リソースの生年月日を削除する方法を示しています。このタスクを実行するには、Patient.text.div
パスと redactConfig
変換を使用して DATE
infoType を設定します。
匿名化リクエストを Cloud Healthcare API に送信すると、Patient.text.div
値の生年月日は削除されます。
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
出力から、text.div
の DateOfBirth
の値が削除されたことがわかります。デフォルトの構成を使用して text.div
の DateOfBirth
の値が削除されていない特定の FHIR パスの匿名化のサンプルとは対照的です。
CharacterMaskConfig
characterMaskConfig
を指定すると、指定された infoType に対応する文字列が指定の固定文字に置き換えられます。たとえば、患者の名前の秘匿化や、暗号ハッシュを使用しての変換の代わりに、名前をアスタリスク(*
)に置き換えることができます。maskingCharacter
フィールドへの値として固定文字を指定します。
次のサンプルは、特定の FHIR パスの匿名化で使用したサンプルを展開する方法を示していますが、characterMaskConfig
変換での PERSON_NAME
infoType が設定されています。固定文字が指定されていないため、マスキングではデフォルトでアスタリスクが使用されます。匿名化リクエストを Cloud Healthcare API に送信すると、name.family
と name.given
の値がアスタリスクに置き換えられます。
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
出力に、name.family
と name.given
の値がアスタリスクに置き換えられたことが示されます。これは、name.family
と name.given
の値が編集された特定の FHIR パスの匿名化のサンプルとは対照的です。
DateShiftConfig
Cloud Healthcare API では、事前設定された範囲内でシフトすることで日付を変換できます。匿名化の実行全体で日付変換の一貫性を保つには、次のいずれかで DateShiftConfig
を使用します。
- (非推奨): 未加工の AES 128/192/256 ビットの Base64 エンコードされた鍵。
- (推奨): Cloud Key Management Service(Cloud KMS)でラップされた鍵。Cloud KMS でラップされた鍵の使用例については、機密テキストの匿名化と再識別をご覧ください。
cloudkms.cryptoKeyVersions.useToDecrypt
権限を持つロールを Cloud Healthcare サービス エージェント サービス アカウントに付与して、Cloud KMS でラップされた鍵を復号する必要があります。Cloud KMS CryptoKey 復号のロール(roles/cloudkms.cryptoKeyDecrypter
)を使用することをおすすめします。暗号オペレーションに Cloud KMS を使用する場合は、料金が適用されます。詳細については、Cloud Key Management Service の料金をご覧ください。
Cloud Healthcare API は、この鍵を使用して、患者の生年月日などの日付が 100 日間の差分内でシフトする量を計算します。
鍵を指定しない場合、日付値で匿名化オペレーションを実行するたびに Cloud Healthcare API が独自の鍵を生成します。その結果、実行する度に日付の出力に不整合が生じる可能性があります。
次のサンプルでは、Patient.birthDate
パスと Patient.text.div
パスで DateShiftConfig
変換を使用して DATE
infoType を設定する方法を示しています。匿名化リクエストを Cloud Healthcare API に送信した後、Patient.text.div
の birthDate
値と生年月日は、元の生年月日 1980-12-05
の前後 100 日の範囲内に変化します。
この例で指定される暗号鍵 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=
は、次のコマンドを使用して生成された未加工の AES 暗号化の 256 ビットの Base64 エンコード鍵です。プロンプトが表示されたら、コマンドに任意のパスワードを入力します。
echo -n "test" | openssl enc -e -aes-256-ofb -a -salt
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
出力は、birthDate
の値と Patient.text.div
の生年月日が新しい値 1981-02-19
に変換されたことを示しています。この変換は、100 日間の差分と Patient ID および指定された cryptoKey
の値を組み合わせて発生しました。この Patient の birthDate
の新しい値と Patient.text.div
の生年月日は、同じ cryptoKey
が指定されている限り、匿名化の実行間で一貫しています。
CryptoHashConfig
Cloud Healthcare API では、値を暗号ハッシュ(サロゲート値とも呼ばれます)に置き換えることでデータを変換できます。そのためには、cryptoHashConfig
メッセージを指定します。
cryptoHashConfig
は、空のままにすることも、次のいずれかで指定することもできます。
- (非推奨): 未加工の AES 128/192/256 ビットの Base64 エンコードされた鍵。
- (推奨): Cloud Key Management Service(Cloud KMS)でラップされた鍵。Cloud KMS でラップされた鍵の使用例については、機密テキストの匿名化と再識別をご覧ください。
cloudkms.cryptoKeyVersions.useToDecrypt
権限を持つロールを Cloud Healthcare サービス エージェント サービス アカウントに付与して、Cloud KMS でラップされた鍵を復号する必要があります。Cloud KMS CryptoKey 復号のロール(roles/cloudkms.cryptoKeyDecrypter
)を使用することをおすすめします。暗号オペレーションに Cloud KMS を使用する場合は、料金が適用されます。詳細については、Cloud Key Management Service の料金をご覧ください。
一貫性のある鍵を指定すると、匿名化の実行間で一貫したサロゲート値が生成されます。鍵を指定しない場合、Cloud Healthcare API はオペレーションが実行されるたびに新しい鍵を生成します。異なる鍵を使用すると、異なるサロゲート値が生成されます。
次のサンプルは、特定の FHIR パスの匿名化で使用したサンプルを展開したものですが、Patient.HumanName
パスの cryptoKey
変換で PERSON_NAME
infoType が設定されています。匿名化リクエストを Cloud Healthcare API に送信すると、name.family
と name.given
の値がサロゲート値に置き換えられます。
この例で指定される暗号鍵 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=
は、次のコマンドを使用して生成された未加工の AES 暗号化の 256 ビットの Base64 エンコード鍵です。プロンプトが表示されたら、コマンドに任意のパスワードを入力します。
echo -n "test" | openssl enc -e -aes-256-ofb -a -salt
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
出力は、name.family
と name.given
の値が暗号ハッシュを使用して変換されたことを示しています。この変換は、Patient ID と指定された cryptoKey
値を組み合わせて発生しました。この Patient の新しい name.family
と name.given
の値は、同じ cryptoKey
が指定されている限り、匿名化の実行間で同じです。
ReplaceWithInfoTypeConfig
Cloud Healthcare API は、値を値の infoType
の名前に置き換えることでデータを変換できます。そのためには、replaceWithInfoTypeConfig
メッセージを指定します。
次のサンプルでは、特定の FHIR パスの匿名化で使用されているサンプルが拡張されていますが、replaceWithInfoType
の変換を PERSON_NAME
で定義し、fieldMetadataList
パスを Patient.HumanName
に設定しています。匿名化リクエストを Cloud Healthcare API に送信すると、name.family
と name.given
の値が値の infoType
に置き換えられます。
curl
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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。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"リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
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"サーバーは次のレスポンスを返します。
{ "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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/REGION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }レスポンスにはオペレーション名が含まれています。オペレーションの
get
メソッドを使用して、このオペレーションのステータスを追跡できます。$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 Contentリクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには
"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" } }次に、Patient ID を使用して、新しい宛先データセットの Patient リソースの詳細を取得できます。
$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-Jsonサーバーは次のレスポンスを返します。
{ "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" } }
出力には、name.family
と name.given
の値が値の infoType に置き換えられていることが示されています。
FHIR ストアレベルでのデータの匿名化
上記の例は、データセット レベルで FHIR データを匿名化する方法を示しています。データセット匿名化リクエストを FHIR ストア匿名化リクエストに変更するには、次の項目を変更します。
- リクエスト本文の
destinationDataset
をdestinationStore
に変更します。 destinationStore
の値の末尾にfhirStores/DESTINATION_FHIR_STORE_ID
を追加します。- ソースデータの場所を指定するときに
fhirStores/SOURCE_FHIR_STORE_ID
を追加します。
例:
データセット レベルの匿名化:
'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"
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"
次のサンプルは特定の FHIR パスの匿名化を展開したものですが、匿名化は単一の FHIR ストアで発生し、匿名化されたデータは新しい FHIR ストアにコピーされます。DESTINATION_FHIR_STORE_ID によって参照される FHIR ストアはすでに存在している必要があります。
curl
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"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
レスポンスにはオペレーション名が含まれています。オペレーションの get
メソッドを使用して、このオペレーションのステータスを追跡できます。
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"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "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
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
レスポンスにはオペレーション ID が含まれています。オペレーションの get
メソッドを使用して、このオペレーションのステータスを追跡できます。
$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
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "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" } }
FHIR ストアのサブセットの匿名化
FHIR ストアレベルで FHIR データを匿名化する場合は、フィルタを指定してデータのサブセットを匿名化できます。
フィルタは、FHIR リソース ID のリストの形式をとります。ID は、FhirFilter
オブジェクト内の Resources
オブジェクトで指定します。
次のサンプルは、FHIR ストアレベルでのデータの匿名化を展開したものですが、2 つの FHIR リソース ID(Patient と Observation)のリストがあり、どちらのリソースを匿名化するかが指定されています。
curl
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"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
レスポンスにはオペレーション名が含まれています。オペレーションの get
メソッドを使用して、このオペレーションのステータスを追跡できます。
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"
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "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
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" }
レスポンスにはオペレーション ID が含まれています。オペレーションの get
メソッドを使用して、このオペレーションのステータスを追跡できます。
$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
リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。匿名化プロセスが完了すると、レスポンスには "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" } }
Google Cloud コンソールでのデータの匿名化
Google Cloud コンソールでは、データセットと FHIR ストアのいずれかのデータを匿名化できます。デフォルトの FHIR 匿名化構成は、データセットと FHIR ストアの両方の匿名化で使用されます。詳細については、デフォルトの FHIR データの匿名化をご覧ください。
データセットのデータの匿名化
データセットのデータを匿名化するには:
Google Cloud コンソール で、データセット ページに移動します。
匿名化するデータセットの [アクション] リストから [匿名化] を選択します。
[データセットの匿名化] ページが表示されます。
[宛先データセットを設定] を選択し、匿名化されたデータを保存する新しいデータセットの名前を入力します。
[匿名化] をクリックして、データセット内のデータを匿名化します。
FHIR ストアでのデータの匿名化
FHIR ストアのデータを匿名化するには:
Google Cloud コンソール で、データセット ページに移動します。
データを匿名化するデータセットをクリックします。
FHIR ストアのリストで、匿名化する FHIR ストアの [アクション] リストから [匿名化] を選択します。
[FHIR ストアの匿名化] ページが表示されます。
[宛先データストアの設定] を選択し、匿名化されたデータの保存先となるデータセットと FHIR ストアを選択します。
注: 匿名化されたデータを新しい FHIR ストアに保存する場合は、まず新しいストアを作成し、それをエクスポート先の FHIR ストアとして選択する必要があります。
[匿名化] をクリックして、FHIR ストアのデータを匿名化します。
FHIR 匿名化オペレーションのトラブルシューティング
FHIR 匿名化オペレーション中にエラーが発生した場合、エラーは Cloud Logging に記録されます。詳細については、Cloud Logging でのエラーログの表示をご覧ください。
オペレーション全体がエラーで返る場合は、長時間実行オペレーションのトラブルシューティングをご覧ください。