Configurer des en-têtes HTTP personnalisés pour les journaux d'audit

Cette page explique comment effectuer les tâches suivantes :

  1. Configurer des en-têtes HTTP personnalisés dans les requêtes adressées à l'API Cloud Healthcare
  2. Utilisez Cloud Audit Logs pour rechercher des requêtes et leurs en-têtes HTTP personnalisés correspondants afin d'effectuer les opérations suivantes:

    • Vérifiez qui a envoyé une demande et quand.
    • Simplifiez le déploiement et le débogage en identifiant la requête à l'origine d'une erreur particulière.

Pour plus d'informations sur l'utilisation de Cloud Audit Logs dans l'API Cloud Healthcare, consultez la page Afficher les journaux d'audit Cloud.

Méthodes configurables

Vous pouvez configurer des en-têtes HTTP personnalisés pour les méthodes de l'API Cloud Healthcare dans les ressources REST suivantes:

Configurer des en-têtes HTTP personnalisés

Il existe deux types d'en-têtes HTTP personnalisés que vous pouvez spécifier dans les requêtes de l'API Cloud Healthcare et afficher dans les journaux d'audit. Vous pouvez utiliser chaque type exclusivement ou les combiner.

  • Journalisation d'ID personnalisée. Vous pouvez spécifier l'en-tête HTTP personnalisé X-Request-Id pour attribuer à chaque requête son propre ID personnalisé, puis rechercher une requête contenant cet ID dans les journaux d'audit. Pour fournir un ID personnalisé, spécifiez l'en-tête HTTP personnalisé au format suivant:

    X-Request-Id: REQUEST_ID
    

    Spécifiez une valeur unique pour REQUEST_ID dans chaque requête.

    La plupart des langages de programmation permettent de générer des ID aléatoires que vous pouvez utiliser pour créer l'ID de requête. Par exemple, le module Python uuid dispose d'une fonction uuid.uuid4() qui vous permet de générer automatiquement des ID pour chaque requête. L'API Cloud Healthcare ne génère pas d'ID de requête.

  • Journalisation des métadonnées. Vous pouvez inclure des informations de métadonnées supplémentaires dans les en-têtes HTTP personnalisés à l'aide de l'en-tête X-Goog-Healthcare-Audit-IDENTIFIER. L'en-tête identifie de manière unique le type d'informations de métadonnées.

    Les métadonnées sont stockées dans le journal d'audit pour chaque requête. Pour fournir des informations de métadonnées, spécifiez un ou plusieurs en-têtes HTTP personnalisés au format suivant:

    X-Goog-Healthcare-Audit-IDENTIFIER: VALUE
    

    Remplacez IDENTIFIER par un identifiant lisible. Remplacez VALUE par une valeur de métadonnées. Vous pouvez spécifier plusieurs valeurs dans une liste d'éléments séparés par une virgule à l'aide de la syntaxe suivante:

    X-Goog-Healthcare-Audit-IDENTIFIER: VALUE_1, VALUE_2, VALUE_n ...
    

    Exemple :

    X-Goog-Healthcare-Audit-MyIdentifier: Value1, Value2, Value3
    

    Vous pouvez également spécifier plusieurs en-têtes HTTP personnalisés avec leurs propres valeurs uniques:

    X-Goog-Healthcare-Audit-MyIdentifier1: Value1, Value2
    X-Goog-Healthcare-Audit-MyIdentifier2: Value3
    

Afficher les journaux d'audit dans Cloud Audit Logs

Consultez Afficher les journaux.

Exemple

L'exemple suivant illustre un scénario dans lequel vous spécifiez des en-têtes HTTP personnalisés dans une requête fhir.create.

Supposons que vous menez une étude et que vous disposez d'une application mobile pour les patients nommés PatientApp. Les patients de l'étude sont divisés en deux cohortes: Cohort1 et Cohort2. Pour identifier chaque requête provenant de Cohort1 à l'aide d'un ID unique et du nom de l'application mobile, spécifiez les en-têtes HTTP personnalisés suivants dans chaque requête:

X-Request-Id: REQUEST_ID
X-Goog-Healthcare-Audit-AppName: PatientApp
X-Goog-Healthcare-Audit-CohortName: Cohort1

Les en-têtes HTTP personnalisés s'affichent dans le champ metadata du journal d'audit de chaque requête dans Cloud Audit Logs.

L'exemple suivant montre comment utiliser curl pour créer une ressource patient dans un magasin FHIR. La requête contient les en-têtes HTTP personnalisés suivants:

  • X-Request-Id: 123
  • X-Goog-Healthcare-Audit-AppName: PatientApp
  • X-Goog-Healthcare-Audit-CohortName: Cohort1

Avant d'envoyer la requête, remplacez les éléments suivants:

  • PROJECT_ID : ID de votre projet Google Cloud
  • LOCATION : emplacement de l'ensemble de données
  • DATASET_ID : ensemble de données parent du magasin FHIR.
  • FHIR_STORE_ID : ID du magasin FHIR.
curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "X-Request-Id: 123" \
    -H "X-Goog-Healthcare-Audit-AppName: PatientApp" \
    -H "X-Goog-Healthcare-Audit-CohortName: Cohort1" \
    --data '{
      "name": [
        {
          "use": "official",
          "family": "Smith",
          "given": [
            "Darcy"
          ]
        }
      ],
      "gender": "female",
      "birthDate": "1970-01-01",
      "resourceType": "Patient"
    }' "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID/fhir/Patient"

Le résultat est le suivant :

{
  "birthDate": "1970-01-01",
  "gender": "female",
  "id": "PATIENT_ID",
  "meta": {
    "lastUpdated": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ",
    "versionId": "VERSION_ID"
  },
  "name": [
    {
      "family": "Smith",
      "given": [
        "Darcy"
      ],
      "use": "official"
    }
  ],
  "resourceType": "Patient"
}

Si vous recherchez la requête dans Cloud Audit Logs, le journal d'audit se présente comme suit:

{
  logName: "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_write"
  protoPayload: {
    @type: "type.googleapis.com/google.cloud.audit.AuditLog"
    metadata: {
      X-Request-Id: [123]
      X-Goog-Healthcare-Audit-AppName: ["PatientApp"]
      X-Goog-Healthcare-Audit-CohortName: ["Cohort1"]
    }
    ...
  }
   ...
}