

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# GitHub
<a name="data-source-github"></a>

GitHub 是一项用于软件开发的基于 Web 的托管服务，提供带有版本控制的代码存储和管理服务。您可以使用Amazon Kendra索引 GitHub 企业云 (SaaS) 和 GitHub 企业服务器（On Prem）存储库文件、议题和拉取请求、议题和拉取请求评论以及议题和拉取请求评论附件。您也可以选择包括或排除某些文件。

**注意**  
Amazon Kendra现在支持升级后的 GitHub 连接器。  
已为您自动完成控制台升级。您在控制台中新建的所有连接器都将使用升级后的架构。现在，如果您使用 API，则必须使用 [https://docs.aws.amazon.com/kendra/latest/APIReference/API_TemplateConfiguration.html](https://docs.aws.amazon.com/kendra/latest/APIReference/API_TemplateConfiguration.html) 对象而不是 `GitHubConfiguration` 对象来配置您的连接器。  
使用旧版控制台和 API 架构配置的连接器仍可照常运行，但您将无法编辑或更新它们。如果要编辑或更新连接器配置，必须新建一个连接器。  
我们建议您将连接器工作流程迁移至升级后的版本。使用旧版架构配置的连接器的支持预计将在 2024 年 6 月前终止。

您可以使用[Amazon Kendra控制台](https://console.aws.amazon.com/kendra/)和 [TemplateConfiguration](https://docs.aws.amazon.com/kendra/latest/APIReference/API_TemplateConfiguration.html)API Amazon Kendra 连接到您的 GitHub 数据源。

要对Amazon KendraGitHub 数据源连接器进行故障排除，请参阅[数据来源故障排除](troubleshooting-data-sources.md)。

**Topics**
+ [支持的功能](#supported-features-github)
+ [先决条件](#prerequisites-github)
+ [连接说明](#data-source-procedure-github)
+ [了解详情](#github-learn-more)

## 支持的功能
<a name="supported-features-github"></a>

Amazon KendraGitHub 数据源连接器支持以下功能：
+ 字段映射
+ 用户访问控制
+ 包含/排除筛选条件
+ 完整和增量内容同步
+ 虚拟私有云（VPC）

## 先决条件
<a name="prerequisites-github"></a>

在使用索Amazon Kendra引 GitHub 数据源之前，请在 GitHub 和AWS帐户中进行这些更改。

**在中 GitHub，请确保你有：**
+ 已创建具有 GitHub 组织管理权限的 GitHub 用户。
+ 已在 GitHub 中配置了个人访问令牌，用作您的身份验证凭证。请参阅[有关创建个人访问令牌的 GitHub 文档](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)。
**注意**  
我们建议您定期刷新或轮换您的凭证和密码。为了安全起见，请仅提供必要的访问权限级别。我们建议**不要**跨数据来源以及连接器版本 1.0 和 2.0（如果适用）重复使用凭证和密钥。
+ **推荐：**为身份验证凭据配置 OAuth 令牌。使用 OAuth 令牌可获得更好的 API 限制和连接器性能。参见[GitHub 有关 OAuth 授权的文档](https://docs.github.com/en/rest/apps/oauth-applications?apiVersion=2022-11-28#about-oauth-apps-and-oauth-authorizations-of-github-apps)。
+ 记下了您使用的 GitHub服务类型的 GitHub 主机 URL。例如， GitHub 云的主机 URL 可以是*https://api.github.com*， GitHub 服务器的主机 URL 可以是*https://on-prem-host-url/api/v3/*。
+ 记下您要连接 GitHub 的 GitHub企业云 (SaaS) 帐户或 GitHub 企业服务器（本地）帐户的组织名称。您可以登录到 GitHub 桌面，然后在个人资料图片下拉列表中选择 “**您的组织**”，找到您的组织名称。
+ **可选（仅限服务器）：**生成 SSL 证书并复制存储在存储Amazon S3桶中的证书的路径。 GitHub 如果您需要安全的 SSL 连接，则可以使用它进行连接。您只需使用 OpenSSL 在任何计算机上生成自签名 X509 证书。有关使用 OpenSSL 创建 X509 证书的示例，请参阅[创建并签署](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-ssl.html) X509 证书。
+ 添加了以下权限：

  **适用于 GitHub 企业云 (SaaS)**
  + `repo:status`— 授予对公共和私有仓库中提交状态的 read/write 访问权限。只有在向其他用户或服务授予访问私有存储库提交状态的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `repo_deployment` – 授予访问公有和私有存储库的部署状态的权限。只有在向其他用户或服务授予访问部署状态的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `public_repo` – 限制对公有存储库的访问。这包括 read/write 访问代码、提交状态、存储库项目、协作者以及公共仓库和组织的部署状态。此外还需要为公有存储库添加星标。
  + `repo:invite`— 授予在仓库上进行协作的邀请 accept/decline 的能力。只有在向其他用户或服务授予使用邀请的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `security_events` – 授权：在代码扫描 API 中读取和写入安全事件的权限。只有在向其他用户或服务授予访问安全事件的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `read:org` – 对组织成员资格、组织项目和团队成员资格的只读访问权限。
  + `user:email` – 授予对用户电子邮件地址的读取访问权限。亚马逊 Kendra 要求抓取。 ACLs
  + `user:follow` – 授予关注或取消关注其他用户的权限。亚马逊 Kendra 要求抓取。 ACLs
  + `read:user` – 授予读取用户个人资料数据的访问权限。亚马逊 Kendra 要求抓取。 ACLs
  + `workflow` – 授予添加和更新 GitHub 操作工作流文件的能力。如果同一存储库中的另一个分支上存在相同的文件（路径和内容均相同），则可以在没有此范围的情况下提交工作流文件。

  有关更多信息，请参阅 GitHub Docs 中的[ OAuth 应用范围](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps)。

  **适用于 GitHub 企业服务器（本地版）**
  + `repo:status`— 授予对公共和私有仓库中提交状态的 read/write 访问权限。只有在向其他用户或服务授予访问私有存储库提交状态的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `repo_deployment` – 授予访问公有和私有存储库的部署状态的权限。只有在向其他用户或服务授予访问部署状态的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `public_repo` – 限制对公有存储库的访问。这包括 read/write 访问代码、提交状态、存储库项目、协作者以及公共仓库和组织的部署状态。此外还需要为公有存储库添加星标。
  + `repo:invite`— 授予在仓库上进行协作的邀请 accept/decline 的能力。只有在向其他用户或服务授予使用邀请的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `security_events` – 授权：在代码扫描 API 中读取和写入安全事件的权限。只有在向其他用户或服务授予访问安全事件的权限，但不授予访问代码的权限时，才需要使用此范围。
  + `read:user` – 授予读取用户个人资料数据的访问权限。Amazon Q Business 要求抓取 ACLs。
  + `user:email` – 授予对用户电子邮件地址的读取访问权限。Amazon Q Business 要求抓取 ACLs。
  + `user:follow` – 授予关注或取消关注其他用户的权限。Amazon Q Business 要求抓取 ACLs。
  + `site_admin`— 授予站点管理员访问 GitHub 企业服务器管理 API 端点的权限。
  + `workflow` – 授予添加和更新 GitHub 操作工作流文件的能力。如果同一存储库中的另一个分支上存在相同的文件（路径和内容均相同），则可以在没有此范围的情况下提交工作流文件。

  有关更多信息，请参阅GitHub文档中[ OAuth 应用程序的作用域](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/scopes-for-oauth-apps)和[了解GitHub开发者中 OAuth 应用程序的范围](https://developer.github.com/enterprise/2.16/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)。
+ 已选中每个文档在您计划用于同一索引的其他数据源中 GitHub 以及其他数据源中都是唯一的。您要用于编制索引的每个数据来源在所有数据来源中都不能包含相同的文档。文档对索引来说 IDs 是全局的，并且每个索引必须是唯一的。

**在你的AWS 账户，请确保你有：**
+ [已创建Amazon Kendra索引](https://docs.aws.amazon.com/kendra/latest/dg/create-index.html)，如果使用 API，则记下索引 ID。
+ 为您的数据源@@ [创建了一个IAM角色](https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html#iam-roles-ds)，如果使用 API，请记下该角色的 ARN。IAM
**注意**  
如果您更改了身份验证类型和证书，则必须更新您的IAM角色才能访问正确的AWS Secrets Manager密钥 ID。
+ 将您的 GitHub 身份验证凭证存储在AWS Secrets Manager密钥中，如果使用 API，请记下该密钥的 ARN。
**注意**  
我们建议您定期刷新或轮换您的凭证和密码。为了安全起见，请仅提供必要的访问权限级别。我们建议**不要**跨数据来源以及连接器版本 1.0 和 2.0（如果适用）重复使用凭证和密钥。

如果您没有现有的IAM角色或密钥，则可以在将 GitHub 数据源连接到时使用控制台创建新的IAM角色和Secrets Manager密钥Amazon Kendra。如果您使用的是 API，则必须提供现有IAM角色和Secrets Manager密钥的 ARN 以及索引 ID。

## 连接说明
<a name="data-source-procedure-github"></a>

要Amazon Kendra连接到您的 GitHub 数据源，您必须提供 GitHub 数据源的必要详细信息，Amazon Kendra以便访问您的数据。如果您尚未进行配置Amazon Kendra， GitHub 请参阅[先决条件](#prerequisites-github)。

------
#### [ Console ]

**要连接Amazon Kendra到 GitHub** 

1. 登录AWS 管理控制台并打开[Amazon Kendra控制台](https://console.aws.amazon.com/kendra/)。

1. 在左侧导航窗格中，选择**索引**，然后从索引列表中选择要使用的索引。
**注意**  
您可以选择在**索引设置**下配置或编辑您的**用户访问控制**设置。

1. 在**开始使用**页面上，选择**添加数据来源**。

1. 在**添加数据来源**页面上，选择 **GitHub 连接器**，然后选择**添加连接器**。如果使用版本 2（如果适用），请选择带有“V2.0”标签的 **GitHub 连接器**。

1. 在**指定数据来源详细信息**页面上，输入以下信息：

   1. 在**名称和描述**中，在**数据来源名称**中输入您的数据来源的名称。可以包含连字符，但不能包含空格。

   1. （可选）**描述**：输入数据来源的描述信息。

   1. 在**默认语言**中，选择用于筛选文档以编制索引的语言。除非另行指定，否则语言默认为英语。在文档元数据中指定的语言会覆盖所选语言。

   1. 在**标签**中，用于**添加新标签**-包括可选标签以搜索和筛选您的资源或跟踪您的AWS成本。

   1. 选择**下一步**。

1. 在**定义访问权限和安全性**页面上，请输入以下信息：

   1. **GitHub来源**-在**GitHub 企业云和GitHub企业****服务器**之间进行选择。

   1. **GitHub 主机 URL** —例如， GitHub 云的主机 URL 可以是*https://api.github.com*， GitHub 服务器的主机 URL 可能是。*https://on-prem-host-url/api/v3/*

   1. **GitHub 组织名称**-输入您的 GitHub组织名称。你可以在你的 GitHub 账户中找到你的组织信息。
**注意**  
GitHub 连接器支持抓取每个数据源连接器实例的单个组织。

   1. **授权** - 如果您有访问控制列表（ACL）并想将其用于访问控制，请选择是开启还是关闭文档的 ACL 信息。ACL 用于指定用户和组可以访问哪些文档。ACL 信息用于根据用户或其所在组对文档的访问权限来筛选搜索结果。有关更多信息，请参阅[用户上下文筛选](https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html#context-filter-user-incl-datasources)。

   1. AWS Secrets Managers@@ **ecret** —选择现有密钥或创建新Secrets Manager密钥来存储您的 GitHub 身份验证凭证。如果您选择创建新密钥，则会打开 AWS Secrets Manager 密钥窗口。

      1. 在**创建 AWS Secrets Manager 密钥窗口**中输入以下信息：

         1. **密钥名称** - 密钥的名称。前缀 “AmazonKendra-GitHub-” 会自动添加到您的密钥名称中。

         1. 对于**GitHub令牌**-输入中配置的身份验证凭据值。 GitHub

      1. 保存并添加您的密钥。

   1. **虚拟私有云（VPC）**- 您可以选择使用 VPC。如果是这样，则必须添加**子网**和 **VPC 安全组**。

   1. **身份爬网程序** – 指定是否激活 Amazon Kendra 的身份爬网程序。身份爬网程序使用文档的访问控制列表（ACL）信息，来根据用户或用户组对文档的访问权限筛选搜索结果。如果您的文档有 ACL 并选择使用 ACL，则也可以选择开启身份爬网程序来配置搜索结果Amazon Kendra的[用户上下文筛选](https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html#context-filter-user-incl-datasources)。否则，如果关闭身份爬网程序，则可以公开搜索所有文档。如果您想对文档使用访问控制并且身份搜寻器已关闭，则可以使用 [PutPrincipalMapping](https://docs.aws.amazon.com/kendra/latest/APIReference/API_PutPrincipalMapping.html)API 上传用户和群组访问信息以进行用户上下文筛选。

   1. **IAMro** le —选择现有IAM角色或创建新IAM角色来访问您的存储库凭据和索引内容。
**注意**  
IAM用于索引的角色不能用于数据源。如果您不确定是否将现有角色用于编制索引或常见问题解答，为了避免出错，请选择**创建新角色**。

   1. 选择**下一步**。

1. 在**配置同步设置**页面上，请输入以下信息：

   1. **选择存储库** – 选择对所有存储库进行爬取或选择。

      如果您选择爬取选择存储库，请为存储库添加名称，或者添加任何特定分支的名称。

   1. **内容类型** – 从文件、问题、拉取请求等选择要爬取的内容类型。

   1. **正则表达式模式** - 添加包含或排除某些文件的正则表达式模式。

   1. **同步模式** – 选择在数据来源内容发生变化时更新索引的方式。首次与同步数据源时，Amazon Kendra默认情况下会对所有内容进行抓取和索引。如果首次同步失败，即使您没有选择“完整同步”作为同步模式，也必须执行一次完整的数据同步。
      + 完整同步：每次数据来源与索引同步时，重新为所有内容编制索引，并替换已有内容。
      + 修改后的全新同步：每次数据源与索引同步时，仅为新增和修改过的内容编制索引。 Amazon Kendra可以使用数据源的机制来跟踪内容更改并索引自上次同步以来更改的内容。
      + 新增、修改、删除的同步：每次数据来源与索引同步时，仅为新增、修改和删除的内容编制索引。Amazon Kendra 可以利用数据来源自身的内容变更跟踪机制，仅为自上次同步以来发生变化的内容编制索引。

   1. 在**同步运行计划**的**频率**中 - 选择同步数据来源内容并更新索引的频率。

   1. 选择**下一步**。

1. 在**设置字段映射**页面上，请输入以下信息：

   1. **默认数据源字段**-从Amazon Kendra生成的默认数据源字段中选择要映射到索引的字段。

   1.  **添加字段** - 添加自定义数据来源字段以创建要映射到的索引字段名称和字段数据类型。

   1. 选择**下一步**。

1. 在**查看和创建**页面上，请检查输入的信息是否正确，然后选择**添加数据来源**。您也可以选择在此页面上编辑信息。成功添加数据来源后，您的数据来源将显示在**数据来源**页面上。

------
#### [ API ]

**要连接Amazon Kendra到 GitHub**

您必须使用 [https://docs.aws.amazon.com/kendra/latest/dg/API_TemplateConfiguration.html](https://docs.aws.amazon.com/kendra/latest/dg/API_TemplateConfiguration.html) API 指定[数据来源架构](https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html#ds-github-schema)的 JSON。您必须提供以下信息：
+ **数据来源** – 当使用 [https://docs.aws.amazon.com/kendra/latest/dg/API_TemplateConfiguration.html](https://docs.aws.amazon.com/kendra/latest/dg/API_TemplateConfiguration.html) JSON 架构时，将数据来源类型指定为 `GITHUB`。当调用 [https://docs.aws.amazon.com/kendra/latest/dg/API_CreateDataSource.html](https://docs.aws.amazon.com/kendra/latest/dg/API_CreateDataSource.html) API 时，还要将数据来源指定为 `TEMPLATE`。
+ **GitHubtyp** e —将类型指定为`SAAS`或`ON_PREMISE`。
+ **主机 URL**-指定 GitHub 主机 URL 或 API 端点网址。例如，如果您使用 GitHub SaaS/Enterprise Cloud，则主机 URL 可能是`https://api.github.com`，对于 GitHub 本地/企业服务器，主机 URL 可能是。`https://on-prem-host-url/api/v3/`
+ **组织名称**-指定 GitHub 账户所在组织的名称。您可以登录到 GitHub 桌面，然后在个人资料图片下拉列表中选择 “**您的组织**”，找到您的组织名称。
+ **同步模式**-指定数据源内容发生变化时Amazon Kendra应如何更新索引。首次将数据来源与 Amazon Kendra 同步时，默认情况下会爬取所有内容并编制索引。如果首次同步失败，即使您没有选择“完整同步”作为同步模式，也必须执行一次完整的数据同步。您可以选择：
  + `FORCED_FULL_CRAWL`，每次数据来源与索引同步时，重新为所有内容编制索引，并替换已有内容。
  + `FULL_CRAWL`，每次数据来源与索引同步时，仅为新增、修改和删除的内容编制索引。Amazon Kendra 可以利用数据来源自身的内容变更跟踪机制，仅为自上次同步以来发生变化的内容编制索引。
  + `CHANGE_LOG`，每次数据来源与索引同步时，仅为新增和修改的内容编制索引。Amazon Kendra 可以利用数据来源自身的内容变更跟踪机制，仅为自上次同步以来发生变化的内容编制索引。
+ **身份爬网程序** – 指定是否激活 Amazon Kendra 的身份爬网程序。身份爬网程序使用文档的访问控制列表（ACL）信息，来根据用户或用户组对文档的访问权限筛选搜索结果。如果您的文档有 ACL 并选择使用 ACL，则也可以选择开启身份爬网程序来配置搜索结果Amazon Kendra的[用户上下文筛选](https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html#context-filter-user-incl-datasources)。否则，如果关闭身份爬网程序，则可以公开搜索所有文档。如果您想对文档使用访问控制并且身份搜寻器已关闭，则可以使用 [PutPrincipalMapping](https://docs.aws.amazon.com/kendra/latest/APIReference/API_PutPrincipalMapping.html)API 上传用户和群组访问信息以进行用户上下文筛选。
+ **亚马逊秘密资源名称 (ARN)**-提供包含您账户身份验证凭证的Secrets Manager密钥的亚马逊资源名称 (ARN)。 GitHub 密钥必须使用具有以下键的 JSON 结构存储：

  ```
  {
      "personalToken": "token"
  }
  ```
+ **IAMro** le —指定`RoleArn`何时调用`CreateDataSource`以向IAM角色提供访问您的Secrets Manager密钥的权限以及调用 GitHub 连接器 APIs 所需的公众的权限，以及Amazon Kendra。有关更多信息，请参阅 [ GitHub S3 数据来源的 IAM 角色](https://docs.aws.amazon.com/kendra/latest/dg/iam-roles.html#iam-roles-ds)。

您还可以添加以下可选功能：
+  **虚拟私有云（VPC）**- 指定 `VpcConfiguration`，以便调用 `CreateDataSource`。有关更多信息，请参阅 [配置 Amazon Kendra 为使用 Amazon VPC](vpc-configuration.md)。
**注意**  
如果您使用 GitHub 服务器，则必须使用Amazon VPC才能连接到 GitHub服务器。
+  **存储库筛选条件** – 按名称和分支名称筛选存储库。
+  **文档/内容类型** – 指定是否爬取存储库文档、问题、问题评论、问题评论附件、拉取请求、拉取请求评论、拉取请求评论附件。
+  **包含和排除筛选条件** – 指定是包含还是排除某些文件和文件夹。
**注意**  
大多数数据来源使用正则表达式模式，即称为筛选条件的包含或排除模式。如果您指定包含筛选条件，则只会为与包含筛选条件匹配的内容编制索引。不会为任何与包含筛选条件不匹配的文档编制索引。如果您指定包含和排除筛选条件，则不会为与排除筛选条件匹配的文档编制索引，即使它们与包含筛选条件相匹配。
+ **访问控制列表（ACL）**- 如果您有 ACL 并想将其用于访问控制，请选择是否爬取文档的 ACL 信息。ACL 用于指定用户和组可以访问哪些文档。ACL 信息用于根据用户或其所在组对文档的访问权限来筛选搜索结果。有关更多信息，请参阅[用户上下文筛选](https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html#context-filter-user-incl-datasources)。
+  **字段映射**-选择将 GitHub 数据源字段映射到Amazon Kendra索引字段。您可以包含文档字段、提交记录、问题、问题附件、问题评论、拉取请求、拉取请求附件以及拉取请求评论。有关更多信息，请参阅[映射数据来源字段](https://docs.aws.amazon.com/kendra/latest/dg/field-mapping.html)。
**注意**  
文档正文字段或文档正文的等效字段是 Amazon Kendra 搜索文档时所必需的。您必须将数据来源中的文档正文字段名映射到索引字段名称 `_document_body`。其他所有字段均为可选字段。

有关要配置的其他重要 JSON 键的列表，请参阅 [GitHub 模板架构](https://docs.aws.amazon.com/kendra/latest/dg/ds-schemas.html#ds-github-schema)。

------

## 了解详情
<a name="github-learn-more"></a>

要了解有关Amazon Kendra与 GitHub 数据源集成的更多信息，请参阅：
+ [借助连接器的强大功能，重新构想对 GitHub 存储库的Amazon KendraGitHub 搜索](https://aws.amazon.com/blogs/machine-learning/reimagine-search-on-github-repositories-with-the-power-of-the-amazon-kendra-github-connector/)