Skip to main content
Skip to content

授予 GitHub Copilot 云会话对组织中资源的访问权限

通过授予对云会话中已批准的 MCP 服务器和内部包的访问权限,让 Copilot 发挥更大作用。

如果已启用 Copilot in the cloud,则应配置组织的设置,以便 Copilot 代理可以连接到 MCP 服务器、使用专用包,并在 GitHub 上自主工作时访问外部服务。

下面的一些配置在存储库级别完成。 但是,组织所有者可以控制哪些资源在范围内,以及谁可以配置对这些资源的访问权限。

关于会话环境

代理会话可以在GitHub云沙盒中运行,或在GitHub Actions上运行。 这两个环境的计算成本都基于同一个每月额度。

  • 云沙盒是一个更快速、轻量级的环境,允许用户在 GitHub 的聊天界面或其他客户端中恢复会话。
  • GitHub Actions 可让你更好地控制环境,例如机密和变量、安装依赖项的设置步骤,以及访问自承载运行程序或专用网络。

有关详细比较,请参阅 GitHub.com 和 GitHub Mobile 上的GitHub Copilot。

本指南假定你使用 GitHub Actions 作为计算环境。 云沙盒目前可用于配置对组织资源访问的选项较少。

示例方案

组织使用 Sentry 跟踪 Node 应用中的 bug。 新的异常会以议题的形式在 GitHub 上创建,而你的开发人员希望将这些议题分配给 Copilot。

你想要 Copilot :

  • 连接到 Sentry MCP 服务器,以便它可以访问 Sentry 实例的详细信息
  • 安装依赖项(包括托管在上的 GitHub专用包)以生成应用并运行测试
  • 遵循组织的错误处理约定

安全地存储机密

默认情况下,身份验证令牌的范围 Copilot仅限于正在运行的存储库。 这意味着 Copilot 无法向外部系统进行身份验证或访问专用组织范围的包。

组织所有者可以在组织级别添加 Agents secrets,以跨多个存储库共享配置。 Copilot 可以在其设置和执行任务期间访问此数据。 它将无法访问 GitHub Actions、Codespaces 或 Dependabot 中的机密和变量。 有关详细信息,请参阅“为 Copilot 云代理配置机密和变量”。

注意

MCP 服务器连接(前缀为 COPILOT_MCP_)的机密也将在云沙盒中提供。 其他代理的机密仅在GitHub Actions环境中可用。

示例:保存机密

组织所有者保存组织的 Sentry 实例的身份验证令牌。

  1. 转到组织设置的“机密和变量 > 代理”部分。
  2. 将 Sentry 实例的访问令牌保存在名为 COPILOT_MCP_SENTRY_ACCESS_TOKEN 的机密中。

提示

我们不需要为专用 GitHub Packages 注册表保存令牌,我们将使用标准 GitHub ActionsGITHUB_TOKEN对其进行访问。 但是,如果您使用外部包管理系统,您需要保存身份验证令牌。

配置对 MCP 服务器的访问

组织和企业所有者可以设置一个策略,以允许用户配置对 MCP 服务器的访问。 如果启用此策略,用户可以在存储库设置或自定义代理配置文件中配置 Copilot MCP 服务器。 对于组织范围的一致性,我们建议在组织或企业级创建自定义 代理配置文件 。

使用自定义代理的会话可以访问存储库设置和代理 配置文件中配置的 MCP 服务器。 但是,在组织范围的自定义代理中涵盖的用例越多,用户就越不需要在存储库设置中配置对 MCP 服务器的即席访问。

还可以使用企业的 managed-settings.json 文件创建已批准的 MCP 服务器允许列表。 请参阅“为企业配置 MCP 服务器允许列表”。 allowedMcpServers 并 deniedMcpServers 应用于在用户设置和存储库设置中定义的 MCP 服务器,但 不适用于 存储库自定义代理配置文件中定义的 MCP 服务器。 但是,你可以通过确保组织或存储库级自定义防火墙不允许启动这些服务器所需的任何域名,来防止使用在自定义代理配置档案中配置的 MCP 服务器。 请参阅“自定义或禁用GitHub Copilot的防火墙”。

建议浏览 GitHub MCP 注册表 以查找受信任的高度分级的选项。

示例:创建自定义代理

组织所有者为 Sentry 代理创建自定义代理配置文件。 它能够访问 Sentry MCP 服务器,并能获取有关组织错误处理惯例的定制指南。

  1. 在你的组织中创建一个命名为.github-private的存储库。 (可选)企业所有者可以将此存储库设置为企业中所有自定义代理的源。

  2. 在存储库中,添加一个 agent.md 文件,其内容类似于以下配置文件。 这包括 MCP 服务器的配置,该服务器引用了我们保存的机密。

    ---
    name: sentry-error-fixer
    description: Proposed fixes for exception issues raised from Sentry
    mcp-servers:
      sentry:
        type: 'local'
        command: 'npx'
        args: ['@sentry/mcp-server@latest']
        env:
          SENTRY_ACCESS_TOKEN: ${{ secrets.COPILOT_MCP_SENTRY_ACCESS_TOKEN }}
    ---
    
    You are an error resolution specialist. When you're assigned an issue created by our Sentry integration, check for error details and stack traces using the MCP server, then propose a fix.
    
    Make sure you check that your proposed fix works by building the site with `npm run build` and running the test suite in `npm test`.
    
  3. 当开发人员将问题分配给Copilot时,他们可以从下拉列表中选择一个自定义代理。

安装专用包

让 Copilot 访问项目依赖项的最佳方式,是通过 copilot-setup-steps.yml 工作流文件来安装它们。 此文件定义在开始工作之前 Copilot 如何设置环境。

若要允许工作流拉取您私有且限定于组织的包,需要更新包设置,以确保存储库 GITHUB_TOKEN 能访问该包。 这比使用具有组织权限的长期持久性 personal access token 更安全。

示例:安装节点依赖项

开发人员创建一个工作流,用于安装存储库 package-lock.json 文件中定义的 Node 依赖项。 这包括托管在 GitHub 上的私有、组织范围的包。

  1. 开发人员在存储库中创建文件 copilot-setup-steps.yml 。

  2. 添加用于安装项目依赖项的步骤。 例如:

    # ...
    
    jobs:
      copilot-setup-steps:
        # ...
    
        # You can define any steps you want, and they will run before the agent starts.
        # If you do not check out your code, Copilot will do this for you.
        steps:
          - name: Checkout code
            uses: actions/checkout@v6
    
          - name: Set up Node.js
            uses: actions/setup-node@v7
            with:
              node-version: "20"
              cache: "npm"
    
          - name: Install JavaScript dependencies
            run: npm ci
    
  3. 组织管理员通过在每个包的设置中授予存储库访问权限,以确保存储库可以访问组织的私有包。 请参阅“配置包的访问控制和可见性”。

提示

如果需要访问企业网络内部托管的包,可能需要在自托管 GitHub Actions 运行器上运行 Copilot 代理。

控制谁可以配置这些设置

现在,你已经了解了如何在存储库和组织级别控制对资源的访问,请考虑要为用户提供多少范围来管理这些设置。

  1. 选择哪些存储库有权访问Copilot in the cloud。 如果您担心特定存储库,您可以阻止所有用户访问它。
  2. 请考虑谁获取 对这些存储库的管理员访问权限。 可以通过创建具有 All-repository 管理员 自定义角色的团队,在组织级别控制这一点。 这些用户将能够管理每个存储库中的配置 设置,例如 MCP 配置和代理机密和变量。
  3. 使用规则集和 CODEOWNERS 文件来控制配置文件的编辑,例如__。默认情况下,具有写入访问权限的任何人都可以编辑这些文件。
  4. 查看默认防火墙。 防火墙不会影响到 MCP 服务器的连接或设置步骤 copilot-setup-steps.yml,但它确实限制了 Copilot在任务执行期间对 Internet 的访问。 请参阅“自定义或禁用GitHub Copilot的防火墙”。
  5. 定义插件标准。 插件是可安裝的包,可通过重用代理、技能、钩子和集成来扩展Copilot。 您可以控制企业的 managed-settings.json 文件中允许使用哪些插件和应用市场。 请参阅“关于企业管理的插件标准”。