Skip to main content

流式处理企业审核日志

您可以将审核和 Git 事件数据从 GitHub 流式传输到外部数据管理系统。

谁可以使用此功能?

Enterprise owners can configure audit log streaming.

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

关于审核日志流

为了帮助保护你的知识产权并保持贵公司的合规性,你可以使用流式处理来保留审核日志数据的副本。 审核日志的详细信息事件,例如对设置和访问权限的更改、用户成员身份、应用权限等。 如果流式处理审核日志数据,则可以利用以下优势。

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

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

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

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

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

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

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

审核日志流中所显示的事件

你可以查看流式处理的审核日志中显示的特定事件。 有关详细信息,请参阅以下文章。

设置审核日志流

您可以按照提供程序的说明在 GitHub Enterprise Cloud 上设置审核日志流。

注意: 要获取 GitHub 用于连接到流式处理终结点的 IP 地址范围列表,可以使用 REST API。 GitHub Enterprise Cloud 的 meta 终结点包含一个带 IP 地址列表的 hooks 项。 有关详细信息,请参阅“元数据的 REST API 终结点”。

设置流式传输到 Amazon S3

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

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

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

  • AWS 访问密钥 ID
  • AWS 密钥

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

  1. 在 AWS 中,创建存储桶,并阻止对存储桶的公共访问。 有关详细信息,请参阅 AWS 文档中的 Creating, configuring, and working with Amazon S3 buckets(创建、配置和使用 Amazon S3 Bucket)。

  2. 在 AWS 中,通过复制以下 JSON 并将 EXAMPLE-BUCKET 替换为你的 Bucket 名称,创建一个允许 GitHub 写入 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 策略)。

  3. 在 GitHub 的右上角,单击你的个人资料照片,然后单击“你的企业”****。

  4. 在企业列表中,单击您想要查看的企业。

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

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

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

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

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

  10. 配置流设置。

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

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

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

  1. 在 AWS 中,将 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. 在 AWS 中,创建存储桶,并阻止对存储桶的公共访问。 有关详细信息,请参阅 AWS 文档中的 Creating, configuring, and working with Amazon S3 buckets(创建、配置和使用 Amazon S3 Bucket)。

  3. 在 AWS 中,通过复制以下 JSON 并将 EXAMPLE-BUCKET 替换为你的 Bucket 名称,创建一个允许 GitHub 写入 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)。

  5. 在 GitHub 的右上角,单击你的个人资料照片,然后单击“你的企业”****。

  6. 在企业列表中,单击您想要查看的企业。

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

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

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

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

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

  12. 配置流设置。

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

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

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

如果出于任何原因(例如在 OIDC 中发现安全漏洞)而需要禁用到 S3 的流式传输,请在设置流式处理时删除在 AWS 中创建的 GitHub OIDC 提供程序。 有关详细信息,请参阅 AWS 文档中的 Creating OpenID Connect (OIDC) identity providers(创建 OpenID Connect (OIDC) 标识提供者)。

然后,使用访问密钥设置流式处理,直到漏洞得以解决。 有关详细信息,请参阅“使用访问密钥设置到 S3 的流式传输”。

与 AWS CloudTrail Lake 集成

可通过将到 S3 的审核日志流式传输与 AWS CloudTrail Lake 集成,将 GitHub Enterprise Cloud 中的审核日志与 AWS 活动日志合并。 有关其他信息,请参阅 AWS CloudTrail 文档aws-samples/aws-cloudtrail-lake-github-audit-log 存储库中的 CloudTrail 开放式审核的 GitHub 审核日志

设置流式传输到 Azure Blob Storage

在 GitHub 中设置流之前,必须先在 Microsoft Azure 中创建存储帐户和容器。 有关详细信息,请参阅 Microsoft 文档“Azure Blob 存储简介”。

要在 GitHub 配置流,需要 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

在 GitHub 中设置流之前,必须先在 Microsoft Azure 中具有事件中心命名空间。 接下来,必须在命名空间中创建事件中心实例。 设置流时,需要此事件中心实例的详细信息。 有关详细信息,请参阅 Microsoft 文档“快速入门:使用 Azure 门户创建事件中心”。

需要有关事件中心的两条信息:其实例名称和连接字符串。

在 Microsoft Azure 门户中:

  1. 在页面顶部的“Microsoft Azure”旁,使用搜索框搜索“事件中心”。
  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 站点,请将 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 文档中的创建存储 Bucket

  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 事件收集器

注意****:GitHub 通过 <Domain>:port/services/collector 验证 HEC 端点。 如果自托管 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.com 上最多存储七天,然后在取消暂停流时导出。

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

  1. 在 GitHub 的右上角,单击你的个人资料照片,然后单击“你的企业”****。

  2. 在企业列表中,单击您想要查看的企业。

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

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

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

  6. 在配置的流右侧,单击“暂停流”。

  7. 此时会显示确认消息。 单击“暂停流”进行确认。

当应用程序准备好再次接收审核日志时,请单击“恢复流”以重新启动流式处理审核日志。

删除审核日志流

  1. 在 GitHub 的右上角,单击你的个人资料照片,然后单击“你的企业”****。

  2. 在企业列表中,单击您想要查看的企业。

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

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

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

  6. 在“危险区域”下,单击“删除流”。

  7. 此时会显示确认消息。 单击“删除流”进行确认。

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

注意:此功能目前为公共 beta 版本,可能会有变动。

  1. 在 GitHub 的右上角,单击你的个人资料照片,然后单击“你的企业”****。

  2. 在企业列表中,单击您想要查看的企业。

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

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

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

  6. 在“API 请求”下,选择“启用 API 请求事件”。

  7. 单击“ 保存”。