Determinar el acceso

En esta página se describe cómo tomar decisiones de acceso mediante la API Consent Management.

Las aplicaciones pueden solicitar determinaciones de acceso a la API Consent Management para un elemento de datos específico, para todos los elementos de datos asociados a un usuario o para almacenes de datos completos. En cada caso, la API Consent Management determina el acceso evaluando la siguiente información en comparación con la información incluida en la solicitud de acceso:

  • El consentimiento del usuario, como los valores de los atributos REQUEST
  • Las asignaciones de datos de usuario, como los valores de los atributos RESOURCE.

De forma predeterminada, las determinaciones de acceso solo evalúan los consentimientos ACTIVE. DRAFT Los consentimientos se pueden incluir en una determinación de acceso especificándolos en una solicitud de determinación de acceso.

Las solicitudes de determinación de acceso siempre ignoran los consentimientos que han caducado, se han revocado o se han rechazado.

Puede solicitar una determinación de acceso para un elemento de datos específico mediante el método projects.locations.datasets.consentStores.checkDataAccess. Este método devuelve un mensaje que indica si el UserDataMapping especificado tiene un consentimiento válido para el uso propuesto.

Para solicitar una determinación de acceso a un elemento de datos específico, haz una solicitud POST y especifica la siguiente información en la solicitud:

  • Nombre del almacén de consentimientos superior.
  • Un ID de recurso de datos, que es una descripción del elemento de datos, como la ruta REST a un recurso.
  • Conjunto de pares clave-valor que representan al solicitante en términos de los REQUESTatributos relevantes y sus valores. Por ejemplo, requesterIdentity == external-researcher.
  • Marca opcional que indica si se deben devolver determinaciones de acceso detalladas. Si esta marca se define como FULL, el método devuelve resultados de cada consentimiento evaluado. Si se le asigna el valor BASIC a esta marca o no se define, el método solo devuelve si los consentimientos evaluados permiten acceder a los datos especificados. Esta función opcional se usa cuando tu aplicación necesita inspeccionar cómo se ha tomado una decisión sobre el consentimiento.
  • Lista opcional de consentimientos de ACTIVE o DRAFT que debe tener en cuenta el método. Si no se especifica ningún consentimiento, el método evalúa todos los consentimientos de ACTIVE. Esta función opcional se puede usar para probar el comportamiento de consentimientos nuevos o específicos.
  • Un token de acceso

curl

En el siguiente ejemplo se muestra una solicitud POST que utiliza curl:

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"

Si la solicitud se realiza correctamente, el servidor devuelve una respuesta similar a la del siguiente ejemplo en formato JSON o un cuerpo de respuesta vacío si no hay datos de usuario que coincidan con el acceso a datos especificado. La respuesta de ejemplo usa FULL como responseView.

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

EVALUATION_RESULT es uno de los siguientes valores: NOT_APPLICABLE, NO_MATCHING_POLICY, NO_SATISFIED_POLICY o HAS_SATISFIED_POLICY.

PowerShell

En el siguiente ejemplo se muestra una solicitud POST que utiliza Windows PowerShell:

$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

Si la solicitud se realiza correctamente, el servidor devuelve una respuesta similar a la del siguiente ejemplo en formato JSON o un cuerpo de respuesta vacío si no hay datos de usuario que coincidan con el acceso a datos especificado. La respuesta de ejemplo usa FULL como responseView.

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

EVALUATION_RESULT es uno de los siguientes valores: NOT_APPLICABLE, NO_MATCHING_POLICY, NO_SATISFIED_POLICY o HAS_SATISFIED_POLICY.

Tomar una decisión de acceso para todos los consentimientos de un usuario

Puede solicitar una determinación de acceso para todos los elementos de datos asociados a un usuario mediante el método projects.locations.datasets.consentStores.evaluateUserConsents. Este método devuelve todos los elementos de datos asociados a un usuario específico que tengan un consentimiento válido para el uso propuesto.

Para solicitar una determinación de acceso para todos los elementos de datos asociados a un usuario, haz una solicitud POST y especifica la siguiente información en la solicitud:

  • Nombre del almacén de consentimientos superior.
  • Un ID de usuario que define los elementos de datos y los consentimientos que se van a evaluar.
  • Conjunto opcional de pares clave-valor que definen los atributos RESOURCE de los elementos de datos que se van a evaluar. Por ejemplo, dataIdentifiable == de-identified. Si no define un conjunto de atributos RESOURCE, se evaluarán todos los elementos de datos.
  • Un conjunto de pares clave-valor que definen los atributos REQUEST relevantes y sus valores. Por ejemplo, requesterIdentity == external-researcher.
  • Marca opcional que indica si se deben devolver determinaciones de acceso detalladas. Si esta marca se define como FULL, el método devuelve resultados de cada consentimiento evaluado. Si se le asigna el valor BASIC a esta marca o no se define, el método solo devuelve si los consentimientos evaluados permiten acceder a los datos especificados. Esta función opcional se usa cuando tu aplicación necesita inspeccionar cómo se ha tomado una decisión sobre el consentimiento.
  • Lista opcional de consentimientos de ACTIVE o DRAFT que debe tener en cuenta el método. Si no se especifica ningún consentimiento, el método evalúa todos los consentimientos de ACTIVE. Esta función opcional se puede usar para probar el comportamiento de consentimientos nuevos o específicos.
  • Un token de acceso

curl

En el siguiente ejemplo se muestra una solicitud POST que utiliza curl:

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"

Si la solicitud se realiza correctamente, el servidor devuelve una respuesta similar a la del siguiente ejemplo en formato JSON o un cuerpo de respuesta vacío si no hay datos de usuario que coincidan con el acceso a datos especificado. La respuesta de ejemplo usa FULL como responseView.

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

PowerShell

En el siguiente ejemplo se muestra una solicitud POST que utiliza Windows PowerShell:

$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

Si la solicitud se realiza correctamente, el servidor devuelve una respuesta similar a la del siguiente ejemplo en formato JSON o un cuerpo de respuesta vacío si no hay datos de usuario que coincidan con el acceso a datos especificado. La respuesta de ejemplo usa FULL como responseView.

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

Puede solicitar una determinación del acceso para todo un almacén de consentimientos mediante el método projects.locations.datasets.consentStores.queryAccessibleData. Este método devuelve todos los elementos de datos de un almacén de consentimientos que tengan un consentimiento válido.

Para solicitar una determinación de acceso en todo un almacén de consentimiento, haz una solicitud POST y especifica la siguiente información:

  • Nombre del almacén de consentimientos principal
  • Un conjunto de pares clave-valor que definen los atributos REQUEST relevantes y sus valores. Por ejemplo, requesterIdentity == external-researcher.
  • Conjunto opcional de pares clave-valor que definen los atributos RESOURCE de los elementos de datos que se van a evaluar. Por ejemplo, dataIdentifiable == de-identified. Si no define un conjunto de atributos RESOURCE, se evalúan todos los elementos de datos.
  • Un destino de Cloud Storage donde se guarda la lista de resultados. La cuenta de servicio de la API Cloud Healthcare debe tener el rol de gestión de identidades y accesos roles/storage.objectAdmin en este destino. Para obtener más información, consulta Permisos de Cloud Storage para almacenes de consentimiento.
  • Un token de acceso

curl

En el siguiente ejemplo se muestra una solicitud POST que utiliza curl:

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"

Si la solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato JSON:

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

La respuesta contiene un nombre de operación. Para hacer un seguimiento del estado de la operación, puedes usar el método Operation 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"

Si la solicitud se realiza de forma correcta, el servidor devuelve una respuesta con el estado de la operación en formato 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"
  }
}

Una vez que se haya completado la operación de larga duración, los resultados aparecerán en un archivo de texto en la carpeta que hayas especificado. Para obtener información sobre las operaciones de larga duración, consulta Gestionar operaciones de larga duración.

PowerShell

En el siguiente ejemplo se muestra una solicitud POST que utiliza Windows PowerShell:

$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

Si la solicitud se realiza de forma correcta, el servidor devuelve una respuesta similar a la siguiente en formato JSON:

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

La respuesta contiene un nombre de operación. Para hacer un seguimiento del estado de la operación, puedes usar el método Operation 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

Si la solicitud se realiza de forma correcta, el servidor devuelve una respuesta con el estado de la operación en formato 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"
  }
}

Una vez que se haya completado la operación de larga duración, los resultados aparecerán en un archivo de texto en la carpeta que hayas especificado. Para obtener información sobre las operaciones de larga duración, consulta Gestionar operaciones de larga duración.

Registrar solicitudes y respuestas de determinación del acceso

Cuando los registros de auditoría de acceso a datos están habilitados, la API Consent Management registra las solicitudes realizadas mediante los métodos checkDataAccess, evaluateUserConsents y queryAccessibleData. En estos registros se incluye la información contenida en la solicitud, como el UserDataMapping de destino o los atributos RESOURCE o REQUEST especificados. Los registros también contendrán la respuesta de la API, que incluye el resultado de la determinación del acceso a la API Consent Management. Cada registro incluye la identidad de la herramienta Google Cloud que hace la solicitud.

Para obtener más información sobre cómo habilitar los registros de auditoría de acceso a datos, consulta el artículo Configurar registros de auditoría de acceso a datos. Para obtener más información sobre el registro de auditoría en la API Cloud Healthcare, consulta Ver registros de auditoría de Cloud.