アクセス権の判定

このページでは、Consent Management API を使用してアクセスを判定する方法について説明します。

アプリケーションは、特定のデータ要素、任意のユーザーに関連付けられたすべてのデータ要素、またはデータストア全体に対する Consent Management API からのアクセス権の判定を要求できます。いずれの場合でも、Consent Management API は、アクセス リクエストに含まれる情報と比較して次の情報を評価することにより、アクセス権を判定します。

  • REQUEST 属性の値などの、ユーザーの同意
  • RESOURCE 属性の値などの、ユーザーデータのマッピング

デフォルトでは、アクセス権の判定では ACTIVE の同意のみが評価されます。アクセス判定リクエストで DRAFT 同意を指定することにより、アクセス判定に含めることができます。

アクセス判定リクエストでは、期限切れになった、取り消された、または拒否された同意が常に無視されます。

特定のデータ要素に対するアクセス判定を要求するには、projects.locations.datasets.consentStores.checkDataAccess メソッドを使用します。このメソッドは、提案された用途について、指定された UserDataMapping に有効な同意があるかを示すメッセージを返します。

特定のデータ要素に対するアクセス判定を要求するには、POST リクエストを作成し、リクエストに次の情報を指定します。

  • 親 Consent Store の名前。
  • リソースへの REST パスなどのデータ要素の説明となるデータリソース ID。
  • 関連する REQUEST 属性とその値について、リクエスト送信者を表す Key-Value ペアのセット。例: requesterIdentity == external-researcher
  • 詳細なアクセス判定を返す必要があるか否かを示す省略可能なフラグ。このフラグが FULL に設定されている場合、評価された同意ごとに結果が返されます。このフラグが BASIC に設定されているか、定義されていない場合は、指定されたデータへのアクセスが評価された同意によって許可されているかどうかのみがメソッドにより返されます。 このオプション機能は、同意の判断がどのように行われたかをアプリケーションで検査する必要がある場合に使用されます。
  • メソッドの ACTIVE または DRAFT の同意のリスト(省略可)を検討します。同意が指定されていない場合、このメソッドはすべての ACTIVE の同意を評価します。このオプション機能を使用することで、新しい同意または特定の同意の動作をテストできます。
  • アクセス トークン

curl

次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       'dataId' : 'DATA_ID',
       'requestAttributes': {
         'requesterIdentity': 'external-researcher'},
       'consentList':{
         'consents':[
           'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_NAME'
         ]
       },
       'responseView': 'DETAILED_ACCESS_LEVEL'
    }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:checkDataAccess"

リクエストが成功すると、サーバーは次のサンプルのような JSON 形式のレスポンス、またはユーザーデータが指定のデータアクセスに一致しない場合は空のレスポンス本文を返します。サンプル レスポンスでは、responseView として FULL を使用しています。

{
  "consentDetails": {                                                                                                                         "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID": {
      "evaluationResult": "EVALUATION_RESULT"
    }
  }
}

EVALUATION_RESULT は、NOT_APPLICABLENO_MATCHING_POLICYNO_SATISFIED_POLICY、または HAS_SATISFIED_POLICY のいずれかです。

PowerShell

次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'dataId' : 'DATA_ID',
       'requestAttributes': {
         'requesterIdentity': 'external-researcher'
       },
       'consentList': {
         'consents':[
           'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID'
         ]
       },
       'responseView': 'DETAILED_ACCESS_LEVEL'
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:checkDataAccess" | Select-Object -Expand Content

リクエストが成功すると、サーバーは次のサンプルのような JSON 形式のレスポンス、またはユーザーデータが指定のデータアクセスに一致しない場合は空のレスポンス本文を返します。サンプル レスポンスでは、responseView として FULL を使用しています。

{
  "consentDetails": {                                                                                                                         "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID": {
      "evaluationResult": "EVALUATION_RESULT"
    }
  }
}

EVALUATION_RESULT は、NOT_APPLICABLENO_MATCHING_POLICYNO_SATISFIED_POLICY、または HAS_SATISFIED_POLICY のいずれかです。

ユーザーのすべての同意についてアクセス権を検証する

projects.locations.datasets.consentStores.evaluateUserConsents メソッドを使用すると、あるユーザーに関連するすべてのデータ要素に対しアクセス権判定を要求できます。このメソッドは、提案された用途に対して同意している特定のユーザーに関連付けられたすべてのデータ要素を返します。

あるユーザーに関連付けられたすべてのデータ要素についてアクセス判定を要求するには、POST リクエストを作成し、リクエストに次の情報を指定します。

  • 親 Consent Store の名前。
  • 評価するデータ要素と同意を定義するユーザー ID。
  • 評価するデータ要素の RESOURCE 属性を定義するオプションの Key-Value ペア(省略可)。例: dataIdentifiable == de-identifiedRESOURCE 属性のセットを定義しない場合、すべてのデータ要素が評価されます。
  • 関連する REQUEST 属性とその値を定義する Key-Value ペアのセット。例: requesterIdentity == external-researcher
  • 詳細なアクセス判定を返す必要があるか否かを示す省略可能なフラグ。このフラグが FULL に設定されている場合、評価された同意ごとに結果が返されます。このフラグが BASIC に設定されているか、定義されていない場合は、指定されたデータへのアクセスが評価された同意によって許可されているかどうかのみがメソッドにより返されます。 このオプション機能は、同意の判断がどのように行われたかをアプリケーションで検査する必要がある場合に使用されます。
  • メソッドの ACTIVE または DRAFT の同意のリスト(省略可)を検討します。同意が指定されていない場合、このメソッドはすべての ACTIVE の同意を評価します。このオプション機能を使用することで、新しい同意または特定の同意の動作をテストできます。
  • アクセス トークン

curl

次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       'userId' :
         'USER_ID',
       'consentList':{
         'consents':[
           'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID'
         ]
       },
       'resourceAttributes': {
         'dataIdentifiable': 'de-identified'
       },
       'requestAttributes': {
         'requesterIdentity': 'external-researcher'
       },
       'responseView': 'DETAILED_ACCESS_LEVEL'
    }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:evaluateUserConsents"

リクエストが成功すると、サーバーは次のサンプルのような JSON 形式のレスポンス、またはユーザーデータが指定のデータアクセスに一致しない場合は空のレスポンス本文を返します。サンプル レスポンスでは、responseView として FULL を使用しています。

{
  "results": [
    {
      "dataId": "DATA_ID",
      "consentDetails": {
       "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID": {
       "evaluationResult": "EVALUATION_RESULT"
        }
      }
    }
  ]
}

PowerShell

次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'userId' : 'USER_ID',
       'consentList':{
         'consents':[
           'projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_NAME'
         ]
       },
       'resourceAttributes': { 'dataIdentifiable': 'de-identified'},
       'requestAttributes': { 'requesterIdentity': 'external-researcher'},
       'responseView': 'DETAILED_ACCESS_LEVEL'
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:evaluateUserConsents" | Select-Object -Expand Content

リクエストが成功すると、サーバーは次のサンプルのような JSON 形式のレスポンス、またはユーザーデータが指定のデータアクセスに一致しない場合は空のレスポンス本文を返します。サンプル レスポンスでは、responseView として FULL を使用しています。

{
  "results": [
    {
      "dataId": "DATA_ID",
      "consentDetails": {
       "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID/consents/CONSENT_ID": {
       "evaluationResult": "EVALUATION_RESULT"
        }
      }
    }
  ]
}

projects.locations.datasets.consentStores.queryAccessibleData メソッドを使用して、Consent Store 全体に関するアクセス判定を要求できます。このメソッドは、Consent Store 内の、有効な同意を得ているすべてのデータ要素を返します。

Consent Store 全体に対するアクセス判定を要求するには、POST リクエストを作成し、リクエストで次の情報を指定します。

  • 親 Consent Store の名前。
  • 関連する REQUEST 属性とその値を定義する Key-Value ペアのセット。例: requesterIdentity == external-researcher
  • 評価するデータ要素の RESOURCE 属性を定義するオプションの Key-Value ペア(省略可)。例: dataIdentifiable == de-identified一連の RESOURCE 属性を定義しない場合、すべてのデータ要素が評価されます。
  • 結果のリストが保存される Cloud Storage の宛先。Cloud Healthcare API サービス アカウントには、この宛先に対する roles/storage.objectAdmin IAM ロールを付与する必要があります。詳細については、Consent Store の Cloud Storage 権限をご覧ください。
  • アクセス トークン

curl

次のサンプルは、curl を使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/consent+json; charset=utf-8" \
    --data "{
       'gcsDestination': {
         'uriPrefix': 'gs://BUCKET/DIRECTORY'
       },
       'resourceAttributes': {
         'dataIdentifiable': 'de-identified'
       },
       'requestAttributes': {
         'requesterIdentity': 'external-researcher'
       }
    }" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:queryAccessibleData"

リクエストが成功すると、サーバーは JSON 形式の次のサンプルのようなレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.consent.consentService.queryAccessibleData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME"
    "logsUrl": "LOGS_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

長時間実行オペレーションが完了すると、指定したフォルダ内のテキスト ファイルに結果が表示されます。長時間実行オペレーションについては、長時間実行オペレーションの管理をご覧ください。

PowerShell

次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/consent+json; charset=utf-8" `
  -Body "{
       'gcsDestination': {
         'uriPrefix': 'gs://BUCKET/DIRECTORY'
       },
       'resourceAttributes': {
         'dataIdentifiable': 'de-identified'
       },
       'requestAttributes': {
         'requesterIdentity': 'external-researcher'
       }
    }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/consentStores/CONSENT_STORE_ID:queryAccessibleData" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式の次のサンプルのようなレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.consent.consentService.queryAccessibleData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME"
    "logsUrl": "LOGS_URL",
    "counter": {
      "success": "SUCCESS_COUNT"
    }
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.protobuf.Empty"
  }
}

長時間実行オペレーションが完了すると、指定したフォルダ内のテキスト ファイルに結果が表示されます。長時間実行オペレーションについては、長時間実行オペレーションの管理をご覧ください。

アクセス判定リクエストとレスポンスのロギング

データアクセスの監査ログが有効になっている場合、Consent Management API ログのリクエストが checkDataAccessevaluateUserConsentsqueryAccessibleData メソッドを使用して行われます。これらのログは、ターゲットとする UserDataMapping、指定された RESOURCEREQUEST 属性など、リクエスト内に含まれる情報を記録します。ログには、Consent Management API のアクセス判定の結果を含む API レスポンスも含まれます。各ログには、リクエストを行った Google Cloud ツールの ID が含まれます。

データアクセス監査ログの有効化について詳しくは、データアクセス監査ログの構成をご覧ください。Cloud Healthcare API の監査ログについて詳しくは、Cloud Audit Logs の表示をご覧ください。