FHIR 데이터 익명화

이 페이지에서는 다음 수준에서 Cloud Healthcare API를 사용하여 FHIR 리소스에서 민감한 정보를 익명화하는 방법을 설명합니다.

이 페이지에서는 FHIR 저장소 수준에서 데이터를 익명화할 때 필터를 적용하는 방법도 설명합니다.

익명화 개요

데이터 세트 수준 익명화

데이터 세트 수준에서 FHIR 데이터를 익명화하려면 datasets.deidentify 작업을 호출합니다. 익명화 API 호출에는 다음과 같은 구성요소가 있습니다.

  • 소스 데이터 세트: 민감한 정보가 있는 하나 이상의 리소스가 있는 FHIR 저장소가 포함된 데이터 세트입니다.
  • 대상 데이터 세트: 익명화는 원래 데이터 세트 또는 데이터에 영향을 주지 않습니다. 대신 원본 데이터의 익명화된 복사본이 대상 데이터 세트라고 하는 새 데이터 세트에 기록됩니다.
  • 익명화할 대상: 데이터 세트 처리 방법을 지정하는 구성 매개변수입니다. DeidentifyConfig 객체 내부의 FhirConfig 및/또는 TextConfig에서 이러한 매개변수를 지정하고 다음 중 하나로 전달하여 구성할 수 있습니다.
    • 요청 본문의 config 필드 설정
    • Cloud Storage에 JSON 형식으로 저장하고 요청 본문의 gcsConfigUri 필드를 사용하여 버킷의 파일 위치 지정

이 가이드의 샘플 대부분은 데이터 세트 수준에서 FHIR 데이터를 익명화하는 방법을 보여줍니다.

FHIR 저장소 수준 익명화

FHIR 저장소 수준에서 FHIR 데이터를 익명화하면 어떤 FHIR 데이터를 익명화되는지 보다 세부적으로 제어할 수 있습니다.

FHIR 저장소에서 FHIR 데이터를 익명화하려면 fhirStores.deidentify 메서드를 호출합니다. 익명화 API 호출에는 다음과 같은 구성요소가 있습니다.

  • 소스 FHIR 저장소: 민감한 정보가 있는 하나 이상의 리소스가 포함된 FHIR 저장소입니다.
  • 대상 FHIR 저장소: 익명화는 원본 FHIR 저장소 또는 해당 데이터에 영향을 주지 않습니다. 대신 원본 데이터의 익명화된 복사본이 대상 FHIR 저장소에 기록됩니다. 대상 FHIR 저장소가 이미 있어야 합니다.
  • 익명화할 대상: FHIR 저장소를 처리하는 방법을 지정하는 구성 매개변수입니다. DeidentifyConfig 객체 내부의 FhirConfig 및/또는 TextConfig에서 이러한 매개변수를 지정하고 다음 중 하나로 전달하여 구성할 수 있습니다.
    • 요청 본문의 config 필드 설정
    • Cloud Storage에 JSON 형식으로 저장하고 요청 본문의 gcsConfigUri 필드를 사용하여 버킷의 파일 위치 지정

FHIR 저장소 수준에서 FHIR 데이터를 익명화하는 방법의 예시는 FHIR 저장소 수준에서 데이터 익명화를 참조하세요.

필터

fhirStores.deidentify 요청에 FHIR 리소스 ID 목록을 지정하여 FHIR 저장소의 데이터 하위 집합을 익명화할 수 있습니다. 예시를 보려면 FHIR 저장소의 하위 집합 익명화를 참조하세요.

이 가이드에 사용된 샘플 FHIR 리소스

이 가이드의 샘플은 FHIR 저장소에 있는 환자(DSTU2, STU3, R4) 리소스를 사용합니다. 환자는 다음 샘플에 표시된 속성을 갖습니다. id 값은 서버에서 생성됩니다. 고유한 FHIR 저장소에 환자 리소스를 만드는 경우 반환된 id 값은 샘플 환자에 표시된 값과 다릅니다.

{
  "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 저장소의 리소스에서 일반 보호 건강 정보(PHI)를 수정하는 '기본' 메서드를 사용하여 FHIR 데이터를 익명화할 수 있습니다. 기본 메서드는 다음 정보를 수정합니다.

다음 샘플은 FHIR 기본 메서드를 사용하여 환자 리소스를 익명화하는 방법을 보여줍니다. 기본 메서드를 사용할 때는 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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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 리소스 유형 이름 목록을 지정합니다. 그런 다음 Action 값을 지정하여 paths에 나열된 모든 항목에 적용합니다. 가능한 값은 Action 문서를 참조하세요.

Cloud Healthcare API에서 paths 필드를 설정하는 방법은 paths를 참조하세요. paths의 값 형식은 FHIRPath를 기반으로 합니다.

기본 FHIR 익명화 프로필

기본적으로 fieldMetadataList에 FHIR 경로를 지정하지 않으면 Cloud Healthcare API는 다음 익명화 프로필을 적용하여 FHIR 경로를 선택하고 변환합니다. 적용되는 프로필은 사용 중인 FHIR 버전에 따라 다릅니다. 다음 섹션을 펼치면 사용 중인 버전의 프로필을 볼 수 있습니다. 프로필(DSTU2, STU3, R4)을 다운로드할 수도 있습니다.

경로를 사용하여 리소스 익명화

다음 샘플은 다음 기준에 따라 환자 리소스 익명화를 구성하는 방법을 보여줍니다.

  • 환자 리소스의 HumanName(DSTU2, STU3, R4) 값에 자동으로 TRANSFORM(수정)이 적용됩니다. 샘플 환자의 경우 HumanName 값은 "family": "Smith""given": [ "Darcy" ]입니다.

fieldMetadataList 내의 paths 목록에는 다른 값이 제공되지 않으므로 나머지 데이터는 변경되지 않습니다.

다음 샘플은 환자 리소스의 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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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 익명화의 샘플과 달리 환자의 address, birthDate, text.div의 자유 텍스트는 변환되지 않았습니다. fieldMetadataListpaths 목록에 추가되지 않았기 때문입니다.

FHIR 리소스와 함께 infoType 및 기본 변환 사용

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을 최소 한 개 이상 지정하지 않으면 변환이 데이터의 모든 기본 제공 infoType으로 적용됩니다.

InfoTypeTransformation에 infoType을 지정하는 경우 최소 한 개 이상의 기본 변환을 지정합니다.

다음 섹션에서는 infoType과 함께 InfoTypeTransformation에서 사용할 수 있는 기본 변환을 사용하여 FHIR 리소스를 익명화하는 방법을 보여줍니다.

RedactConfig

redactConfig를 지정하면 지정된 값을 완전히 삭제하는 방식으로 값이 수정됩니다. redactConfig 메시지는 인수가 없으며 지정하면 변환이 사용 설정됩니다.

다음 샘플은 Patient.text.div 필드에서 환자 리소스의 생년월일을 수정하는 방법을 보여줍니다. 이 작업은 DATE infoType을 Patient.text.div 경로와 redactConfig 변환을 통해 수정하여 수행됩니다.

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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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.divDateOfBirth 값이 삭제된 것으로 표시됩니다. 이는 기본 구성을 사용하여 text.divDateOfBirth 값이 삭제되지 않은 특정 FHIR 경로 익명화의 샘플과 대조됩니다.

CharacterMaskConfig

characterMaskConfig를 지정하면 지정된 infoType에 해당하는 문자열을 지정된 고정 문자로 대체합니다. 예를 들어 환자 이름을 수정하거나 암호화 해싱을 사용하여 변환하지 않고 이름을 일련의 별표(*)로 바꿀 수 있습니다. 고정 문자를 maskingCharacter 필드에 값으로 지정할 수 있습니다.

다음 샘플은 특정 FHIR 경로 익명화에 사용된 샘플에서 확장하는 방법을 보여주지만 이제 characterMaskConfig 변환을 통해 PERSON_NAME infoType 설정을 포함합니다. 고정 문자가 제공되지 않으므로 기본적으로 마스킹에 별표가 사용됩니다. Cloud Healthcare API로 익명화 요청을 보내면 name.familyname.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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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.familyname.given의 값이 별표로 바뀝니다. 이는 name.familyname.given의 값이 수정된 특정 FHIR 경로 익명화의 샘플과 대조됩니다.

DateShiftConfig

Cloud Healthcare API는 미리 설정한 범위 내에서 날짜를 이동하여 변환할 수 있습니다. 익명화 실행에서 날짜 변환을 일관되게 유지하려면 다음 중 하나와 함께 DateShiftConfig를 사용합니다.

Cloud KMS 래핑 키를 복호화하려면cloudkms.cryptoKeyVersions.useToDecrypt 권한이 있는 역할을 Cloud Healthcare 서비스 에이전트 서비스 계정에 부여해야 합니다. Cloud KMS CryptoKey 복호화 역할(roles/cloudkms.cryptoKeyDecrypter)을 사용하는 것이 좋습니다. 암호화 작업에 Cloud KMS를 사용하면 요금이 청구됩니다. 자세한 내용은 Cloud Key Management Service 가격 책정을 참조하세요.

Cloud Healthcare API는 이 키를 사용하여 환자의 생년월일과 같은 날짜가 100일 차이 내에서 이동되는 양을 계산합니다.

키를 제공하지 않으면 Cloud Healthcare API는 날짜 값에서 익명화 작업이 실행될 때마다 자체 키를 생성합니다. 그러면 실행 사이의 날짜 출력이 일관되지 않을 수 있습니다.

다음 샘플은 Patient.birthDatePatient.text.div 경로에서 DateShiftConfig 변환을 통해 DATE infoType을 설정하는 방법을 보여줍니다. 익명화 요청을 Cloud Healthcare API로 보내면 birthDate 값과 Patient.text.div에 있는 생년월일이 원래 생년월일 1980-12-05에서 100일을 더하거나 뺀 값 내에서 이동합니다.

예시 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=에서 제공되는 CryptoKey는 다음 명령어를 통해 생성된 원시 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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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일 차이를 환자 ID 및 제공된 cryptoKey 값과 결합한 결과입니다. 동일한 cryptoKey가 제공되는 한 birthDate의 새 값과 Patient.text.div의 생년월일은 익명화 실행 간에 이 환자에 대해 일관됩니다.

CryptoHashConfig

Cloud Healthcare API는 값을 암호화 해시(서로게이트 값이라고도 함)로 대체하여 데이터를 변환할 수 있습니다. 이렇게 하려면 cryptoHashConfig 메시지를 지정합니다.

cryptoHashConfig를 비워 두거나 다음 중 하나로 제공할 수 있습니다.

Cloud KMS 래핑 키를 복호화하려면cloudkms.cryptoKeyVersions.useToDecrypt 권한이 있는 역할을 Cloud Healthcare 서비스 에이전트 서비스 계정에 부여해야 합니다. 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.familyname.given 값이 서로게이트 값으로 바뀝니다.

예시 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=에서 제공되는 CryptoKey는 다음 명령어를 통해 생성된 원시 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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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.familyname.given 값이 암호화 해싱을 사용하여 변환되었음을 알 수 있습니다. 이 변환은 환자 ID와 제공된 cryptoKey 값을 결합한 결과입니다. 동일한 cryptoKey가 제공되는 한 익명화 실행 간에 새 name.familyname.given 값은 이 환자에 대해 일관됩니다.

ReplaceWithInfoTypeConfig

Cloud Healthcare API는 값을 값의 infoType 이름으로 바꿔 데이터를 변환할 수 있습니다. 이렇게 하려면 replaceWithInfoTypeConfig 메시지를 지정하면 됩니다.

다음 샘플은 특정 FHIR 경로 익명화에 사용된 샘플에서 확장되지만 PERSON_NAMEreplaceWithInfoType 변환과 Patient.HumanName으로 설정된 fieldMetadataList 경로를 정의합니다. Cloud Healthcare API에 익명화 요청을 보내면 name.familyname.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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
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"
  }
}
다음으로 환자 ID를 사용하여 새 대상 데이터 세트에서 환자 리소스의 세부정보를 가져올 수 있습니다.
$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.familyname.given 값이 값의 infoType으로 대체된 것을 알 수 있습니다.

FHIR 저장소 수준에서 데이터 익명화

앞의 예시는 데이터 세트 수준에서 FHIR 데이터를 익명화하는 방법을 보여줍니다. 데이터 세트 익명화 요청을 FHIR 저장소 익명화 요청으로 변경하려면 다음과 같이 변경합니다.

  • 요청 본문의 destinationDatasetdestinationStore로 수정
  • 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 목록 형식을 사용합니다. FhirFilter 객체의 Resources 객체에서 ID를 지정합니다.

다음 샘플은 FHIR 저장소 수준에서 데이터 익명화를 더 자세히 설명하지만 익명화되는 리소스를 결정하는 두 개의 FHIR 리소스 ID(환자용 및 관찰용)를 제공합니다.

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 콘솔에서 데이터 익명화

데이터 세트 또는 FHIR 저장소에 대해 Google Cloud 콘솔에서 데이터를 익명화할 수 있습니다. 기본 FHIR 익명화 구성은 데이터 세트와 FHIR 저장소를 익명화하는 데 사용됩니다. 자세한 내용은 기본 FHIR 데이터 익명화를 참조하세요.

데이터 세트의 데이터 익명화

데이터 세트의 데이터를 익명화하려면 다음 단계를 완료하세요.

  1. Google Cloud 콘솔에서 데이터 세트 페이지로 이동합니다.

    데이터 세트로 이동

  2. 익명화할 데이터 세트의 작업 목록에서 익명화를 선택합니다.

    익명화 데이터 세트 페이지가 표시됩니다.

  3. 대상 데이터 세트 설정을 선택하고 익명화된 데이터를 저장할 새 데이터 세트의 이름을 입력합니다.

  4. 익명화를 클릭하여 데이터 세트의 데이터를 익명화합니다.

FHIR 저장소에서 데이터 익명화

FHIR 저장소의 데이터를 익명화하려면 다음 단계를 완료합니다.

  1. Google Cloud 콘솔에서 데이터 세트 페이지로 이동합니다.

    데이터 세트로 이동

  2. 데이터를 익명화할 데이터 세트를 클릭합니다.

  3. FHIR 저장소 목록의 익명화 중인 FHIR 저장소에 대한 작업 목록에서 익명화를 선택합니다.

    FHIR 저장소 익명화 페이지가 표시됩니다.

  4. 대상 데이터 저장소 설정을 선택하고 익명화된 데이터를 저장할 데이터 세트와 FHIR 저장소를 선택합니다.

    참고: 익명화된 데이터를 새 FHIR 저장소에 저장하려면 먼저 새 저장소를 만든 다음 대상 FHIR 저장소로 선택해야 합니다.

  5. 익명화를 클릭하여 FHIR 저장소의 데이터를 익명화합니다.

FHIR 익명화 작업 문제해결

FHIR 익명화 작업 중에 오류가 발생하면 오류가 Cloud Logging에 로깅됩니다. 자세한 내용은 Cloud Logging에서 오류 로그 보기를 참조하세요.

전체 작업이 오류를 반환하는 경우 장기 실행 작업 문제 해결을 참조하세요.