Access 身份验证日志可帮助您追踪谁访问了受保护的应用程序、他们何时进行了访问以及他们是否获准进入。使用这些日志来调查可疑的登录尝试、审计用户活动或对访问问题进行排障。
Cloudflare Access 会生成两种类型的审计日志:
无论登录尝试成功与否,每当用户或服务尝试登录应用程序时,Cloudflare Access 都会记录一次身份验证事件。
基于身份的身份验证是指根据用户是谁来评估的登录尝试 — 例如,他们的电子邮件地址、身份提供商(IdP)组、SAML 组或 OIDC 声明。
非身份身份验证是指根据上下文而非用户身份评估的登录尝试 — 例如,IP 地址、设备状况(device posture)、国家/地区、有效证书或服务令牌。
要查看基于身份的身份验证事件的日志:
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Insights(洞察) > Logs(日志)。
-
选择 Access authentication logs(Access 身份验证日志)。
-
(可选)过滤在日志查看器中显示的日志。您可以按时间戳和事件详细信息(例如 Access 应用程序、用户电子邮件、策略决策等)过滤日志。
-
选择单个时间戳以更详细地调查事件。
Access 身份验证日志 API 端点提供了一个自定义 URL,用于为您的账户导出审计日志事件。
Required API token permissions
At least one of the following token permissions is required:Access: Audit Logs Read
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/logs/access_requests?limit=25&direction=desc&since=2020-07-01T05%3A20%3A00Z&until=2020-10-01T05%3A20%3A00Z" \
--request GET \
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY"{
"success": true,
"errors": [],
"messages": [],
"result": [
{
"user_email": "michelle@example.com",
"ip_address": "198.41.129.166",
"app_uid": "df7e2w5f-02b7-4d9d-af26-8d1988fca630",
"app_domain": "test.example.com/admin",
"action": "login",
"connection": "saml",
"allowed": false,
"created_at": "2014-01-01T05:20:00.12345Z",
"ray_id": "187d944c61940c77"
}
]
}基于身份的身份验证日志包含以下字段:
| 字段 | 描述 |
|---|---|
| App | Access 应用程序的名称。 |
| User email | 进行身份验证的用户的电子邮件地址。 |
| User ID | 进行身份验证的用户的唯一标识符(UUID)。 |
| IP address(IP 地址) | 进行身份验证的用户的 IP 地址。 |
| App UID | Access 应用程序的唯一标识符(UUID)。 |
| App domain | Access 应用程序的 URL。 |
| App type | 指定 Access 应用程序的类型:自托管、浏览器 SSH、浏览器 VNC、浏览器 RDP、SaaS 或基础设施。 |
| Event | 身份验证事件的类型,例如登录尝试。 |
| Connection | 用于身份验证的身份提供商(例如 saml、onetimepin、google-apps)。 |
| Allow | 身份验证尝试是获准 (true) 还是被拒 (false)。 |
| Request time | 身份验证事件的时间戳。 |
| Ray ID | 通过 Cloudflare 的每个请求的唯一标识符。在通过 Cloudflare 日志追踪特定请求时非常有用。 |
| Country | 与用户 IP 地址相关联的国家/地区。 |
当用户向基础设施应用程序进行身份验证时,Cloudflare Access 会记录以下信息:
| 字段 | 描述 |
|---|---|
| Hostname(主机名) | 基础设施目标的主机名。 |
| Target ID | 基础设施目标的 UUID。 |
| SSH user(SSH 用户) | 进行身份验证的用户在连接到基础设施目标时指定的 UNIX 用户,例如 root。 |
| SSH logs | 用户在目标上运行的 SSH 命令。需要在此会话开始前配置 SSH 加密密钥。 |
要检索非身份身份验证事件的日志,请使用 GraphQL Analytics API。这些日志在 Cloudflare One 仪表板中不可用。
通过 Access 进行身份验证的用户在会话期间可以访问已授权 the URL 路径。Cloudflare 提供了几种方法来审计这些请求。
企业客户可以在其 Cloudflare 仪表板上访问详细的请求日志。企业客户还可以使用 Cloudflare 的 Logpush 服务,该服务可以通过 Cloudflare 仪表板或 API 进行配置。有关 Cloudflare HTTP 和基础设施日志记录的更多信息,请参阅 Cloudflare 日志。
一旦您团队的成员通过身份验证访问 Access 后端的 HTTP 资源,Cloudflare 就会为该用户生成一个包含其 SSO 身份的 JSON Web Token (JWT)。Cloudflare 使用非对称算法 RS256(带 SHA-256 的 RSA 签名)对该令牌进行签名,并提供公钥以便您验证令牌的真实性。
当用户请求 URL 时,Access 会将该令牌中的用户身份作为请求标头附加,当请求通过网络时,Cloudflare 会对此进行记录。您的团队可以使用 Cloudflare Logpush,在您偏好的第三方安全信息和事件管理 (SIEM) 软件或存储目标中收集这些日志。当启用 Access 用户身份字段后,日志将以类似于以下示例的 JSON 格式导出到您的系统。
{
"ClientIP": "198.51.100.206",
"ClientRequestHost": "jira.widgetcorp.tech",
"ClientRequestMethod": "GET",
"ClientRequestURI": "/secure/Dashboard/jspa",
"ClientRequestUserAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36",
"EdgeEndTimestamp": "2019-11-10T09:51:07Z",
"EdgeResponseBytes": 4600,
"EdgeResponseStatus": 200,
"EdgeStartTimestamp": "2019-11-10T09:51:07Z",
"RayID": "5y1250bcjd621y99",
"RequestHeaders":{"cf-access-user":"srhea"}
},
{
"ClientIP": "198.51.100.206",
"ClientRequestHost": "jira.widgetcorp.tech",
"ClientRequestMethod": "GET",
"ClientRequestURI": "/browse/EXP-12",
"ClientRequestUserAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36",
"EdgeEndTimestamp": "2019-11-10T09:51:27Z",
"EdgeResponseBytes": 4570,
"EdgeResponseStatus": 200,
"EdgeStartTimestamp": "2019-11-10T09:51:27Z",
"RayID": "yzrCqUhRd6DVz72a",
"RequestHeaders":{"cf-access-user":"srhea"}
}除了 Cloudflare 企业版日志记录中可用的 HTTP 请求字段外,对 Access 后端应用程序发起的请求还包含 cf-access-user 字段,其中包含用户身份字符串。这为审计用户行为提供了另一个工具。要将 cf-access-user 字段添加到您的 HTTP 请求日志中,您必须将其添加为自定义字段。有关说明,请参阅自定义字段。
请记住,Access 不会记录所有交互。按请求审计日志可以表明特定用户访问了 domain.com/admin 然后访问了 domain.com/admin/panel,但日志仅捕获导致新 HTTP 请求的交互。不生成服务器请求的纯客户端交互将不会被记录。