CodeQL팩과 작업하기 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud
기본적으로 CodeQL CLI에서 CodeQL 팩을 다운로드하고 Container registry에 팩을 게시하도록 예상합니다 GitHub.com. 그러나 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud의 Container registry에서 qlconfig.yml 파일을 만들어 CLI에 각 팩에 사용할 Container registry을 알려줌으로써 CodeQL 팩을 함께 사용할 수도 있습니다.
기본 설정 텍스트 편집기를 사용하여 linux/MacOS 또는 Windows ~/.codeql/qlconfig.yml``%HOMEPATH%\.codeql\qlconfig.yml 파일을 만들고 하나 이상의 패키지 이름 패턴에 사용할 레지스트리를 지정하는 항목을 추가합니다.
예를 들어, 다음 qlconfig.yml 파일은 codeql/\* 또는 other-org/* 조직과 일치하는 팩을 제외하고, 모든 팩을 Container registry의 SUBDOMAIN.ghe.com에 연결합니다. codeql/\* 또는 GitHub.com에서 Container registry와 연결된 팩은 특정합니다.
registries:
- packages:
- 'codeql/*'
- 'other-org/*'
# Container registry on GitHub.com
url: https://ghcr.io/v2/
- packages: '*'
# Container registry hosted at `SUBDOMAIN.ghe.com`
url: https://containers.SUBDOMAIN.ghe.com
지정된 패키지 이름에 대해 사용할 레지스트리를 결정하기 위해, CodeQL CLI는 packages 목록에서 해당 패키지 이름과 일치하는 속성이 있는 첫 번째 항목 registries을(를) 찾습니다.
즉, 일반적으로 가장 구체적인 패키지 이름 패턴을 먼저 정의하는 것이 좋습니다.
packages 속성은 단일 패키지 이름, GLOB 패턴 또는 패키지 이름 및 GLOB 패턴의 YAML 목록일 수 있습니다.
`registries` 파일 내에 `codeql-workspace.yml` 목록을 배치할 수도 있습니다. 이렇게 하면 특정 작업 영역 내에서 사용할 레지스트리를 정의하여 작업 영역의 다른 CodeQL 사용자 간에 공유할 수 있습니다. 이 `registries`의 `codeql-workspace.yml` 목록이 병합되어 전역 `qlconfig.yml`의 목록보다 우선적으로 적용됩니다.
`codeql-workspace.yml`에 대한 자세한 내용은 [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces#about-codeql-workspaces)을(를) 참조하세요.
이제 codeql pack publish, codeql pack download, codeql database analyze를 사용하여 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud에서 팩을 관리할 수 있습니다.
인증 중 GitHubContainer registries
적절한 인증을 통해 팩을 게시하고 프라이빗 팩을 다운로드할 수 있습니다 GitHubContainer registry.
GitHub.com에서 Container registries에 인증하기
Container registry에 두 가지 방법으로 인증할 수 있습니다.
1.
--github-auth-stdin 옵션을 CodeQL CLI에 전달하고 나서, GitHub Apps 토큰이나 personal access token를 표준 입력을 통해 공급합니다.
- 환경 변수
GITHUB_TOKEN를 GitHub Apps 토큰 또는 personal access token.로 설정합니다.
데이터 보존 기능을 갖춘 GitHub Enterprise Cloud에서 Container registries에 인증하는 중
마찬가지로, 데이터 보존 기능을 갖춘 GitHub Enterprise Cloud에서 Container registry에 인증할 수 있으며, 또한, 다수의 레지스트리에 동시에 인증할 수 있는 두 가지 방법이 있습니다 (예: 여러 레지스트리에서 private 팩을 다운로드하거나 실행하기 위해).
-
`--registries-auth-stdin` 옵션을 CodeQL CLI에 전달한 후, 표준 입력을 통해 레지스트리 인증 문자열을 입력하십시오. -
`CODEQL_REGISTRIES_AUTH` 환경 변수를 레지스트리 인증 문자열로 설정합니다.
레지스트리 인증 문자열은 쉼표로 구분된 <registry-url>=<token> 쌍들의 목록입니다. 여기서 registry-url은 Container registry URL (예: https://containers.SUBDOMAIN.ghe.com)이고, token은 해당 Container registry에 대한 GitHub Apps 토큰 또는 personal access token입니다.
이렇게 하면 각 토큰이 지정한 Container registry에게만 전달됩니다.
예를 들어 다음 레지스트리 인증 문자열은 다음과 같이 인증해야 한다고 CodeQL CLI 지정합니다.
- 토큰
<token1>을 사용하여 GitHub.com에서 Container registry(을)를 인증합니다. - 토큰
<token2>을 사용하여https://containers.SUBDOMAIN.ghe.com에서 Container registry 엔터프라이즈에 인증합니다.
https://ghcr.io/v2/=<token1>,https://containers.SUBDOMAIN.ghe.com=<token2>
CodeQL 팩을 게시하기
다른 사용자와 CodeQL 팩을 공유하려면 해당 팩을 Container registry에 게시할 수 있습니다.
게시하기 전에 qlpack.yml 파일 구성
게시하기 전에 팩의 구성 세부 정보를 확인하고 수정할 수 있습니다 CodeQL . 텍스트 편집기에서 qlpack.yml 파일을 엽니다.
library: # set to true if the pack is a library. Set to false or omit for a query pack
name: <scope>/<pack>
version: <x.x.x>
description: <Description to publish with the package>
defaultSuite: # optional, one or more queries in the pack to run by default
- query: <relative-path>/query-file>.ql
defaultSuiteFile: default-queries.qls # optional, a pointer to a query-suite in this pack
license: # optional, the license under which the pack is published
dependencies: # map from CodeQL pack name to version range
-
`name:`은 GitHub 형식을 따라야 하며, 여기서 `<scope>`는 게시할 `<scope>/<pack>` 조직의 이름이고 `<pack>`는 팩의 이름입니다. -
최대 1개의
defaultSuite또는defaultSuiteFile만 허용됩니다. 실행할 기본 쿼리 그룹을 정의하는 두 가지 방법이 있습니다. 첫 번째는 qlpack.yml 파일에서 직접 쿼리를 지정하고 두 번째는 팩에 쿼리 도구 모음을 지정합니다.
`codeql pack publish` 실행
팩을 게시할 GitHubContainer registry준비가 되면 팩 디렉터리의 루트에서 다음 명령을 실행할 수 있습니다.
codeql pack publish
게시된 패키지는 파일의 GitHub 범위에서 지정한 조직의 패키지 섹션에 qlpack.yml 표시됩니다.
참고
기본 설정 구성의 일부로 조직의 모든 리포지토리로 범위를 확장하기 위해 모델 팩 GitHubContainer registry 을 게시하는 경우 코드 검사를 실행하는 리포지토리가 해당 모델 팩에 액세스할 수 있는지 확인해야 합니다. 자세한 내용은 기본 설정 구성 편집하기 및 패키지의 액세스 제어 및 표시 여부 구성을(를) 참조하세요.
기존 CodeQL 팩 다운로드
다른 사용자가 만든 팩을 실행하려면 먼저 다음 명령을 실행하여 다운로드해야 합니다.
codeql pack download <scope>/<pack>@x.x.x
-
`<scope>`: 다운로드할 GitHub 조직의 이름입니다. -
`<pack>`: 다운로드하려는 팩의 이름입니다. -
`@x.x.x`: 선택적 버전 번호입니다. 생략하면 최신 버전이 다운로드됩니다.
이 명령은 여러 팩에 대한 인수를 허용합니다.
다운로드할 쿼리 팩의 특정 버전 번호를 지정하는 스크립트를 작성하는 경우 버전을 최신 버전 CodeQL 으로 업데이트할 때 최신 버전의 쿼리 팩으로 전환해야 할 수도 있습니다. 최신 버전은 매우 오래된 버전 CodeQL 에 고정된 쿼리 팩과 함께 사용할 때 성능이 저하될 수 있습니다. 자세한 내용은 CodeQL 쿼리 팩 참조을(를) 참조하세요.
CodeQL팩을 사용하여 CodeQL 데이터베이스 분석
팩을 사용하여 데이터베이스를 CodeQLCodeQL 분석하려면 다음 명령을 실행합니다.
codeql database analyze <database> <scope>/<pack>@x.x.x:<path>
-
`<database>` CodeQL: 분석할 데이터베이스입니다. -
`<scope>`: 팩이 게시된 GitHub 조직의 이름입니다. -
`<pack>`: 사용 중인 팩의 이름입니다. -
`@x.x.x`: 선택적 버전 번호입니다. 생략하면 최신 버전이 사용됩니다. -
`:<path>`: 필요에 따라 실행할 쿼리, 디렉터리 또는 쿼리 도구 모음의 경로를 포함시킵니다. 생략하면 팩의 기본 쿼리 도구 모음이 사용됩니다.
이 analyze 명령은 지정된 CodeQL 팩의 기본 모음을 실행합니다. 데이터베이스를 분석하는 데 사용할 여러 CodeQL 팩을 CodeQL 지정할 수 있습니다. 다음은 그 예입니다.
codeql <database> analyze <scope>/<pack> <scope>/<other-pack>
참고
이 codeql pack download 명령은 다운로드한 팩을 로컬 수정용이 아닌 내부 위치에 저장합니다. 다운로드 후 팩이 수정되면 예기치 않은(및 문제 해결이 어려운) 동작이 발생할 수 있습니다. 사용자 지정 팩에 대한 자세한 정보는 CodeQL 팩 만들기 및 작업을(를) 참조하세요.