Skip to main content

2단계: 대규모로 사용하도록 준비

이 단계에서는 개발자를 준비하고 리포지토리에 대한 데이터를 수집하여 팀이 준비되고 파일럿 프로그램에 필요한 모든 것을 갖출 수 있도록 하고 code scanning 및 secret scanning를 배포합니다.

Note

이 문서는 대규모 GitHub Advanced Security를 채택하는 시리즈의 일부입니다. 이 시리즈의 이전 문서는 1단계: 롤아웃 전략 및 목표 조정을(를) 참조하세요.

code scanning 사용 준비

Code scanning는 GitHub 리포지토리의 코드를 분석하여 보안 취약성 및 코딩 오류를 찾는 데 사용하는 기능입니다. 분석으로 식별되는 모든 문제는 리포지토리에 표시됩니다. 자세한 내용은 코드 검사 정보을(를) 참조하세요.

수백 개의 리포지토리에서 code scanning를 롤아웃하는 것은 어려울 수 있습니다. 특히 비효율적인 경우 그렇습니다. 다음 단계를 수행하면 롤아웃의 효율성과 성공을 보장할 수 있습니다. 준비의 일환으로 팀과 협력하고, 자동화를 사용하여 리포지토리에 대한 데이터를 수집하고, code scanning을(를) 사용하도록 설정합니다.

팀에서 code scanning 준비

먼저 팀은 code scanning 사용을 준비합니다. code scanning을(를) 사용하는 팀이 많을수록 수정 계획을 세우고 롤아웃 진행 상황을 모니터링해야 하는 데이터가 많아집니다. 이 단계에서는 API 활용 및 내부 사용 이벤트 실행에 집중합니다.

핵심 초점은 많은 팀이 code scanning를 사용할 수 있도록 준비하는 것입니다. 팀이 적절하게 수정하도록 할 수도 있지만 이 단계에서는 문제 해결보다 code scanning의 사용 및 사용 우선 순위를 지정하는 것이 좋습니다.

리포지토리에 대한 정보 수집

리포지토리에 사용되는 다양한 프로그래밍 언어에 대한 정보를 프로그래밍 방식으로 수집하고 해당 데이터를 사용하여 동일한 언어를 사용하는 모든 리포지토리에서 GitHub Enterprise Server의 GraphQL API를 사용하여 code scanning를 사용하도록 설정할 수 있습니다.

Note

이 문서에 설명된 GraphQL 쿼리를 수동으로 실행하지 않고 이 데이터를 수집하려면 공개적으로 사용할 수 있는 도구를 사용할 수 있습니다. 자세한 내용은 ghas-enablement tool 리포지토리를 참조하세요.

엔터프라이즈의 여러 조직에 속한 리포지토리에서 정보를 수집하려는 경우 아래 쿼리를 사용하여 조직의 이름을 가져온 다음 리포지토리 쿼리로 제공할 수 있습니다. OCTO-ENTERPRISE를 사용자의 엔터프라이즈 이름으로 바꿉니다.

query {
  enterprise(slug: "OCTO-ENTERPRISE") {
    organizations(first: 100) {
      totalCount
      nodes {
        name
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}

조직 수준에서 언어별로 리포지토리를 정렬하여 어떤 언어를 사용하는 리포지토리인지 식별할 수 있습니다. 아래에서 샘플 GraphQL 쿼리를 수정하여 OCTO-ORG를 조직 이름으로 바꿀 수 있습니다.

query {
  organization(login: "OCTO-ORG") {
    repositories(first: 100) {
      totalCount
      nodes {
        nameWithOwner
        languages(first: 100) {
          totalCount
          nodes {
            name
          }
        }
      }
      pageInfo {
        endCursor
        hasNextPage
      }
    }
  }
}

GraphQL 쿼리 실행에 대한 자세한 내용은 GraphQL을 사용하여 통화 구성을(를) 참조하세요.

그런 다음 GraphQL 쿼리의 데이터를 테이블과 같은 읽기 가능한 형식으로 변환합니다.

언어리포지토리 수리포지토리 이름
JavaScript(TypeScript)4212org/repo
org/repo
Python2012org/repo
org/repo
Go983org/repo
org/repo
Java412org/repo
org/repo
Swift111org/repo
org/repo
Kotlin82org/repo
org/repo
C12org/repo
org/repo

이 표에서 현재 GitHub Advanced Security에서 지원되지 않는 언어를 필터링할 수 있습니다.

여러 언어의 리포지토리가 있는 경우 아래 표와 같이 GraphQL 결과의 서식을 지정할 수 있습니다. 지원되지 않는 언어를 필터링하지만 지원되는 언어가 하나 이상 있는 모든 리포지토리는 유지합니다. 이러한 리포지토리에서 code scanning를 사용하도록 설정할 수 있으며 지원되는 모든 언어가 검사됩니다.

언어리포지토리 수리포지토리 이름
JavaScript/Python/Go16org/repo
org/repo
Rust/TypeScript/Python12org/repo
org/repo

어떤 리포지토리가 어떤 언어를 사용하는지 이해하면 3단계에서 파일럿 프로그램의 후보 리포지토리를 식별하는 데 도움이 되며, 5단계에서 한 번에 하나의 언어인 모든 리포지토리에서 code scanning를 사용하도록 준비합니다.

“어플라이언스에 대해 code scanning를 사용하도록 설정”

파일럿 프로그램을 진행하고 엔터프라이즈 전체에서 code scanning를 롤아웃하려면 먼저 어플라이언스에 대해 code scanning를 사용하도록 설정해야 합니다. 자세한 내용은 어플라이언스에 대한 코드 검사 구성을(를) 참조하세요.

secret scanning를 사용하도록 준비

Note

secret scanning을 사용하도록 설정한 리포지토리에서 비밀이 감지되면 GitHub은 리포지토리에 대한 보안 경고에 액세스할 수 있는 모든 사용자에게 경고합니다.

프로젝트에서 외부 서비스와 통신하는 경우 토큰 또는 프라이빗 키를 인증에 사용할 수 있습니다. 비밀을 리포지토리에 체크 인하면 리포지토리에 대한 읽기 액세스 권한이 있는 모든 사용자가 비밀을 사용하여 해당 권한으로 외부 서비스에 액세스할 수 있습니다. Secret scanning은(는) GitHub 리포지토리에 있는 모든 분기에서 전체 Git 기록을 검색하여 비밀을 확인하고 경고하거나 비밀이 포함된 푸시를 차단합니다. 자세한 내용은 비밀 검사 정보을(를) 참조하세요.

secret scanning를 사용하도록 설정할 때 고려 사항

GitHub Enterprise Server의 secret scanning 기능은 프로그래밍 언어 또는 리포지토리에 대한 특정 구성이 필요하지 않으므로 code scanning와(과) 약간 다르며, 전반적으로 시작에 필요한 구성이 적습니다. 즉, 조직 수준에서는 secret scanning을(를) 간편하게 사용하도록 설정할 수 있지만, 조직 수준에서 모두 사용을 클릭하고 모든 새 리포지토리에 대해 자동으로 secret scanning을(를) 사용하도록 설정하는 옵션을 선택하면 주의해야 할 몇 가지 다운스트림 효과가 있습니다.

라이선스 사용량

모든 리포지토리에서 secret scanning을(를) 사용하도록 설정하면 GitHub Advanced Security 라이선스의 사용이 최대화됩니다. 현재 커밋 주체를 지원하도록 모든 리포지토리에 대한 라이선스가 충분한 경우에는 괜찮습니다. 앞으로 몇 달 동안 활성 개발자 수가 증가할 가능성이 있는 경우 라이선스 제한을 초과하면 새로 만든 리포지토리에서 GitHub Advanced Security를 사용할 수 없습니다.

검색된 비밀의 초기 대용량

대규모 조직에서 secret scanning를 사용하도록 설정하는 경우 많은 수의 비밀을 찾을 수 있도록 준비해야 합니다. 때때로 이것은 조직에 충격으로 다가와서 경종을 울립니다. 모든 리포지토리에서 secret scanning를 한 번에 켜려면 조직 전체에서 여러 경고에 응답하는 방법을 계획합니다.

개별 리포지토리에 대해 Secret scanning을 사용하도록 설정할 수 있습니다. 자세한 내용은 리포지토리에 대한 비밀 검색 사용을(를) 참조하세요. 위에서 설명한 대로 조직의 모든 리포지토리에 대해 Secret scanning을 사용하도록 설정할 수도 있습니다. 모든 리포지토리를 사용하도록 설정하는 방법에 대한 자세한 내용은 조직의 보안 및 분석 설정 관리을(를) 참조하세요.

secret scanning에 대한 사용자 지정 패턴

Secret scanning는 많은 수의 기본 패턴을 검색하지만 인프라에 고유한 비밀 형식과 같은 사용자 지정 패턴을 검색하도록 구성하거나 GitHub Enterprise Server의 secret scanning가 현재 검색하지 않는 통합자에서 사용할 수 있습니다. 파트너 패턴에 지원되는 비밀에 대한 자세한 내용은 지원되는 비밀 검사 패턴을(를) 참조하세요.

리포지토리를 감사하고 보안 및 개발자 팀에 말할 때 나중에 secret scanning에 대한 사용자 지정 패턴을 구성하는 데 사용할 비밀 유형 목록을 작성합니다. 자세한 내용은 비밀 검사를 위한 사용자 지정 패턴 정의을(를) 참조하세요.

secret scanning에 대한 푸시 보호

조직 및 리포지토리에 대한 푸시 보호에서는 비밀이 코드베이스에 커밋되기 전에 지원되는 비밀에 대한 푸시를 확인하도록 secret scanning에 지시합니다. 지원되는 비밀에 대한 자세한 내용은 지원되는 비밀 검사 패턴을(를) 참조하세요.

푸시에서 비밀이 검색되면 해당 푸시가 차단됩니다. Secret scanning은 검색한 비밀을 나열하므로 작성자는 비밀을 검토하고 제거하거나 필요한 경우 해당 비밀을 푸시할 수 있습니다. Secret scanning은(는) 사용자 지정 패턴에 대한 푸시도 검사할 수 있습니다.

개발자는 비밀이 가양성인지, 테스트에 사용되는지 또는 나중에 수정될 예정인지를 보고하여 푸시 보호를 무시할 수 있습니다.

기여자가 비밀에 대한 푸시 보호 블록을 바이패스하는 경우 GitHub은(는) 다음을 수행합니다.

  • 리포지토리의 보안 탭에서 경고를 만듭니다.
  • 감사 로그에 바이패스 이벤트를 추가합니다.
  • 비밀에 대한 링크와 허용된 이유를 포함하는 메일 경고를 리포지토리를 감시하는 조직 또는 개인 계정 소유자, 보안 관리자 및 리포지토리 관리자에게 보냅니다.

푸시 보호를 사용하도록 설정하기 전에 푸시 보호를 무시할 수 있는 조건에 대한 개발자 팀을 위한 참고 자료를 생성해야 하는지 여부를 고려합니다. 개발자가 차단된 비밀을 푸시하려고 할 때 표시되는 메시지에서 이 리소스에 대한 링크를 구성할 수 있습니다.

다음으로, 기여자가 푸시 보호를 무시하는 결과 생성되는 경고를 관리하고 모니터링하기 위한 다양한 옵션을 숙지합니다.

자세한 내용은 푸시 보호 정보을(를) 참조하세요.

Note

이 시리즈의 다음 문서는 3단계: 파일럿 프로그램을(를) 참조하세요.