Skip to main content

Безопасность в GitHub Codespaces

Обзор архитектуры безопасности GitHub Codespaces с рекомендациями по обеспечению безопасности и минимизации рисков атак.

Общие сведения о безопасности пространств кода

В GitHub Codespaces по умолчанию используется улучшенная защита. Следовательно, необходимо убедиться в том, что ваши методы разработки программного обеспечения не приводят к риску снижения уровня безопасности вашего пространства кода.

В этом руководстве описывается, как GitHub Codespaces обеспечивает безопасность среды разработки и предоставляет некоторые рекомендации, которые помогут обеспечить безопасность по мере работы. Как и для любых других средств разработки, помните, что вы должны работать только с теми репозиториями, которые вы знаете и которым доверяете.

Изоляция среды

GitHub Codespaces отделяет пространства кода друг от друга, и каждое пространство кода использует собственную виртуальную машину и сеть.

Изолированные виртуальные машины

Каждое пространство кода размещается на собственной специально созданной виртуальной машине. Два пространства кода никогда не размещаются на одной виртуальной машине.

Каждый раз при перезапуске пространства кода оно развертывается на новой виртуальной машине с последними доступными обновлениями для системы безопасности.

Изолированная сеть

Каждое пространство кода имеет собственную изолированную виртуальную сеть. Используются брандмауэры для блокировки входящих подключений из Интернета и предотвращения обмена данными между пространствами кода во внутренних сетях. Пространства кода разрешены для исходящих подключений к Интернету.

Проверка подлинности

Можно подключиться к codespace с помощью веб-браузера или из Visual Studio Code. При подключении из VS Code вам будет предложено пройти проверку подлинности с помощью GitHub.

Каждый раз при создании или перезапуске пространства кода ему назначается новый маркер GitHub с автоматическим сроком действия. Срок действия позволяет работать в пространстве кода без повторной проверки подлинности в течение обычного рабочего дня, а также снижает вероятность того, что подключение останется открытым после того, как вы перестанете использовать пространство кода.

Область действия маркера зависит от имеющегося уровня доступа к репозиторию, в котором было создано пространство кода:

  • Если у вас есть доступ к репозиторию на запись: область действия маркера будет ограничена доступом к репозиторию на чтение и запись.
  • Если у вас есть только доступ на чтение к репозиторию: маркер будет разрешать только клонирование кода из исходного репозитория. Если сделать фиксацию в пространстве кода или отправить новую ветвь, GitHub Codespaces автоматически создает вилку репозитория или связывает пространство кода с существующим вилкой, если у вас уже есть один для вышестоящего репозитория. Маркер обновляется, чтобы иметь доступ на чтение и запись к вилке. Дополнительные сведения см. в разделе Использование системы управления версиями в codespace.
  • Если вы авторизовать пространство кода для доступа к другим репозиториям: маркер будет ограничен доступом на чтение или чтение или запись в исходный репозиторий, а также к любым другим репозиториям, к которым у вас есть авторизованный доступ. Дополнительные сведения см. в разделе Управление доступом к другим репозиториям в кодовом пространстве.

Подключения к пространству кода

Вы можете подключиться к пространству кода с помощью зашифрованного туннеля TLS, предоставляемого службой GitHub Codespaces. Подключаться к пространству кода может только создатель пространства кода. Подключения проходят проверку подлинности в GitHub.

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

перенаправление портов;

Если необходимо подключиться к службе (например, к веб-серверу разработки), работающей в пространстве кода, можно настроить перенаправление портов, чтобы сделать службу доступной через Интернет.

Владельцы организации могут сделать перенаправляемые порты общедоступными или доступными только внутри организации. Дополнительные сведения см. в разделе Ограничение видимости переадресованных портов.

Частные перенаправляемые порты: доступны через Интернет, но доступ к ним может получить только создатель пространства кода после прохождения проверки подлинности в GitHub.

Общедоступные перенаправляемые порты в вашей организации: доступны через Интернет, но доступ к ним могут получить только участники той же организации, в которой находится пространство кода, после прохождения проверки подлинности в GitHub.

Общедоступные перенаправляемые порты: доступны через Интернет, и доступ к ним может получить любой пользователь в Интернете. Для доступа к общедоступным перенаправляемым портам проверка подлинности не требуется.

Все перенаправляемые порты по умолчанию являются частными, что означает, что перед доступом к ним необходимо пройти проверку подлинности. Доступ к частным перенаправляемым портам пространства кода контролируется файлами cookie проверки подлинности со сроком действия 3 часа. По истечении срока действия файла cookie необходимо повторно пройти проверку подлинности.

При удалении и повторном добавлении порта или при перезапуске пространства кода общедоступный перенаправляемый порт по умолчанию снова станет частным.

На панели "Порты" можно настроить общий или частный доступ к портам, а также отключить перенаправление портов, если оно больше не требуется. Дополнительные сведения см. в разделе Переадресация портов в вашем codespace.

Рекомендации по обеспечению безопасности для пространств кода

Пространства кода по умолчанию имеют улучшенную защиту. Для поддержания этого уровня безопасности соблюдайте рекомендации по безопасности в ходе разработки:

  • Как и для любых других средств разработки, помните, что вы должны работать только с теми репозиториями, которые вы знаете и которым доверяете.
  • Перед добавлением новых зависимостей в пространство кода проверьте, насколько хорошо они обслуживаются, и выпускаются ли для них обновления системы безопасности, устраняющие все уязвимости системы безопасности, обнаруженные в коде.

Использование секретов среды разработки для доступа к конфиденциальной информации

Всегда используйте секреты среды разработки, если вы хотите использовать конфиденциальную информацию (например, маркеры доступа) в пространстве кода. К секретам можно обращаться как к переменным среды в пространстве кода, в том числе из терминала. Например, можно запустить терминал в пространстве кода и использовать echo $SECRET_NAME для просмотра значения секрета среды разработки.

Значения секретов копируются в переменные среды всякий раз, когда пространство возобновляется или создается, а также синхронизируется при их изменении.

Секреты среды разработки не копируются в среду, если у вас нет доступа на запись к репозиторию пространства кода.

Дополнительные сведения о секретах см. в следующих разделах:

Работа с вкладом и репозиториями других пользователей

При создании пространства кода из ветви запроса на вытягивание в вилке маркер в пространстве кода будет отличаться в зависимости от того, является ли репозиторий общедоступным или частным:

  • Для частного репозитория пространство кода получает доступ как к вилке, так и к родительскому репозиторию.
  • Для общедоступного репозитория пространство кода будет иметь доступ только к вилке и открытым запросам на вытягивание в родительском репозитории.

Кроме того, мы также защищаем вас в этих сценариях, поскольку не внедряем ни один из секретов codespace в среду. Дополнительные сведения см. в разделе Управление секретами конкретной учетной записи для GitHub Codespaces.

Note

Область маркера в пространстве кода может измениться, если создать пространство кода из вилки, на которое у вас есть только доступ на чтение, а затем зафиксировать или отправить новую ветвь в пространстве кода. В этой ситуации, как и в любом другом репозитории, GitHub Codespaces автоматически создает новый вилку или связывает пространство кода с существующим вилком, принадлежащим вашей учетной записи, и обновляет маркер, чтобы иметь доступ на чтение и запись к вновь связанному вилку. Дополнительные сведения см. в разделе Использование системы управления версиями в codespace.

Если GitHub Codespaces связывает пространство кода с существующим вилком, это уже существующий вилку может быть вилкой вилки, из которой вы создали пространство кода, или собственный вилку общего вышестоящего репозитория.

Дополнительные рекомендации

Существуют некоторые дополнительные рекомендации и риски, которые следует учитывать при использовании GitHub Codespaces.

Общие сведения о файле devcontainer.json репозитория

При создании codespace, если файл devcontainer.json найден для репозитория, он анализируется и используется для настройки codespace. Файл devcontainer.json может содержать мощные функции, такие как установка сторонних расширений и выполнение произвольного кода, предоставленного в postCreateCommand.

Дополнительные сведения см. в разделе Основные сведения о контейнерах разработки.

Предоставление доступа с помощью функций

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

Применение расширений

Любые дополнительные установленные расширения VS Code также могут привести к увеличению риска. Чтобы устранить этот риск, устанавливайте только те расширения, которым вы доверяете, и регулярно обновляйте их.

Использование синхронизации параметров

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

Если вы включили синхронизацию параметров в пользовательских предпочтениях и хотите разрешить изменения параметров для синхронизации с пространствами кода с другими экземплярами данных VS Code, рекомендуется добавить выбранный список доверенных репозиториев, а не доверять всем репозиториям. При создании пространств кода из доверенных репозиториев изменения, внесенные в параметры в пространствах кода, синхронизируются с кэшируемыми параметрами в облаке, из которых они могут передаваться на устройства. Дополнительные сведения об управлении синхронизацией параметров см. в разделе Персонализация GitHub Codespaces для вашей учетной записи.