Skip to main content

회사 프록시를 사용하여 GitHub.com 대한 액세스 제한

사용자가 개인 계정으로 GitHub.com에 액세스하지 못하도록 프록시를 구성합니다.

누가 이 기능을 사용할 수 있나요?

Enterprises with Enterprise Managed Users on GitHub.com

Note

GitHub.com에 대한 액세스를 제한하기 위한 헤더는 현재 공개 미리 보기 버전이며 변경될 수 있습니다.

Enterprise Managed Users를 사용하는 경우 네트워크의 사용자가 엔터프라이즈 구성원이 아닌 계정으로 GitHub.com에 인증하지 못하도록 차단할 수 있습니다. 이렇게 하면 회사 데이터가 대중에게 노출될 위험을 줄일 수 있습니다.

이 제한을 적용하려면 GitHub.com에 대한 사용자의 웹 및 API 요청에 헤더를 삽입하도록 네트워크 프록시 또는 방화벽을 구성합니다.

이 기능을 사용하려면 외부 방화벽 또는 프록시가 필요합니다. GitHub 지원에서는 이와 같은 외부 도구에 대한 설정 또는 문제 해결을 지원할 수 없습니다. 지원 범위에 대한 자세한 내용은 GitHub 지원 정보을(를) 참조하세요.

액세스 권한 요청

이 기능은 기본적으로 사용하도록 설정되어 있지 않으며 현재 청구서로 결제하는 엔터프라이즈에서만 사용할 수 있습니다.

  • 청구서로 결제하는 경우 액세스 권한을 요청하려면 GitHub 영업 팀의 계정 관리자에게 문의하세요.
  • 신용 카드 또는 PayPal 통해 결제하는 경우 현재 이 기능을 사용할 수 없습니다.

필수 조건

  • GitHub.com에서 관리형 사용자가 있는 엔터프라이즈를 사용해야 합니다.
    • 모든 사용자의 사용자 이름에 엔터프라이즈의 짧은 코드가 추가되면 관리형 사용자가 있는 엔터프라이즈를 사용하고 있음을 알 수 있습니다.
    • 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud를 사용하는 경우 엔터프라이즈는 GHE.com의 전용 하위 도메인에 있으므로 엔터프라이즈 리소스에 대한 트래픽을 구분하기 위해 헤더가 필요하지는 않습니다.
  • 제한을 적용하려면 모든 트래픽이 프록시 또는 방화벽을 통과해야 합니다. 프록시 또는 방화벽은 다음 요건을 충족해야 합니다.
    • 트래픽을 가로채고 수정할 수 있는 기능을 갖춰야 하며, 일반적으로 "중단 및 검사" 프록시라고 합니다.
    • 임의의 헤더 삽입을 지원해야 합니다.
  • GitHub의 계정 팀으로부터 이 기능에 대한 액세스 권한을 부여받아야 합니다.

헤더 찾기

제한을 적용하려면 지원되는 특정 엔드포인트로 이동하는 모든 트래픽에 헤더를 삽입합니다. 헤더 형식은 다음과 같습니다.

sec-GitHub-allowed-enterprise: ENTERPRISE-ID

엔터프라이즈 소유자는 엔터프라이즈의 헤더에 사용할 올바른 엔터프라이즈 ID를 식별할 수 있습니다.

  1. GitHub의 오른쪽 위 모서리에서 프로필 사진을 클릭한 다음엔터프라이즈를 클릭합니다.
  2. 페이지 왼쪽의 엔터프라이즈 계정 사이드바에서 설정을 클릭합니다.
  3. 설정 아래에서, 인증 보안을 클릭합니다.
  4. "Enterprise access restrictions" 섹션에서 엔터프라이즈의 헤더를 찾습니다. 이 섹션은 해당하는 기능이 활성화된 엔터프라이즈에서만 볼 수 있습니다.

헤더 사용

최상의 결과를 위해 다음 지원되는 엔드포인트에 대한 모든 트래픽에 헤더를 삽입하도록 프록시를 구성합니다.

엔드포인트목적
github.com/*GitHub.com에 대한 웹 트래픽
api.github.com/*REST 및 GraphQL API 요청
*.githubcopilot.com특정 GitHub Copilot 기능에 필요한 트래픽

이렇게 하면 네트워크의 사용자가 엔터프라이즈 소유자가 아닌 사용자 계정으로 이러한 엔드포인트에 액세스하는 것을 방지할 수 있습니다. 이 기능과 함께 IP 허용 목록을 설정하여 네트워크 외부의 트래픽을 차단할 수 있습니다. IP 허용 목록을 사용하여 엔터프라이즈에 대한 네트워크 트래픽 제한을(를) 참조하세요.

Note

지원 티켓을 만들려면 github.com/login에 대한 액세스 권한이 필요합니다. 지원 자격이 있는 사용자가 도움을 요청할 수 있도록 하려면 이러한 사용자를 제한에서 제외할 수 있습니다.

특정 사용자에 대한 제한 해제

개인 계정을 사용하여 오픈 소스 리소스에 기여해야 하거나 문제가 발생할 경우 지원 티켓을 만들어야 하는 특정 사용자에 대한 제한을 해제할 수 있습니다. 이를 처리하려면 제한하려는 사용자에 대해서만 헤더를 삽입하도록 네트워크를 구성해야 합니다.

표시되는 옵션은 다음과 같습니다.

  • 네트워크 분리: 헤더를 삽입하는 "작업" 네트워크와 그렇지 않은 "오픈 소스" 네트워크를 만듭니다. "오픈 소스" 네트워크에 대한 액세스를 필요한 사용자로 제한합니다.
  • 디바이스 그룹화: 프록시 또는 방화벽이 인증된 경우 헤더가 필요하지 않은 사용자 그룹을 수집하고 삽입에서 선택적으로 제외할 수 있습니다.

지원되지 않는 기능

이 제한은 엔터프라이즈 헤더를 추가하는 프록시를 통해 전송되는 요청에만 적용되므로 특정 GitHub 기능에서는 사용자가 개인 계정에 액세스하거나 사용하지 못하도록 차단하는 제한을 지원하지 않습니다. 네트워크에서 사용자가 이러한 기능에 액세스하지 못하도록 차단하려면 아래에 설명된 변경 내용을 적용해야 합니다.

기능연결된 엔드포인트주의
GitHub Pagesgithub.io일반적으로 데이터를 허용할 수 없는 사용자 생성 콘텐츠입니다. 액세스를 제한하지 않을 수 있습니다.
GitHub Codespacesgithub.dev액세스를 제한하려면 엔드포인트를 완전히 차단합니다.
SSH 액세스GitHub.com의 포트 22액세스를 제한하려면 엔드포인트를 완전히 차단합니다.
GitHub에서 호스트된 실행기다양특정 라우팅을 적용하려면 Azure 프라이빗 네트워킹을 사용합니다. 엔터프라이즈의 GitHub 호스트형 실행기에 대한 Azure 개인 네트워킹 정보을(를) 참조하세요.

제한이 필요하지 않은 엔드포인트

다음 엔드포인트는 데이터를 제공하기만 하고 허용하지 않으므로 제한을 지원하거나 필요로 하지 않습니다.

  • *.githubusercontent.com
  • *.githubassets.com
  • GitHub.com의 Websocket 트래픽

제한은 어떻게 작동하나요?

엔터프라이즈 헤더를 포함하는 트래픽의 경우 사용자가 엔터프라이즈의 구성원이 아닌 사용자 계정(또는 사용자 계정과 연결된 토큰)을 사용하여 웹, Git 또는 API를 통해 GitHub.com에 액세스하려고 할 때 다음이 수행됩니다.

  • 사용자에게 403 상태 코드가 포함된 오류 메시지가 표시됩니다. 차단된 사용자에게 표시되는 오류를 참조하세요.
  • business.proxy_security_header_unsatisfied 이벤트가 엔터프라이즈 감사 로그에 기록됩니다. 이러한 로그 이벤트에는 개인 정보 보호 이유로 인해 actor 필드가 없지만 활성화된 경우 actor_ip 필드가 있습니다(엔터프라이즈의 감사 로그에 IP 주소 표시 참조). 이러한 이벤트를 더 자세히 조사하려면 사용자 환경에서 프록시 로그를 검토하면 됩니다.

다음 섹션에서는 사용자의 웹 활동 및 API 요청에 적용되는 예상 동작에 대한 세부 정보를 제공합니다.

웹 작업

GitHub.com 사용자 인터페이스의 활동의 경우 헤더는 사용자가 로그인할 수 있는 계정을 제한합니다.

네트워크에 있는 동안 사용자는 다음을 수행합니다.

  • 엔터프라이즈의 관리형 사용자 계정에 로그인할 있습니다.
  • 엔터프라이즈 외부의 계정에 로그인할 수 없습니다.
  • 계정 전환기를 사용하여 엔터프라이즈 외부의 계정으로 전환할 수 없습니다.

사용자가 이미 엔터프라이즈 외부 계정에 로그인한 경우(예: 네트워크 외부에서 로그인한 경우) 사용자가 자신의 디바이스를 네트워크에 가져오면 오류가 발생하며 엔터프라이즈 소유 계정으로 로그인할 때까지 GitHub.com에 액세스할 수 없습니다.

Git 작업

프록시가 HTTP(S) 요청에 헤더를 삽입하도록 구성된 경우, 네트워크 사용자는 엔터프라이즈의 구성원이 아닌 한 HTTP(S)를 통해 GitHub.com에 인증이 차단됩니다. 인증되지 않은 익명의 사용자에 대한 퍼블릭 읽기 요청은 차단되지 않습니다.

엔터프라이즈 헤더를 사용하여 SSH를 통한 Git 작업을 제한할 수는 없습니다. 대신 SSH 요청에 사용하는 포트를 완전히 차단하도록 선택할 수 있습니다. 지원되지 않는 기능을 참조하세요.

API 요청

GitHub CLI를 통한 요청을 포함하여 api.github.com에 대한 REST 및 GraphQL API 트래픽의 경우 헤더는 사용자가 네트워크에 연결되어 있는 동안 액세스 토큰의 사용을 제한합니다.

시나리오결과영향을 받는 토큰 형식
사용자는 엔터프라이즈가 소유한 계정과 연결된 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_
네트워크에 연결되어 있는 동안 애플리케이션은 엔터프라이즈 외부의 조직에 대한 설치 토큰(사용자 ID 없이 앱 ID만 있는 토큰)을 가져오려고 시도합니다.토큰이 작동하지 않습니다.ghs_

차단된 사용자에게 표시되는 오류

제한이 의도한 대로 작동하면 오류가 사용자에게 표시됩니다. 다음과 같은 상황에서 오류가 발생합니다.

  • 웹 활동: 사용자가 로그인하거나 기존 부실 세션을 사용하지 못하도록 차단된 경우
  • API 작업: 사용자가 엔터프라이즈 외부의 사용자와 연결된 토큰을 사용하려고 하는 경우
  • 설치 토큰: 애플리케이션이 설치 토큰을 사용하여 엔터프라이즈 외부의 조직 또는 사용자 계정에 액세스하려고 시도하는 경우 설치의 경우 쓰기 요청만 차단됩니다. 읽기 요청은 엔터프라이즈 외부의 리소스에 대해 차단되지 않습니다. 설치 토큰에 대한 자세한 내용은 GitHub 앱 설치로 인증을(를) 참조하세요.
시나리오오류 코드메시지
웹 작업403네트워크 관리자가 ENTERPRISE 엔터프라이즈를 제외한 GitHub에 대한 액세스를 차단했습니다. GitHub에 액세스하려면 _SHORTCODE 계정으로 로그인하세요.
API 작업403네트워크 관리자가 ENTERPRISE 엔터프라이즈를 제외한 GitHub에 대한 액세스를 차단했습니다. _SHORTCODE 엔터프라이즈의 사용자용 토큰을 사용하여 GitHub에 액세스하세요.
설치 토큰403네트워크 관리자가 ENTERPRISE 엔터프라이즈를 제외한 GitHub에 대한 액세스를 차단했습니다. "SHORTCODE" 엔터프라이즈의 토큰만 GitHub에 액세스할 수 있습니다.

400 코드 오류는 구성의 오류를 나타냅니다. 문제 해결을 참조하세요.

로컬 테스트 예제

웹 디버깅 도구를 사용하여 로컬에서 네트워크 구성을 테스트할 수 있습니다. 이 섹션에서는 Fiddler를 사용하는 예제를 제공합니다. Fiddler 및 기타 외부 디버깅 도구는 GitHub 지원의 범위에 포함되지 않습니다.

다음 예제에서는 모든 요청에 실행할 몇 가지 FiddlerScript를 추가합니다.

  1. Fiddler를 설치합니다.

  2. HTTPS 트래픽의 암호를 해독하도록 Fiddler를 구성합니다. Fiddler 설명서를 참조하세요.

  3. Fiddler에서 "FiddlerScript" 탭으로 이동하고 OnBeforeRequest 함수에 다음 코드를 추가합니다. enterpriseId 변수를 사용자 고유의 엔터프라이즈 ID로 설정합니다.

    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. Save script를 클릭합니다.

이제 패킷 캡처가 활성화된 동안 지정된 각 도메인에 헤더가 삽입됩니다. 삽입을 사용하거나 사용하지 않도록 설정하려면 File > Capture Traffic을 클릭하여 패킷 캡처를 토글할 수 있습니다.

이 삽입 기능을 켜거나 꺼서 허용되지 않는 계정으로 로그인한 다음, 네트워크에 접속하거나 네트워크에 접속한 상태에서 허용되지 않은 계정으로 로그인하려는 상황을 시뮬레이션할 수 있습니다.

문제 해결

헤더 삽입이 예상대로 작동하지 않는 경우, 영향을 받는 엔드포인트를 사용하려고 할 때 400 오류 코드가 표시됩니다. 이는 기능이 예상대로 작동할 때 표시되는 403 오류(차단된 사용자에게 표시되는 오류 참조)와는 다릅니다.

일반적으로 400 오류는 다음과 같은 상황에서 발생합니다.

  • 헤더에 잘못된 슬러그 또는 엔터프라이즈 ID를 사용한 경우
  • 헤더에 둘 이상의 엔터프라이즈가 나열된 경우
  • 요청에는 여러 sec-GitHub-allowed-enterprise 헤더가 포함된 경우
시나리오오류 코드메시지
잘못된 슬러그 또는 ID400sec-GitHub-allowed-enterprise 헤더에 이름이 지정된 엔터프라이즈를 찾을 수 없습니다. 방화벽 또는 프록시 설정에 "enterprise slug"가 올바르게 입력되었는지 확인합니다. 이 오류가 지속되면 네트워크 관리자에게 문의하세요.
둘 이상의 엔터프라이즈400sec-GitHub-allowed-enterprise 헤더에는 하나의 엔터프라이즈만 사용할 수 있습니다. 단일 엔터프라이즈와 헤더만 제공되었는지 확인합니다. 그래도 문제가 계속되면 네트워크 관리자에게 문의하세요.
여러 헤더400둘 이상의 sec-GitHub-allowed-enterprise가 수신되었습니다. 단일 엔터프라이즈에만 액세스 권한이 부여되도록 하려면 방화벽 또는 프록시로 이 헤더를 덮어써야 합니다. 그래도 문제가 계속되면 네트워크 관리자에게 문의하세요.

추가 참고 자료