데이터베이스를 CodeQL 사용하여 CodeQL CLI분석한 후에는 결과가 포함된 SARIF 파일이 생성됩니다. 그런 다음, CodeQL CLI를 사용하여 결과를 GitHub에 업로드할 수 있습니다.
결과를 생성하기 위해 이외의 메서드를 CodeQL CLI 사용한 경우 다른 업로드 메서드를 사용할 수 있습니다. 자세한 내용은 GitHub에 SARIF 파일 업로드을(를) 참조하세요.
다음을 사용하여 인증을 위한 토큰 생성 GitHub
결과를 GitHub에 업로드하기 전에, 먼저 personal access token를 생성해야 합니다. 개인용 액세스 토큰 관리을(를) 참조하세요.
-
** Personal access token (classic) ** 에는 필요한 리포지토리에 대한 "Code scanning 경고" **읽기 및 쓰기** 권한이 필요합니다. -
** Fine-grained personal access token ** 에는 "리포지토리" **security_events** 액세스가 필요합니다.
타사 CI 시스템에 CodeQL CLI을 설치한 경우, 결과를 GitHub App에 업로드하는 데 사용할 GitHub을(를) 사용할 수 있습니다. 사용자의 기존 CI 시스템으로 코드 검색 사용하기을(를) 참조하세요.
결과를 에 업로드
-
SARIF 속성의 업로드 크기가 지원되고 파일이 코드 검색과 호환되었는지 확인합니다. 자세한 내용은 코드 검사에 대한 SARIF 지원을(를) 참조하세요.
-
이전 섹션에서 생성한 GitHub App 또는 personal access token을 CodeQL CLI에 전달하는 가장 좋은 방법을 결정합니다. 비밀 저장소의 안전한 사용에 관한 CI 시스템 참고 자료를 검토하는 것이 좋습니다. CodeQL CLI를 지원합니다.
-
`--github-auth-stdin` 옵션을 이용해 비밀 저장소와 상호연결(권장). - 환경 변수
GITHUB_TOKEN에 비밀을 저장하고--github-auth-stdin옵션을 포함하지 않고 CLI 실행. - 테스트를 위해
--github-auth-stdin명령줄 옵션을 전달하고, 표준 입력을 통해 임시 토큰을 공급할 수 있습니다.
-
-
CI 서버에 대한 가장 안전하고 신뢰할 수 있는 방법을 결정한 경우
codeql github upload-results환경 변수에서 토큰이 제공되지 않는 한 각 SARIF 결과 파일에서--github-auth-stdin를 실행하고GITHUB_TOKEN을 포함시킵니다.# GitHub App or personal access token available from a secret store <call-to-retrieve-secret> | codeql github upload-results \ --repository=<repository-name> \ --ref=<ref> --commit=<commit> \ --sarif=<file> --github-url=<URL> \ --github-auth-stdin # GitHub App or personal access token available in GITHUB_TOKEN codeql github upload-results \ --repository=<repository-name> \ --ref=<ref> --commit=<commit> \ --sarif=<file> --github-url=<URL> \
| Option | 필수 | Usage |
|---|---|---|
--repository | 데이터를 업로드할 리포지토리의 _소유자/이름_을 지정합니다. 리포지토리가 공개 대해 사용하도록 설정된 엔터프라이즈 내 또는 계획에GitHub Advanced Security이어야 합니다. 자세한 내용은 리포지토리에 대한 보안 및 분석 설정 관리을(를) 참조하세요. | |
--ref | 결과가 올바른 코드와 매칭될 수 있도록 체크 아웃하고 분석한 ref의 이름을 지정합니다. 분기를 사용할 경우: refs/heads/BRANCH-NAME, 끌어오기 요청의 헤드 커밋을 사용할 경우 refs/pull/NUMBER/head, 또는 끌어오기 요청의 GitHub-생성 병합 커밋을 사용할 경우 refs/pull/NUMBER/merge. | |
--commit | 분석한 커밋의 전체 SHA를 지정합니다. | |
--sarif | 로드할 SARIF 파일을 지정합니다. | |
--github-url | 에 대한 URL을 지정합니다 GitHub Enterprise Server 인스턴스. | |
--github-auth-stdin | CLI에서 GitHub App 또는 personal access token를 표준 입력을 통해 비밀 저장소로부터 전달하여 GitHub의 REST API로 인증합니다. 명령이 이 토큰을 사용하여 설정된 GITHUB_TOKEN 환경 변수에 액세스할 수 있는 경우에는 이 항목이 필요하지 않습니다. |
자세한 내용은 GitHub 업로드-결과을(를) 참조하세요.
참고
단일 커밋에 대해 둘 CodeQL 이상의 데이터베이스를 분석한 경우 이 명령에서 생성된 각 결과 집합에 대해 SARIF 범주를 지정해야 합니다. 결과를 업로드할 GitHubcode scanning 때 이 범주를 사용하여 각 언어에 대한 결과를 개별적으로 저장합니다. 이 작업을 수행하지 않으면 각 업로드가 이전 결과를 덮어씁니다. 자세한 내용은 CodeQL 쿼리를 사용하여 코드 분석을(를) 참조하세요.
결과를 에 업로드하는 기본 예제 GitHub
다음은 SARIF 파일의 결과를 temp/example-repo-js.sarif리포지토리로 my-org/example-repo업로드하는 예시입니다. API에 deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 커밋에 대한 결과가 main 브랜치에서 있음을 알립니다. 이 예제에서는 GitHub의 REST API 인증을 위해 GitHub App 또는 personal access token이 생성한 환경 변수 GITHUB_TOKEN을 사용한다고 가정합니다.
codeql github upload-results \
--repository=my-org/example-repo \
--ref=refs/heads/main --commit=deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 \
--sarif=/temp/example-repo-js.sarif --github-url=https://HOSTNAME \
업로드에 실패하지 않는 한 이 명령의 출력은 없습니다. 명령 프롬프트는 업로드가 완료되고 데이터 처리가 시작될 때 반환됩니다. 더 작은 코드베이스에서는 code scanning 경고를 GitHub 잠시 후에 탐색할 수 있어야 합니다. 확인한 코드에 따라 풀 리퀘스트 또는 Security 브랜치 탭에서 직접 경고를 볼 수 있습니다.
분석이 실패하는 경우 GitHub에 진단 정보를 업로드합니다.
CodeQL CLI 데이터베이스 분석이 성공적으로 완료되면 파일 검사, 경고 및 오류와 같은 진단 정보를 수집하고 결과를 포함하는 SARIF 파일에 포함합니다. SARIF 파일을 GitHub에 업로드하면 진단 정보가 리포지토리의 code scanning도구 상태 페이지에 표시되어 쉽게 CodeQL가 어떻게 작동하는지 확인하고 문제를 쉽게 디버깅할 수 있습니다. 자세한 내용은 [AUTOTITLE](/code-security/code-scanning/managing-your-code-scanning-configuration/about-the-tool-status-page)을(를) 참조하세요.
어떠한 이유로 codeql database analyze이(가) 실패할 경우, GitHub에 업로드할 SARIF 파일이 없고, 리포지토리에 code scanning도구 상태 페이지 표시할 진단 정보도 없습니다. 따라서 사용자가 CI 시스템의 로그 파일에 액세스할 수 없는 한 분석 문제를 해결하기가 힘듭니다.
분석이 실패할 때 진단 정보를 내보내고 업로드하도록 CI 워크플로를 GitHub 구성하는 것이 좋습니다. 다음 간단한 명령을 사용하여 진단 정보를 내보내고 업로드할 GitHub수 있습니다.
분석이 실패할 경우 진단 정보 내보내기
[AUTOTITLE](/code-security/codeql-cli/codeql-cli-manual/database-export-diagnostics)을 이용해 실패한 분석에 대한 SARIF 파일을 생성할 수 있으며, 다음을 예로 들 수 있습니다.
$ codeql database export-diagnostics codeql-dbs/example-repo \
--sarif-category=javascript-typescript --format=sarifv2.1.0 \
--output=/temp/example-repo-js.sarif
이 SARIF 파일에는 분석 중 생성된 파일 적용 범위 정보, 경고 및 오류를 포함하여 실패한 분석에 대한 진단 정보가 포함됩니다.
분석이 실패 시 진단 정보 업로드하기
SARIF 파일을 GitHub에 업로드하여 도구 상태 페이지에서 이 진단 정보를 사용할 수 있게 GitHub 업로드-결과을 사용하십시오. 예를 들어:
codeql github upload-results \
--repository=my-org/example-repo \
--ref=refs/heads/main --commit=deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 \
--sarif=/temp/example-repo-js.sarif --github-url=https://HOSTNAME \
이는 분석이 성공 시 SARIF 파일 업로드 프로세스와 동일합니다.