Skip to main content

Ограничение доступа к GitHub.com с помощью корпоративного прокси-сервера

Настройте прокси-сервер, чтобы запретить пользователям доступ к данным GitHub.com с помощью личная учетная запись.

Кто может использовать эту функцию?

Enterprises with Enterprise Managed Users on GitHub.com

Note

Заголовок для ограничения доступа к GitHub.com в настоящее время находится в public preview и подлежит изменению. Хотя предварительные выпуски обычно не поддерживаются поддержкой GitHub (см . AUTOTITLE), эта функция поддерживается поддержкой GitHub в режиме public preview.

Если вы используете Enterprise Managed Users, вы можете заблокировать проверку подлинности пользователей в сети до GitHub.com с учетными записями, которые не являются членами вашей организации. Это помогает снизить риск предоставления данных вашей компании общественности.

Чтобы применить это ограничение, вы настроите сетевой прокси-сервер или брандмауэр для внедрения заголовка в веб-сайт и запросы API пользователей к GitHub.com.

Для этой функции требуется внешний брандмауэр или прокси-сервер. Служба поддержки GitHub не может помочь в настройке или устранении неполадок для внешних инструментов, таких как эти. Дополнительные сведения о области поддержки см. в разделе Сведения о поддержке GitHub.

Запрос доступа

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

Необходимые компоненты

  • Необходимо использовать корпоративный с управляемыми пользователями для GitHub.com.
    • Вы узнаете, что используете корпоративный с управляемыми пользователями, если все имена пользователей добавляются с коротким кодом вашего предприятия.
    • Если вы используете GitHub Enterprise Cloud с размещением данных, ваше предприятие находится в выделенном поддомене GHE.com, поэтому заголовок не требуется, чтобы различать трафик к ресурсам предприятия.
  • Чтобы применить ограничение, весь трафик должен проходить через прокси-сервер или брандмауэр. Прокси-сервер или брандмауэр должны:
    • Возможность перехвата и редактирования трафика, обычно называемого прокси-сервером "разрыв и проверка"
    • Поддержка произвольного внедрения заголовков
  • GitHub должен предоставить вам доступ к этой функции.

Поиск заголовка

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

sec-GitHub-allowed-enterprise: ENTERPRISE-ID

Владелец предприятия может определить правильный корпоративный идентификатор, используемый в заголовке для вашего предприятия.

  1. В правом верхнем углу GitHubщелкните фото профиля, а затем щелкните "Ваше предприятие".
  2. В левой части страницы на боковой панели учетной записи предприятия щелкните Параметры.
  3. В разделе Параметры щелкните "Безопасность проверки подлинности".
  4. В разделе "Ограничения доступа предприятия" найдите заголовок для вашего предприятия. Этот раздел отображается только для предприятий с включенным компонентом.

Использование заголовка

Для получения наилучших результатов настройте прокси-сервер для внедрения заголовка во весь трафик в следующие поддерживаемые конечные точки.

Конечная точкаХарактер использования
github.com/*Веб-трафик к GitHub.com
api.github.com/*Запросы API REST и GraphQL
*.githubcopilot.comТрафик, необходимый для определенных функций GitHub Copilot

Это позволит предотвратить доступ пользователей в сети к этим конечным точкам с учетными записями пользователей, которые не принадлежат вашей организации. Наряду с этой функцией можно заблокировать трафик за пределами сети, настроив список разрешений IP-адресов. См . раздел AUTOTITLE.

Note

github.com/login Для создания запросов в службу поддержки требуется доступ. Чтобы пользователи с правами на поддержку могли запрашивать справку, вы можете исключить этих пользователей из ограничения.

Отмена ограничения для определенных пользователей

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

Возможные варианты:

  • Разделение сети: создайте "рабочую" сеть, которая внедряет заголовок и сеть "открытый код", которая не поддерживается. Ограничить доступ к сети "открытый код" пользователям, которым он нужен.
  • Группирование устройств. Если прокси-сервер или брандмауэр проходит проверку подлинности, можно собрать группу пользователей, которым не нужен заголовок, и выборочно исключить их из внедрения.

Неподдерживаемые функции

Так как это ограничение применяется только к запросам, отправленным через прокси-сервер, который добавляет корпоративный заголовок, некоторые функции GitHub не поддерживают ограничение для блокировки доступа пользователей к личная учетная запись или их личная учетная запись. Чтобы запретить пользователям в сети доступ к этим функциям, необходимо внести изменения, описанные ниже.

ФункцияСвязанная конечная точкаПримечания.
GitHub Pagesgithub.ioОбычно это содержимое, созданное пользователем, которое не может принимать данные. Возможно, вы не хотите ограничить доступ.
GitHub Codespacesgithub.devЧтобы ограничить доступ, заблокируйте конечную точку полностью.
Доступ по протоколу SSHПорт 22 на GitHub.comЧтобы ограничить доступ, заблокируйте конечную точку полностью.
GitHub-размещенные средства выполненияVariousЧтобы применить определенную маршрутизацию, используйте частную сеть Azure. См . раздел AUTOTITLE.

Конечные точки, для которых не требуется ограничение

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

  • *.githubusercontent.com
  • *.githubassets.com
  • Трафик Websocket на GitHub.com

Как работает ограничение?

Для трафика, который включает корпоративный заголовок, когда пользователь пытается получить доступ к GitHub.com через Интернет, Git или API с помощью учетной записи пользователя (или маркера, связанного с учетной записью пользователя), который не является членом предприятия:

  • Пользователь увидит сообщение об ошибке 403 с кодом состояния. См . сведения об ошибках, отображаемых для заблокированных пользователей.
  • business.proxy_security_header_unsatisfied Событие будет зарегистрировано в журналах аудита предприятия. Эти события журнала не actor будут иметь поля из-за причин конфиденциальности, но actor_ip будет иметь поле, если оно включено (см . AUTOTITLE). Для дальнейшего изучения этих событий можно просмотреть журналы прокси-сервера в вашей среде.

В следующих разделах содержатся сведения о ожидаемом поведении, которое применяется к веб-активности пользователей и запросам API.

Веб-действия

Для действий в пользовательском интерфейсе GitHub.com заголовок ограничивает учетные записи, к которым пользователь может войти.

В сети пользователь:

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

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

Действие Git

Если прокси-сервер настроен для внедрения заголовка в запросы HTTP(S), пользователи в сети будут заблокированы от проверки подлинности до GitHub.com по протоколу HTTP(S), если они не являются членом вашей организации. Общедоступные запросы на чтение не блокируются для анонимных пользователей без проверки подлинности.

Нельзя использовать заголовок предприятия для ограничения действия Git по протоколу SSH. Вместо этого можно полностью заблокировать порт для запросов SSH. См. неподдерживаемые функции.

Запросы API

Для трафика REST и GraphQL API для api.github.com, включая запросы через GitHub CLI, заголовок ограничивает использование маркеров доступа во время подключения пользователей к сети.

СценарийРезультатЗатронутые типы маркеров
Пользователь использует personal access token, связанный с учетной записью, принадлежащей вашей организации.personal access token работает должным образом в запросах API.ghp_ и github_pat_.
При подключении к сети пользователь пытается использовать personal access token, связанного с пользователем за пределами вашего предприятия.Запросы с помощью маркера блокируются.ghp_ и github_pat_.
При использовании учетной записи за пределами вашей организации пользователь входит в приложение OAuth, которое выполняется на своем устройстве. Затем пользователь переносит свое устройство в сеть.Маркеры OAuth из приложения перестают работать.gho_
При использовании учетной записи за пределами вашей организации пользователь входит в GitHub App, который выполняется на своем устройстве. Затем пользователь переносит свое устройство в сеть.Маркеры из приложения перестают работать.ghu_
При подключении к сети приложение пытается обновить сеанс для пользователя за пределами предприятия с помощью маркера обновления GitHub App.Обновление завершается ошибкой.ghr_
При подключении к сети приложение пытается получить маркер установки (маркер без удостоверения пользователя, только удостоверение приложения) для организации за пределами вашей организации.Маркер не будет работать.ghs_

Ошибки, отображаемые для заблокированных пользователей

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

  • Веб-действие. Если пользователь заблокирован для входа или использования существующего устаревшего сеанса.
  • Действие API: когда пользователь пытается использовать маркер, связанный с пользователем за пределами предприятия.
  • Маркер установки: когда приложение пытается использовать маркер установки для доступа к учетной записи организации или пользователя за пределами предприятия. Для установок блокируются только запросы на запись. Запросы на чтение не блокируются для ресурсов за пределами предприятия. Дополнительные сведения о маркерах установки см. в разделе Проверка подлинности в качестве установки приложения GitHub.
СценарийКод ошибкиСообщение
Веб-действия403Администратор сети заблокирован доступ к GitHub за исключением ENTERPRISE enterprise. Войдите с _SHORTCODE учетной записью, чтобы получить доступ к GitHub.
Действие API403Администратор сети заблокирован доступ к GitHub за исключением ENTERPRISE enterprise. Используйте маркер для пользователя из _SHORTCODE предприятия для доступа к GitHub.
Маркер установки403Администратор сети заблокирован доступ к GitHub за исключением ENTERPRISE enterprise. Только маркеры для "SHORTCODE" предприятия могут получить доступ к GitHub.

Ошибки с 400 кодом указывают на ошибку в конфигурации. См. раздел Устранение неполадок.

Пример локального тестирования

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

В следующем примере вы добавите некоторые fiddlerScript для выполнения по каждому запросу.

  1. Установите Fiddler.

  2. Настройте Fiddler для расшифровки трафика HTTPS. См. документацию по Fiddler.

  3. В Fiddler перейдите на вкладку "FiddlerScript" и добавьте следующий код в функцию OnBeforeRequest . Задайте для переменной собственный корпоративный enterpriseId идентификатор.

    JavaScript
    // Your enterprise id
    var enterpriseId: String = "YOUR-ID";
    
     //Inject on the web UI
     if (oSession.HostnameIs("github.com")){
         oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId)
         oSession["ui-color"] = "green";
     }
    
     // Inject on API calls
     if (oSession.HostnameIs("api.github.com")){
         oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId)
         oSession["ui-color"] = "blue";
         }
    
     // Inject on Copilot API calls
     if (oSession.HostnameIs("githubcopilot.com")){
         oSession.oRequest.headers.Add("sec-GitHub-allowed-enterprise",enterpriseId)
         oSession["ui-color"] = "yellow";
     }
    
  4. Нажмите кнопку " Сохранить сценарий".

Теперь заголовок будет внедрен для каждого из указанных доменов, пока запись пакетов активна. Чтобы включить или отключить внедрение, можно переключать запись пакетов, щелкнув трафик записи файлов** > **.

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

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

Если внедрение заголовка не работает должным образом, при попытке использовать затронутые конечные точки будут отображаться ошибки с 400 кодом. Они отличаются от 403 ошибок, отображаемых при работе функции должным образом (см. сведения об ошибках, отображаемых для заблокированных пользователей).

Как правило, 400 ошибки возникают в следующих ситуациях.

  • В заголовке используется недопустимый идентификатор slug или корпоративный идентификатор.
  • Заголовок содержит несколько предприятий.
  • Запрос содержит несколько sec-GitHub-allowed-enterprise заголовков.
СценарийКод ошибкиСообщение
Недопустимый слизь или идентификатор400Не удается найти предприятие с именем в заголовке sec-GitHub-allowed-enterprise . Убедитесь, что "корпоративная слизь" введена правильно в параметрах брандмауэра или прокси-сервера. Обратитесь к администратору сети, если эта ошибка сохраняется.
Несколько предприятий400С заголовком sec-GitHub-allowed-enterprise можно использовать только одно предприятие. Убедитесь, что предоставлено только одно предприятие и заголовок. Если эта проблема не исчезнет, обратитесь к администратору сети.
Несколько заголовков400Было получено несколько sec-GitHub-allowed-enterprise . Этот заголовок должен быть перезаписан брандмауэром или прокси-сервером, чтобы обеспечить доступ только для одного предприятия. Если эта проблема сохранится, обратитесь к администратору сети.

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