为审核日志配置自定义 HTTP 标头

本页面介绍了如何完成以下任务:

  1. 在向 Cloud Healthcare API 发出的请求中配置自定义 HTTP 标头。
  2. 使用 Cloud Audit Logs 搜索请求及其匹配的自定义 HTTP 标头,以便执行以下操作:

    • 查看谁发送了请求,以及何时发送了请求。
    • 通过查找哪个请求导致了特定错误,简化了部署和调试。

如需详细了解如何在 Cloud Healthcare API 中使用 Cloud Audit Logs,请参阅查看 Cloud Audit Logs

可配置的方法

您可以在以下 REST 资源中为 Cloud Healthcare API 方法配置自定义 HTTP 标头:

配置自定义 HTTP 标头

Cloud Healthcare API 请求中可以指定两种类型的自定义 HTTP 标头并在审核日志中查看。您可以单独使用或组合使用每种类型。

  • 自定义 ID 日志记录。您可以指定 X-Request-Id 自定义 HTTP 标头来为每个请求提供专属的自定义 ID,然后在审核日志中搜索包含该 ID 的请求。若要提供自定义 ID,请按以下格式指定自定义 HTTP 标头:

    X-Request-Id: REQUEST_ID
    

    在每个请求中为 REQUEST_ID 指定唯一值。

    大多数编程语言都有生成随机 ID 的方式,您可以使用这些 ID 创建请求 ID。例如,Python uuid 模块包含一个 uuid.uuid4() 函数,您可以使用该函数为每个请求自动生成 ID。Cloud Healthcare API 不会生成请求 ID。

  • 元数据日志记录。您可以使用 X-Goog-Healthcare-Audit-IDENTIFIER 标头在自定义 HTTP 标头中添加其他元数据信息。标题可唯一标识元数据信息的类型。

    元数据会存储在每个请求的审核日志中。如需提供元数据信息,请按以下格式指定一个或多个自定义 HTTP 标头:

    X-Goog-Healthcare-Audit-IDENTIFIER: VALUE
    

    IDENTIFIER 替换为简单易懂的标识符。 将 VALUE 替换为元数据的值。 您可以使用以下语法在逗号分隔列表中指定多个值:

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

    例如:

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

    您还可以指定多个具有自己的唯一值的自定义 HTTP 标头:

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

查看 Cloud Audit Logs 中的审核日志

请参阅查看日志

示例

以下示例演示了在 fhir.create 请求中指定自定义 HTTP 标头的场景。

假设您正在运行一项研究,并且您有一个名为PatientApp的患者移动应用。研究中的患者分为两个同类群组:Cohort1Cohort2。要使用唯一的 ID 和移动应用的名称来识别 Cohort1 中的每个请求,请在每个请求中指定以下自定义 HTTP 标头:

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

自定义 HTTP 标头显示在 Cloud Audit Logs 中每个请求的审核日志的 metadata 字段中。

以下示例展示了如何使用 curl 在 FHIR 存储区中创建新的患者资源。该请求包含以下自定义 HTTP 标头:

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

在发送请求之前,请替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID:FHIR 存储区的父数据集
  • FHIR_STORE_ID:FHIR 存储区 ID
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"

输出如下所示:

{
  "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"
}

如果您在 Cloud Audit Logs 中搜索请求,审核日志将如下所示:

{
  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"]
    }
    ...
  }
   ...
}