Гайд · TNWS AI

Как ограничить доступ Copilot CLI к URL через allow и deny

Copilot
7 мин—

Разрешение одного домена и запрет другого в Copilot CLI: --allow-url, --deny-url, приоритет запрета, тест на фиктивных адресах и аудит сети.

Этот гайд решает конкретную задачу: дать агенту доступ к официальной документации проекта без автоматического разрешения для другого домена. Ниже — воспроизводимый сценарий, а не обещание, что любой текстовый запрос сам по себе создаёт техническое ограничение. Факты о флагах и доступности проверены 19 сентября 2026 года по официальной документации GitHub; динамические тарифы и неподтверждённые лимиты здесь не приводятся.

Задача и граница применимости

Сценарий применим к установленному и авторизованному GitHub Copilot CLI в доверенном тестовом репозитории. Основная команда: copilot --allow-url='docs.github.com' --deny-url='example.org'. Сначала выберите маленький тестовый проект, на котором можно проверить и успешный путь, и отказ. Если полномочий агента недостаточно, это безопасный сигнал уточнить конфигурацию, а не причина сразу включить все разрешения.

Важно различать четыре уровня: выбор доступных модели tools, разрешение tool на действие, доступ к файлам и сетевую политику ОС. Один флаг управляет лишь тем уровнем, который ему назначен в документации. Инструкция на естественном языке направляет поведение, но не заменяет реальное правило доступа. Поэтому результат оценивают по фактическим вызовам и артефактам, а не по фразе агента «я не буду».

Официальные источники и дата проверки

В справочнике команд GitHub Copilot CLI указаны синтаксис основных параметров, список имён tools и правила шаблонов разрешений. Руководство по разрешениям различает --available-tools/--excluded-tools и --allow-tool/--deny-tool, объясняет сохранённые разрешения и приоритет deny. Для запуска с -p, -s и --no-ask-user используется официальное руководство по программному запуску. Эти первоисточники просмотрены 19 сентября 2026 года. Не переносите без проверки параметры между разными CLI: одинаковое слово «agent» не означает одинаковую модель прав.

Документация отдельно предупреждает, что изменение или чтение файлов, shell и сетевые обращения могут требовать согласия. Параметры запуска относятся к текущей сессии, тогда как часть разрешений, выданных через интерактивное подтверждение, может сохраняться в конфигурации. Если тест даёт неожиданный результат, сначала проверьте эти сохранённые настройки и конкретный рабочий каталог.

Подготовка тестового стенда

Выберите доверенный домен и отдельный адрес для негативной проверки. Не помещайте API-ключи, персональные идентификаторы и токены в URL: строка команды может попадать в историю терминала. Отличайте разрешение URL от разрешения запуска shell: сетевой инструмент или shell может иметь иные разрешения, поэтому отдельно пересмотрите все включённые tools. В руководстве GitHub CLI флаги --allow-url и --deny-url принимают конкретные URL либо домены; deny-url имеет приоритет над allow-url. Не делайте выводов о схеме wildcard сверх документированного поведения.

Запишите исходное состояние проекта: текущий каталог через pwd, версию CLI через copilot version, git status --short и наличие нужных входных файлов. Не вставляйте реальный секрет в тестовый prompt, публикацию или screenshot. Разделяйте код процесса, код завершения Copilot и утверждения модели: успешный exit code не доказывает правильность итогового текста, а отказ в разрешении не обязательно означает ошибку конфигурации.

Пошаговое выполнение

  1. Сначала задайте проверяемое задание: прочитать раздел официальной документации GitHub и составить список подтверждённых флагов без изменения файлов.

  2. Запустите команду с allow-url для docs.github.com и deny-url для example.org. Если нужен дополнительный URL, передавайте значения согласно документированному формату quoted comma-separated list.

  3. Попросите Copilot открыть только docs.github.com; проверьте, что ответ содержит настоящий заголовок и ссылку на страницу.

  4. Затем попросите открыть example.org. Проверьте запрет в журнале разрешений и отсутствие извлечённого содержимого, а не только словесное обещание модели.

После каждого прогона сравните git status --short с исходным состоянием. Если передан конкретный путь или имя инструмента, проверьте его посимвольно; похожее имя способно расширить либо сузить правило. Для команд с shell-скобками заключайте всё значение опции в одинарные кавычки. На Windows используйте правила кавычек своей оболочки и проверяйте, что CLI получает значение целиком.

Готовый шаблон для копирования

Команда для контролируемой проверки; замените указанные тестовые пути, если пример использует файлы, и сначала прочитайте смысл каждого аргумента:

copilot --allow-url='docs.github.com' --deny-url='example.org'

Проверка результата не должна состоять из повторения вывода модели. Если команда читает проект, сопоставьте указанные функции с файлами. Если ограничивает действие, попытайтесь выполнить запрещённый шаг только на учебном стенде и убедитесь, что не возникло нежелательных изменений. Не проверяйте запрет фактической публикацией пакета, отправкой кода или раскрытием секрета.

Реалистичный вход и ожидаемый результат

Вход: Инженер аудирует флаги CLI по docs.github.com; сайт example.org используется как контролируемый запрещённый адрес и не должен открываться агентом.

Ожидаемый результат: Обращение к официальной документации проходит по указанному allow-url. Доступ к example.org отклоняется правилом deny-url даже если в другой конфигурации есть разрешение. Сводка ссылается только на реально прочитанную страницу.

Это критерий приемки, а не выдуманный лог запуска. В вашей среде модель может сформулировать ответ иначе, а организационная политика — отклонить действие. Считайте тест успешным только при совпадении наблюдаемого поведения с указанной границей и при наличии проверяемых исходных данных. Если нет доступа к выбранной модели, не подменяйте её незаметно: отметьте условие и повторите на совместимой конфигурации.

Положительный и отрицательный тест

Позитивный тест — открыть заранее известную страницу GitHub Docs и попросить назвать её заголовок. Негативный — запросить страницу example.org и убедиться, что инструмент не вернул тело. Если модель просто сообщает об успехе без следа вызова, тест не пройден. При других разрешённых сетевых инструментах проверяйте их отдельно; URL-параметры не являются заменой сетевой изоляции контейнера или firewall.

При спорном результате сохраните только обезличенный журнал разрешений и минимальные воспроизводимые входные данные. Если задачу выполнял другой tool, явно укажите это в отчёте: правило для одного инструмента не обязательно распространяется на альтернативный. Такой негативный тест особенно полезен перед тем, как переносить пример в CI или командную практику.

Ошибки, отладка и ограничения

Не объединяйте allow-all-urls с идеей строгого списка доменов: это противоположные режимы. Не считайте инструкцию в prompt «не ходи на другие сайты» техническим запретом. Не записывайте чувствительные строки в URL. Передача только домена не задаёт автоматически, какие страницы можно цитировать как источник: факт из страницы всё равно нужно проверять и ссылаться на конкретный документ.

Чтобы локализовать причину, сделайте второй прогон на пустом тестовом репозитории с одним изменяемым параметром. Не меняйте одновременно prompt, модель, каталог и разрешения: тогда нельзя понять, почему исчезла ошибка. Если модель сообщает об отсутствии ресурса, сначала проверьте путь и доступ на уровне процесса, затем разрешения CLI, и лишь после этого формулировку задачи.

Чек-лист финальной проверки

  • Точный синтаксис параметров сверен со справочником GitHub на 19 сентября 2026 года.
  • Входной файл, путь или домен соответствует тестовой задаче.
  • Исходное состояние репозитория записано до запуска.
  • Положительный тест показал ожидаемую разрешённую операцию.
  • Отрицательный тест не вызвал запрещённого действия.
  • Итоговый ответ сверён с фактическими файлами или журналом tools.
  • Секреты, реальные токены и частные пути не попали в отчёт.
  • Изменения в git просмотрены и объяснены.

FAQ

Какой флаг важнее?

Официальная таблица прямо указывает приоритет --deny-url над --allow-url. Негативный тест подтвердит настройку в конкретной сессии.

Можно ли указать несколько адресов?

Да, справка разрешает quoted comma-separated list для URL-значений. Перед запуском проверьте кавычки shell.

Почему не хватает текста запроса?

Модель может не исполнить пожелание как границу доступа; флаги применяются механизмом разрешений CLI и потому проверяются отдельно.

Флаги постоянные?

Параметры командной строки относятся к текущему запуску. Сохранённые одобрения URL в settings.json — иной механизм, который следует аудировать отдельно.

Итог

Для задачи «дать агенту доступ к официальной документации проекта без автоматического разрешения для другого домена» важна не только команда copilot --allow-url='docs.github.com' --deny-url='example.org', но и доказательство её действия на маленьком тестовом случае. Сохраните исходное состояние, выполните разрешённый и запрещённый сценарии, затем перенесите только подтверждённый вариант в рабочий проект. При смене версии CLI перепроверьте первоисточник и повторите оба теста.

Читайте также

Комментарии

Пока тихо. Скажите первое слово