Skip to main content

流式处理企业审核日志

了解如何将审核和 Git 事件数据从 GitHub 流式传输到外部数据管理系统。

谁可以使用此功能?

Enterprise owners

Note

在特定用例中,Webhook 可能是审核日志或 API 轮询的良好替代方法。 Webhook 是一种 GitHub 在存储库、组织或企业发生特定事件时通知服务器的方法。 与 API 或搜索审核日志相比,如果只想了解企业、组织或存储库何时发生某些事件并进行相应记录,Webhook 效率更高。 请参阅“Webhook 文档”。

关于审核日志流

可以帮助保护知识产权并保持贵公司的合规性,使用流式处理来保留审核日志数据的副本。 审核日志的详细信息事件,例如对设置和访问权限的更改、用户成员身份、应用权限等。 请参阅 企业的审核日志事件组织的审核日志事件安全日志事件

流式处理审核日志数据具有以下优势:

  • 数据浏览。 使用首选工具检查流事件,以查询大量数据。 流包含整个企业帐户中的审核事件和 Git 事件。
  • 数据连续性。 暂停流时,它会将缓冲区保留七天,因此第一周不会丢失任何数据。 如果流保持暂停状态的时间超过七天,则将从距离当前时间之前一周的时间点恢复。 如果暂停三周或更长时间,则流不会保留任何数据,并且将从当前时间戳重新开始。
  • 数据保留。 根据需要保留导出的审核日志和 Git 事件数据。

可以随时设置、暂停或删除流。 流会导出企业中所有组织的审核和 Git 事件数据,用于从启用流后开始的活动。

所有流式传输的审核日志都作为压缩的 JSON 文件发送。 文件名格式为 YYYY/MM/HH/MM/<uuid>.json.gz

Note

GitHub 使用至少一次传递方法。 由于某些网络或系统问题,某些事件可能会重复。

审核日志流的健康状况检查

每 24 小时,每个流都要运行一次健康状况检查。 如果流设置不正确,则会向企业所有者发送一封电子邮件。 为了避免从流中删除审核日志事件,配置错误的流必须在 6 天内修复。

若要修复流配置,请遵循设置审核日志流式处理中的步骤。

设置审核日志流

若要设置审核日志流,请按照提供程序的说明操作:

Note

要获取 GitHub 用于连接到流式处理终结点的 IP 地址范围列表,使用 REST API。 GitHub Enterprise Cloud 的 meta 终结点包含一个带 IP 地址列表的 hooks 项。 请参阅 元数据的 REST API 终结点

流式传输到多个终结点

Note

此功能目前为 公共预览版,可能会更改。

可以将审核日志流式传输到多个终结点。 例如,你可以将审核日志流式传输到两个相同类型的终结点,或者流式传输到两个不同的提供程序。 要设置多个流,请遵循每个提供程序的说明。

设置流式传输到 Amazon S3

可使用访问密钥设置到 S3 的流式传输,或者不要使用 OpenID Connect (OIDC) 在 GitHub Enterprise Cloud 中存储长期机密。

使用访问密钥设置到 S3 的流式传输

要设置来自 GitHub 审核日志流式处理,您需要:

  • AWS 访问密钥 ID
  • AWS 密钥

有关创建或访问访问密钥 ID 和密钥的信息,请参阅 AWS 文档中的了解和获取你的 AWS 凭据

从 AWS:

  1. 创建 Bucket 并阻止对该 Bucket 的公共访问。 请参阅 AWS 文档中的 Creating, configuring, and working with Amazon S3 buckets(创建、配置和使用 Amazon S3 Bucket)。

  2. 创建允许 GitHub 写入 Bucket 的策略。 复制以下 JSON 并将 EXAMPLE-BUCKET 替换为存储桶的名称。 GitHub 只需要此 JSON 中的权限。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": [
                "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/*"
         }
       ]
    }
    

    请参阅 AWS 文档中的 Creating IAM policies(创建 IAM 策略)。

从 GitHub:

  1. 在 GitHub 的右上角,单击你的个人资料照片。

  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。

  3. 在页面左侧的企业帐户边栏中,单击 设置”。

  4. 在“ 设置”下,单击“审核日志”。

  5. 在“审核日志”下,单击“日志流式处理”。

  6. 选择“配置流”**** 下拉菜单,然后单击“Amazon S3”****。

  7. 在“身份验证”下,单击“访问密钥”。

  8. 配置流设置。

    • 在“区域”下,选择存储桶的区域。 例如 us-east-1
    • 在“Bucket”下,输入想要流式传输到的 Bucket 名称。 例如 auditlog-streaming-test
    • 在“访问密钥 ID”下,键入访问密钥 ID。 例如 ABCAIOSFODNN7EXAMPLE1
    • 在“密钥”下,键入密钥。 例如 aBcJalrXUtnWXYZ/A1MDENG/zPxRfiCYEXAMPLEKEY
  9. 若要验证 GitHub 是否可以连接并写入 Amazon S3 终结点,请单击“检查终结点”。

  10. 成功验证终结点后,单击“保存”。

使用 OpenID Connect 设置到 S3 的流式传输

从 AWS:

  1. 将 GitHub OIDC 提供者添加到 IAM。 请参阅 AWS 文档中的 Creating OpenID Connect (OIDC) identity providers(创建 OpenID Connect (OIDC) 标识提供者)。

    • 对于提供者 URL,请使用 https://oidc-configuration.audit-log.githubusercontent.com
    • 对于“受众”,请使用 sts.amazonaws.com
  2. 创建 Bucket 并阻止对该 Bucket 的公共访问。 请参阅 AWS 文档中的 Creating, configuring, and working with Amazon S3 buckets(创建、配置和使用 Amazon S3 Bucket)。

  3. 创建允许 GitHub 写入 Bucket 的策略。 复制以下 JSON 并将 EXAMPLE-BUCKET 替换为存储桶的名称。 GitHub 只需要此 JSON 中的权限。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Sid": "VisualEditor0",
             "Effect": "Allow",
             "Action": [
                "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::EXAMPLE-BUCKET/*"
         }
       ]
    }
    

    请参阅 AWS 文档中的 Creating IAM policies(创建 IAM 策略)。

  4. 为 GitHub IdP 配置角色和信任策略。 请参阅 AWS 文档中的 Creating a role for web identity or OpenID Connect Federation (console)(为 Web 标识或 OpenID Connect 联合身份验证创建角色(控制台))。

    • 添加先前创建的权限策略,以允许写入 Bucket。

    • 编辑信任关系,将 sub 字段添加到验证条件,将 ENTERPRISE 替换为你的企业名称。

      "Condition": {
         "StringEquals": {
            "oidc-configuration.audit-log.githubusercontent.com:aud": "sts.amazonaws.com",
            "oidc-configuration.audit-log.githubusercontent.com:sub": "https://github.com/ENTERPRISE"
          }
       }
      
    • 记下已创建的角色的 Amazon 资源名称 (ARN)。

从 GitHub:

  1. 在 GitHub 的右上角,单击你的个人资料照片。

  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。

  3. 在页面左侧的企业帐户边栏中,单击 设置”。

  4. 在“ 设置”下,单击“审核日志”。

  5. 在“审核日志”下,单击“日志流式处理”。 1. 选择“配置流”**** 下拉菜单,然后单击“Amazon S3”****。

  6. 在“身份验证”下,单击“OpenID Connect”。

  7. 配置流设置。

    • 在“区域”下,选择存储桶的区域。 例如,us-east-1;还可以使用自动发现选项。
    • 在“Bucket”下,输入想要流式传输到的 Bucket 名称。 例如 auditlog-streaming-test
    • 在“ARN 角色”下,键入前面记下的 ARN 角色。 例如 arn:aws::iam::1234567890:role/github-audit-log-streaming-role
  8. 若要验证 GitHub 是否可以连接并写入 Amazon S3 终结点,请单击“检查终结点”。

  9. 成功验证终结点后,单击“保存”。

使用 OpenID Connect 禁用到 S3 的流式传输

若要使用 OIDC 禁用到 S3 的流式传输,请在设置流式处理时删除在 AWS 中创建的 GitHub OIDC 提供程序。 请参阅 AWS 文档中的 Creating OpenID Connect (OIDC) identity providers(创建 OpenID Connect (OIDC) 标识提供者)。

如果由 OIDC 中存在安全漏洞而禁用流式传输,则在删除提供商,请使用访问密钥设置流式传输直到漏洞被解决。 请参阅使用访问密钥设置到 S3 的流式传输

与 AWS CloudTrail Lake 集成

可以使用 AWS CloudTrail Lake 集成到 S3 的流式传输,将审核日志进行合并。 请参阅 AWS CloudTrail 文档aws-samples/aws-cloudtrail-lake-github-audit-log 存储库中的 CloudTrail 开放式审核的 GitHub 审核日志

设置流式传输到 Azure Blob Storage

Note

不支持将审核日志流式处理到 Azure 政府中的 blob 存储。

在 GitHub 中设置流之前,先在 Microsoft Azure 中创建存储帐户和容器。 请参阅 Microsoft 文档中的 Azure Blob 存储简介

需要 SAS 令牌的 URL 才能配置流。

从 Microsoft Azure 门户:

  1. 在主页上,单击“存储帐户”。
  2. 在“名称”下,单击要使用的存储帐户的名称。
  3. 在“数据存储”下,单击“容器”。
  4. 单击要使用的容器的名称。
  5. 在左侧边栏的“设置”下,单击“共享访问令牌”。
  6. 选择“权限”下拉菜单,然后选择 CreateWrite,并取消选择所有其他选项。
  7. 设置符合机密轮换策略的到期日期。
  8. 单击“生成 SAS 令牌和 URL”。
  9. 复制显示的 Blob SAS URL 字段的值。 您将在 GitHub 中使用此 URL。

从 GitHub:

  1. 在 GitHub 的右上角,单击你的个人资料照片。
  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。
  3. 在页面左侧的企业帐户边栏中,单击 设置”。
  4. 在“ 设置”下,单击“审核日志”。
  5. 在“审核日志”下,单击“日志流式处理”。
  6. 选择“配置流”下拉菜单并单击“Azure Blob 存储” 。
  7. 在配置页上,输入在 Azure 中复制的 blob SAS URL。 “容器”字段将根据 URL 自动填充。
  8. 单击“检查终结点”以验证 GitHub 是否可以连接并写入 Azure Blob 存储终结点。
  9. 成功验证终结点后,单击“保存”。

设置流式传输到 Azure Event Hub

Note

Azure 政府中的事件中心实例不受支持。

在 GitHub 中设置流之前,需要:

从 Microsoft Azure 门户:

  1. 在页面顶部使用搜索框搜索“事件中心”。
  2. 选择“事件中心”。 将列出事件中心的名称。
  3. 记下要流式传输到的事件中心的名称。 单击该事件中心。
  4. 在左侧菜单中,单击“共享访问策略”。
  5. 从策略列表中选择共享访问策略,或创建新策略。
  6. 从“连接字符串 - 主密钥”字段中复制连接字符串。

从 GitHub:

  1. 在 GitHub 的右上角,单击你的个人资料照片。
  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。
  3. 在页面左侧的企业帐户边栏中,单击 设置”。
  4. 在“ 设置”下,单击“审核日志”。
  5. 在“审核日志”下,单击“日志流式处理”。
  6. 选择“配置流”下拉菜单并单击“Azure 事件中心”。
  7. 在配置页面上,输入:
    • Azure Event Hubs 实例的名称。
    • 连接字符串。
  8. 单击“检查终结点”以验证 GitHub 是否可以连接并写入 Azure 事件中心终结点。
  9. 成功验证终结点后,单击“保存”。

设置流式传输到 Datadog

若要设置流式传输到 Datadog,在 Datadog 中创建客户端令牌或 API 密钥,然后使用令牌在 GitHub Enterprise Cloud 中配置审核日志流式传输以进行身份验证。 无需在 Datadog 中创建 bucket 或其他存储容器。

设置流式传输到 Datadog 后,可以通过按“github.audit.streaming”进行筛选来查看审核日志数据。 请参阅日志管理

  1. 如果还没有 Datadog 帐户,请创建一个。
  2. 在 Datadog 中,生成客户端令牌或 API 密钥,然后单击“复制密钥”。 请参阅 Datadog 文档中的 API 和应用程序密钥
  3. 在 GitHub 的右上角,单击你的个人资料照片。
  4. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。
  5. 在页面左侧的企业帐户边栏中,单击 设置”。
  6. 在“ 设置”下,单击“审核日志”。
  7. 在“审核日志”下,单击“日志流式处理”。
  8. 选择“配置流”下拉列表,然后单击“Datadog”。
  9. 在“令牌”字段中,粘贴之前复制的令牌。
  10. 选择“站点”下拉菜单,然后单击 Datadog 站点。 若要确定站点,请将 Datadog URL 与 Datadog 文档的 Datadog 站点中的表进行比较。
  11. 若要验证 GitHub 是否可以连接并写入 Datadog 终结点,请单击“检查终结点”。
  12. 成功验证终结点后,单击“保存”。
  13. 几分钟后,确认审核日志数据是否出现在 Datadog 中的“日志”选项卡上。 如果未出现,请确认令牌和站点在 GitHub 中是否正确。

设置流式传输到 Google Cloud Storage

要设置流式传输到 Google Cloud Storage,在 Google Cloud 中使用适当的凭据和权限创建一个服务帐户,然后使用服务帐户的凭据在 GitHub Enterprise Cloud 中配置审核日志流以进行身份验证。

  1. 为 Google Cloud 创建一个服务帐户。 您无需为此帐户设置访问控制或 IAM 角色。 请参阅 Google Cloud 文档中的创建和管理服务帐户

  2. 创建服务帐户的 JSON 密钥,并安全地存储该密钥。 请参阅 Google Cloud 文档中的创建和管理服务帐户密钥

  3. 如果尚未创建,请创建一个存储桶。 请参阅 Google Cloud 文档中的创建存储桶

  4. 为服务帐户分配存储桶的存储对象创建者角色。 请参阅 Google Cloud 文档中的使用 Cloud IAM 权限

  5. 在 GitHub 的右上角,单击你的个人资料照片。

  6. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。

  7. 在页面左侧的企业帐户边栏中,单击 设置”。

  8. 在“ 设置”下,单击“审核日志”。

  9. 在“审核日志”下,单击“日志流式处理”。

  10. 选择“配置流”下拉菜单并单击“Google Cloud Storage”。

  11. 在“Bucket(存储桶)”下,键入 Google Cloud Storage 存储桶的名称。

  12. 在“JSON Credentials(JSON 凭据)”下,粘贴服务帐户的 JSON 密钥文件的全部内容。

  13. 若要验证 GitHub 是否可以连接并写入 Google Cloud Storage Bucket,请单击“检查终结点”。

  14. 成功验证终结点后,单击“保存”。

设置流式传输到 Splunk

要将审核日志流式传输到 Splunk 的 HTTP 事件收集器 (HEC) 端点,确保将终端节点配置为接受 HTTPS 连接。 请参阅 Splunk 文档中的在 Splunk Web 中设置和使用 HTTP 事件收集器

Note

GitHub 通过 <Domain>:port/services/collector 验证 HEC 端点。 如果自托管端点(例如通过 OpenTelemetry 使用 Splunk HEC 接收器),请确保可在此目标访问端点。

  1. 在 GitHub 的右上角,单击你的个人资料照片。

  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。

  3. 在页面左侧的企业帐户边栏中,单击 设置”。

  4. 在“ 设置”下,单击“审核日志”。

  5. 在“审核日志”下,单击“日志流式处理”。

  6. 选择“配置流”下拉菜单并单击“Splunk”。

  7. 在配置页面上,输入:

    • 要流式传输到的应用程序所在的域。

      如果使用的是 Splunk Cloud,则 Domain 应为 http-inputs-<host>,其中 host 是你在 Splunk Cloud 中使用的域。 例如 http-inputs-mycompany.splunkcloud.com

      如果使用的是免费试用版 Splunk Cloud,则 Domain 应为 inputs.<host>,其中 host 是你在 Splunk Cloud 中使用的域。 例如 inputs.mycompany.splunkcloud.com

    • 应用程序接受数据的端口。

      如果使用 Splunk Cloud,Port 应为 443

      如果使用的是 Splunk Cloud 的免费试用版,则 Port 应为 8088

    • GitHub 可用来验证第三方应用程序的令牌。

  8. 使“启用 SSL 验证”复选框保持选中状态。

    审核日志始终作为加密数据进行流式传输,但是,如果选择此选项, GitHub 在传递事件时会验证 Splunk 实例的 SSL 证书。 SSL 验证有助于确保将事件安全地传递到 URL 端点。 虽然验证是可选操作,但我们建议将 SSL 验证保持为启用状态。

  9. 单击“检查终结点”以验证 GitHub 是否可以连接并写入 Splunk 终结点。

  10. 成功验证终结点后,单击“保存”。

暂停审核日志流

暂停流对接收应用程序执行维护,而不会丢失审核数据。 审核日志在 GitHub 上最多存储七天,然后在取消暂停流时导出。

Datadog 仅接受过去最多 18 小时内的日志。 如果将到 Datadog 终结点的流暂停超过 18 小时,则有可能会丢失 Datadog 在恢复流式传输后不会接受的日志。

  1. 在 GitHub 的右上角,单击你的个人资料照片。
  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。
  3. 在页面左侧的企业帐户边栏中,单击 设置”。
  4. 在“ 设置”下,单击“审核日志”。
  5. 在“审核日志”下,单击“日志流式处理”。
  6. 在配置的流右侧,单击“暂停流”。
  7. 将显示确认消息。 单击“暂停流”进行确认。

若要重启流式处理,请单击“恢复流”。

删除审核日志流

  1. 在 GitHub 的右上角,单击你的个人资料照片。
  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。
  3. 在页面左侧的企业帐户边栏中,单击 设置”。
  4. 在“ 设置”下,单击“审核日志”。
  5. 在“审核日志”下,单击“日志流式处理”。
  6. 在“危险区域”下,单击“删除流”。
  7. 将显示确认消息。 单击“删除流”进行确认。

启用 API 请求的审核日志流式处理

Note

此功能目前为 公共预览版,可能会更改。

  1. 在 GitHub 的右上角,单击你的个人资料照片。
  2. 根据环境,单击“你的企业”,或单击“你的企业”,然后单击要查看的企业********。
  3. 在页面左侧的企业帐户边栏中,单击 设置”。
  4. 在“ 设置”下,单击“审核日志”。
  5. 在“审核日志”下,单击“设置”。
  6. 在“API 请求”下,选择“启用 API 请求事件”。
  7. 单击“ 保存”。