Déterminer les niveaux d'accès

Vous trouverez sur cette page la procédure à suivre pour déterminer les accès à l'aide de l'API Consent Management.

Les applications peuvent demander des décisions d'accès à partir de l'API Consent Management pour un élément de données spécifique, pour tous les éléments de données associés à un utilisateur ou pour des datastores entiers. Pour chacun de ces cas, l'API Consent Management détermine les accès en évaluant les informations suivantes par rapport à celles contenues dans la requête d'accès :

  • L'autorisation de l'utilisateur, par exemple les valeurs des attributs REQUEST
  • Les mappages de données utilisateur, tels que les valeurs des attributs RESOURCE

Par défaut, les décisions d'accès évaluent uniquement les autorisations ACTIVE. Les autorisations DRAFT peuvent être incluses dans une décision d'accès en les spécifiant dans une requête de décision d'accès.

Les requêtes de décision d'accès ignorent toujours les autorisations expirées, révoquées ou refusées.

Vous pouvez effectuer une requête de décision d'accès pour un élément de données spécifique à l'aide de la méthode projects.locations.datasets.consentStores.checkDataAccess. Cette méthode renvoie un message indiquant si l'élément UserDataMapping spécifié dispose d'une autorisation valide pour l'utilisation proposée.

Pour demander une décision d'accès pour un élément de données spécifique, envoyez une requête POST et spécifiez les informations suivantes dans la requête :

  • Nom du magasin d'autorisations parent
  • Un ID de ressource de données, correspondant à une description de l'élément de données tel que le chemin d'accès REST vers une ressource
  • Un ensemble de paires clé/valeur représentant le demandeur en fonction des attributs REQUEST correspondants et de leurs valeurs. Exemple : requesterIdentity == external-researcher.
  • Option facultative indiquant si des décisions d'accès détaillées doivent être renvoyées. Si cette option est définie sur FULL, la méthode renvoie les résultats pour chaque autorisation évaluée. Si cette option est définie sur BASIC ou n'est pas définie, la méthode ne renvoie que si l'accès aux données spécifiées est autorisé par les autorisations évaluées. Cette fonctionnalité facultative est utilisée lorsque l'application doit inspecter la façon dont une décision d'autorisation a été prise.
  • Liste facultative des autorisations ACTIVE ou DRAFT à prendre en compte par la méthode. Si aucune autorisation n'est spécifiée, la méthode évalue toutes les autorisations ACTIVE. Cette fonctionnalité facultative peut être utilisée pour tester le comportement d'autorisations nouvelles ou spécifiques.
  • Un jeton d'accès

curl

L'exemple suivant montre une requête POST utilisant 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 requête aboutit, le serveur renvoie une réponse semblable à l'exemple suivant au format JSON ou un corps de réponse vide si aucune donnée utilisateur ne correspond à l'accès aux données spécifié. L'exemple de réponse utilise FULL en tant que responseView.

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

EVALUATION_RESULT correspond à NOT_APPLICABLE, NO_MATCHING_POLICY, NO_SATISFIED_POLICY ou HAS_SATISFIED_POLICY.

PowerShell

L'exemple suivant montre une requête POST utilisant 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 requête aboutit, le serveur renvoie une réponse semblable à l'exemple suivant au format JSON ou un corps de réponse vide si aucune donnée utilisateur ne correspond à l'accès aux données spécifié. L'exemple de réponse utilise FULL en tant que responseView.

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

EVALUATION_RESULT correspond à NOT_APPLICABLE, NO_MATCHING_POLICY, NO_SATISFIED_POLICY ou HAS_SATISFIED_POLICY.

Déterminer un niveau d'accès pour toutes les autorisations d'un utilisateur

Vous pouvez effectuer une requête de décision d'accès pour tous les éléments de données associés à un utilisateur à l'aide de la méthode projects.locations.datasets.consentStores.evaluateUserConsents. Cette méthode renvoie tous les éléments de données associés à un utilisateur spécifique disposant d'une autorisation valide pour l'utilisation proposée.

Pour demander une décision d'accès pour tous les éléments de données associés à un utilisateur, envoyez une requête POST et spécifiez les informations suivantes dans la requête :

  • Nom du magasin d'autorisations parent
  • ID utilisateur définissant les éléments de données et les autorisations à évaluer
  • Un ensemble facultatif de paires clé/valeur définissant les attributs RESOURCE des éléments de données à évaluer. Exemple :dataIdentifiable == de-identified Si vous ne définissez pas un ensemble d'attributs RESOURCE, tous les éléments de données sont évalués.
  • Un ensemble de paires clé/valeur définissant les attributs REQUEST pertinents et leurs valeurs. Exemple :requesterIdentity == external-researcher
  • Option facultative indiquant si des décisions d'accès détaillées doivent être renvoyées. Si cette option est définie sur FULL, la méthode renvoie les résultats pour chaque autorisation évaluée. Si cette option est définie sur BASIC ou n'est pas définie, la méthode ne renvoie que si l'accès aux données spécifiées est autorisé par les autorisations évaluées. Cette fonctionnalité facultative est utilisée lorsque l'application doit inspecter la façon dont une décision d'autorisation a été prise.
  • Liste facultative des autorisations ACTIVE ou DRAFT à prendre en compte par la méthode. Si aucune autorisation n'est spécifiée, la méthode évalue toutes les autorisations ACTIVE. Cette fonctionnalité facultative peut être utilisée pour tester le comportement d'autorisations nouvelles ou spécifiques.
  • Un jeton d'accès

curl

L'exemple suivant montre une requête POST utilisant 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 requête aboutit, le serveur renvoie une réponse semblable à l'exemple suivant au format JSON ou un corps de réponse vide si aucune donnée utilisateur ne correspond à l'accès aux données spécifié. L'exemple de réponse utilise FULL en tant que 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

L'exemple suivant montre une requête POST utilisant 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 requête aboutit, le serveur renvoie une réponse semblable à l'exemple suivant au format JSON ou un corps de réponse vide si aucune donnée utilisateur ne correspond à l'accès aux données spécifié. L'exemple de réponse utilise FULL en tant que responseView.

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

Vous pouvez demander une décision d'accès pour l'intégralité d'un magasin d'autorisations à l'aide de la méthode projects.locations.datasets.consentStores.queryAccessibleData. Cette méthode renvoie tous les éléments de données d'un magasin d'autorisations qui disposent d'une autorisation valide.

Pour demander une décision d'accès à l'ensemble d'un magasin d'autorisations, envoyez une requête POST et spécifiez les informations suivantes dans la requête :

  • Nom du magasin d'autorisations parent
  • Un ensemble de paires clé/valeur définissant les attributs REQUEST pertinents et leurs valeurs. Exemple :requesterIdentity == external-researcher
  • Un ensemble facultatif de paires clé/valeur définissant les attributs RESOURCE des éléments de données à évaluer. Par exemple, dataIdentifiable == de-identified. Si vous ne définissez pas un ensemble d'attributs RESOURCE, tous les éléments de données sont évalués.
  • Destination Cloud Storage où la liste des résultats est enregistrée. Le compte de service de l'API Cloud Healthcare doit disposer du rôle IAM roles/storage.objectAdmin sur cette destination. Pour en savoir plus, consultez la section Autorisations Cloud Storage pour les magasins d'autorisations.
  • Un jeton d'accès

curl

L'exemple suivant montre une requête POST utilisant 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 requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format JSON :

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

La réponse contient un nom d'opération. Pour suivre l'état de l'opération, vous pouvez utiliser la méthode 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 requête aboutit, le serveur renvoie une réponse avec l'état de l'opération au format 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"
  }
}

Une fois l'opération de longue durée terminée, les résultats apparaissent dans un fichier texte situé dans le dossier que vous avez spécifié. Pour en savoir plus sur les opérations de longue durée, consultez la page Gérer les opérations de longue durée.

PowerShell

L'exemple suivant montre une requête POST utilisant 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 requête aboutit, le serveur affiche une réponse semblable à l'exemple suivant au format JSON :

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

La réponse contient un nom d'opération. Pour suivre l'état de l'opération, vous pouvez utiliser la méthode 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 requête aboutit, le serveur renvoie une réponse avec l'état de l'opération au format 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"
  }
}

Une fois l'opération de longue durée terminée, les résultats apparaissent dans un fichier texte situé dans le dossier que vous avez spécifié. Pour en savoir plus sur les opérations de longue durée, consultez la page Gérer les opérations de longue durée.

Requêtes et réponses de décision d'accès à la journalisation

Lorsque les journaux d'audit des accès aux données sont activés, l'API Consent Management consigne les requêtes effectuées à l'aide des méthodes checkDataAccess, evaluateUserConsents, et queryAccessibleData. Ces journaux enregistrent les informations contenues dans la requête, telles que la cible UserDataMapping ou les attributs RESOURCE ou REQUEST spécifiés. Les journaux contiennent également la réponse de l'API, qui inclut le résultat de la décision d'accès de l'API Consent Management. Chaque journal inclut l'identité de l'outil Google Cloud qui envoie la requête.

Pour en savoir plus sur l'activation des journaux d'audit des accès aux données, consultez la section Configurer les journaux d'audit pour l'accès aux données. Pour en savoir plus sur les journaux d'audit dans l'API Cloud Healthcare, consultez la page Afficher les journaux d'audit Cloud.