Skip to content

Docker AI Governance 的审计记录在各交付模式下使用同一套结构。本地 JSON Lines 文件和 云端交付的记录包含相同的元数据字段。

记录只捕获元数据。它们不包含提示内容、智能体输出或参数值。参数键在有助于识别某个 操作时可能会出现。

通用字段 ​

字段描述
audit_event_id审计事件的唯一 ID。
timestampDocker 记录该事件的 UTC 时间。
schema_version记录结构的版本。请将 SIEM 字段映射固定到该版本。
category事件类别,例如 AUDIT_CATEGORY_MANAGEMENT、AUDIT_CATEGORY_EVALUATION 或 AUDIT_CATEGORY_EXECUTION。
decision求值记录的治理判定。
username已登录 Docker 用户的 Docker Hub 用户名。
user_email已登录 Docker 用户的电子邮件地址。
org_id生效策略所属组织的 ID。
org_name生效策略所属组织的显示名称。
audit_session_id标识产生该记录的守护进程会话。
resource_id求值的目标,例如主机和端口、文件路径或工具。
os产生该记录时的操作系统。
app_version产生该记录的 Docker 组件版本。
client_name来源组件,例如 Docker Sandboxes 的 sbx。
hostname产生该记录的机器的主机名。
sandbox_id沙箱的稳定 ID。它在同一沙箱的重启之间保持不变。
deny_reason被拒绝的请求为何被阻止。出现在拒绝判定中。
policy_rule匹配的策略规则名称,或在没有规则匹配时为 default-deny。
policy_id产生该判定的策略的 ID。
policy_type策略的结构类型,例如 AllowList:V0。
policy_source策略的来源:remote、local 或 system。
policy_denial_code请求被拒绝的原因。仅出现在拒绝判定中。有关更多细节,请参阅拒绝代码。
enforcement_modeDocker 求值请求时生效的治理模式。有关更多细节,请参阅强制执行模式。
approval审批详情。当判定涉及审批时出现。有关更多细节,请参阅审批字段。
action_type标识记录中特定操作对象的载荷判别字段。
agent与该事件关联的 AI 智能体(当 Docker 知道时)。

拒绝代码 ​

policy_denial_code 用于分类请求被拒绝的原因:

代码含义
POLICY_DENIAL_CODE_POLICY_DENY匹配到了一条拒绝规则。policy_id 和 policy_rule 用于标识该规则。
POLICY_DENIAL_CODE_DEFAULT_DENY没有任何规则允许该请求,因此适用了默认拒绝。
POLICY_DENIAL_CODE_POLICY_SNAPSHOT_STALE缓存的策略已过期,因此求值以 fail closed 结束。
POLICY_DENIAL_CODE_POLICY_EVALUATION_FAILED加载或求值策略失败,因此求值以 fail closed 结束。
POLICY_DENIAL_CODE_GOVERNANCE_BLOCKED无法为该用户解析出治理,例如因为该用户同时属于多个组织,因此请求在未查询本地规则的情况下就被拒绝。
POLICY_DENIAL_CODE_INVALID_REQUEST请求格式有误,因此求值以 fail closed 结束。

类别 ​

类别描述
AUDIT_CATEGORY_MANAGEMENT会话生命周期、策略同步和配置事件。
AUDIT_CATEGORY_EVALUATION针对单个请求的策略判定,例如允许、拒绝或同意。
AUDIT_CATEGORY_EXECUTION求值后的操作运行结果。

会话生命周期记录标记每次守护进程运行的开始和结束。求值记录共享该次运行的 audit_session_id,因此你可以把每个判定关联回某个守护进程会话。

判定 ​

判定描述
AUDIT_DECISION_ALLOWDocker 允许了该操作。
AUDIT_DECISION_DENYDocker 拒绝了该操作。
AUDIT_DECISION_APPROVAL_REQUIRED策略要求用户批准该操作。
AUDIT_DECISION_APPROVAL_ALLOW用户批准了一个待处理的请求。
AUDIT_DECISION_APPROVAL_DENY用户拒绝了一个待处理的请求。

强制执行模式 ​

enforcement_mode 字段显示 Docker 求值请求时治理是如何应用的。

模式描述
enforce你的组织策略被强制执行。
auditDocker 记录该判定以供观测,但不强制执行策略。
off治理未启用。Docker 仍会把该记录写入本地审计日志。

解析网络审批的记录不包含 enforcement_mode,被拒绝的 MCP 审批记录同样不包含。已批准的 MCP 请求会被再次求值,因此它的记录包含 enforcement_mode。

审批字段 ​

当网络访问需要审批时,Docker 会拦截该请求并写入一条 AUDIT_DECISION_APPROVAL_REQUIRED 记录。如果用户批准,Docker 会再写入一条带 AUDIT_DECISION_APPROVAL_ALLOW 的记录。两条 记录携带相同的 approval.approval_request_id,因此你可以把它们关联起来,重建完整的审批 过程。该审批适用于沙箱后续的请求。它不会重试那个被拦截的请求。如果用户忽略该请求,它 就没有被解析,因此不会写入第二条记录,并且沙箱下次访问该目标地址时会再次请求。有关 审批的工作方式,请参阅 需要审批的访问。

对于 MCP 审批,已批准的请求会被再次求值并记录为 AUDIT_DECISION_APPROVAL_ALLOW,被 拒绝的请求则记录为 AUDIT_DECISION_APPROVAL_DENY。这两种记录都不包含 approval.approval_request_id 或 approval.grant_scope。

字段描述
approval.reason_codes要求审批的策略原因。当策略提供了原因时,出现在 AUDIT_DECISION_APPROVAL_REQUIRED 记录中;在有可用原因时,也出现在被拒绝的 MCP 审批中。
approval.approval_request_id将「需要审批」记录与解析它的记录关联起来的 ID。
approval.grant_scope用户接受的作用范围。仅出现在 AUDIT_DECISION_APPROVAL_ALLOW 记录中。
approval.context_digest被解析请求的 SHA-256 摘要,用于表明它与被搁置的请求一致。仅出现在被拒绝的 MCP 审批中。

对于网络审批,Docker Sandboxes 会把 approval.grant_scope 记录为 AUDIT_APPROVAL_GRANT_SCOPE_PERSISTENT,这表示该审批适用于后续请求。

如果用户批准了请求,但 Docker 无法应用该授权,记录的判定为 AUDIT_DECISION_DENY, 并包含 approval 对象。

动作类型 ​

action_type 字段用于标识记录中特定操作的载荷。

动作类型描述
session沙箱守护进程会话生命周期事件。
network_egress网络访问求值。
http_requestHTTP 请求求值。有关更多细节,请参阅 HTTP 请求载荷。
filesystem_mount文件系统挂载或路径访问求值。
tool_invocation工具调用求值。
resource_read资源读取求值。
server_registration服务器注册事件。
prompt提示相关的元数据事件。
network_egress_execution网络操作的结果。
filesystem_mount_execution文件系统操作的结果。
tool_execution工具调用的结果。
resource_read_execution资源读取的结果。
prompt_execution提示请求的结果。
policy_sync策略同步事件。
pii_detection数据检测结果的元数据事件。
c_score_reportC-score 报告的元数据事件。
policy_action策略配置或策略操作事件。

HTTP 请求载荷 ​

当网络策略要求对每个 HTTP 请求都进行授权时,Docker 除了网络连接之外,还会求值请求的 方法和路径。这些求值产生的记录其 action_type 为 http_request,与该连接的 network_egress 记录分开。

字段描述
http_request.methodHTTP 方法,例如 HTTP_METHOD_GET 或 HTTP_METHOD_POST。
http_request.host目标主机名或 IP 地址。IPv6 地址不显示方括号。
http_request.port目标端口。
http_request.pathURL 路径,不含查询字符串和片段。

记录示例 ​

下面的示例展示了一个被拒绝规则拦截的请求:

json
{
  "audit_event_id": "032d5bf2-6be0-484c-9fd1-296680bb9af4",
  "timestamp": "2026-10-22T21:15:32.674118Z",
  "schema_version": "1.228.0",
  "category": "AUDIT_CATEGORY_EVALUATION",
  "decision": "AUDIT_DECISION_DENY",
  "username": "jordandoe",
  "user_email": "jordandoe@example.com",
  "audit_session_id": "d038717d-e86d-48c5-abbb-19b7f14c37c8",
  "agent": "shell",
  "sandbox_id": "my-sandbox",
  "resource_id": "example.com:443",
  "policy_rule": "local:fa56f4d3-7f16-4144-af84-caa7917b2387",
  "policy_id": "f588126a-8323-47d5-b099-b3d184055733",
  "policy_type": "AllowList:V0",
  "policy_source": "local",
  "policy_denial_code": "POLICY_DENIAL_CODE_POLICY_DENY",
  "org_id": "9f8e7d6c-5b4a-3210-fedc-ba9876543210",
  "org_name": "Acme Inc",
  "os": "windows",
  "app_version": "v0.48.0",
  "client_name": "sbx",
  "hostname": "host-machine",
  "deny_reason": [
    "denied: rule \"local:fa56f4d3-7f16-4144-af84-caa7917b2387\" matched op(action=net:connect:tcp, resource=net:domain:example.com:443)"
  ],
  "enforcement_mode": "audit",
  "action_type": "network_egress",
  "network_egress": { "destination_port": "443", "protocol": "tcp" }
}

下面的示例展示了一个用户批准需要审批的 HTTP 请求:

json
{
  "audit_event_id": "3c1f6a2e-8b47-4d0a-9e55-2f7b1d6c9a04",
  "timestamp": "2026-09-25T17:42:08.114502Z",
  "schema_version": "1.216.0",
  "category": "AUDIT_CATEGORY_EVALUATION",
  "decision": "AUDIT_DECISION_APPROVAL_ALLOW",
  "username": "jordandoe",
  "user_email": "jordandoe@example.com",
  "org_id": "9f8e7d6c-5b4a-3210-fedc-ba9876543210",
  "org_name": "Acme Inc",
  "audit_session_id": "8a3bc076-79d0-4502-baf3-cc6ad35fb578",
  "resource_id": "api.example.com:443",
  "os": "macos",
  "app_version": "v0.46.0",
  "client_name": "sbx",
  "hostname": "host-machine",
  "approval": {
    "approval_request_id": "b7e2c9d1-4f60-4a8e-93c2-5d1e8f7a6b30",
    "grant_scope": "AUDIT_APPROVAL_GRANT_SCOPE_PERSISTENT"
  },
  "action_type": "http_request",
  "http_request": {
    "method": "HTTP_METHOD_POST",
    "host": "api.example.com",
    "port": "443",
    "path": "/v1/items"
  },
  "agent": "claude"
}