일반적으로 CodeQL 실행에 오류가 발생하는 경우 CodeQL CLI는 실행된 각 명령의 상태를 종료 코드로 보고합니다. 종료 코드는 후속 명령 또는 CodeQL CLI를 사용하는 다른 도구에 대한 정보를 제공합니다. 종료 코드 세부 정보에 대한 자세한 내용은 종료 코드를 참조 하세요.
필수 조건
| 카테고리 | 요구 사항 |
|---|---|
| 권한 | - 리포지토리에 대한 모든 경고 요약을 보려면 기여자 권한이 필요합니다. - 고급 보안에서 경고를 해제하려면 : 프로젝트 관리자 권한입니다. - 고급 보안에서 사용 권한을 관리하려면: 프로젝트 컬렉션 관리자 그룹 또는 고급 보안의 구성원: 허용으로 설정된 설정 권한을 관리합니다. |
고급 보안 권한에 대한 자세한 내용은 고급 보안 권한 관리를 참조하세요.
오류: 'database finalize' CodeQL 명령(32)
이 오류는 추출 오류 또는 빌드 단계 누락으로 인해 CodeQL 데이터베이스 만들기를 완료하는 데 문제가 있음을 나타냅니다.
문제 해결 단계:
- 코드가 존재하고 컴파일되었는지 확인
- 컴파일된 언어의 경우 빌드 프로세스가 코드를 컴파일하고 작업
AdvancedSecurity-Codeql-Init간에AdvancedSecurity-Codeql-Analyze발생하는지 확인합니다. 일반적인 빌드 명령 및 필수 플래그(예: 클린 no-cache/no-daemon)는 빌드 명령 지정에서 찾을 수 있습니다. - 해석된 언어의 경우 프로젝트에 지정된 언어에 대한 소스 코드가 있는지 확인합니다.
- 컴파일된 언어의 경우 빌드 프로세스가 코드를 컴파일하고 작업
- 추출 오류 확인
- 추출 오류가 CodeQL 데이터베이스의 상태에 영향을 주는지 확인합니다.
- 로그 파일에서 추출 오류 및 경고를 검토하여 전체 데이터베이스 상태를 평가합니다.
- 압도적인 오류 조사
- 대부분의 파일에서 추출기 오류가 발생하는 경우 추가로 조사하여 부적절한 추출의 근본 원인을 파악합니다.
오류: 자동 작성 스크립트(1)
이 오류는 자동 빌드 실패에 대해 설명하며, 코드 검색 설정 또는 구성에 문제가 있음을 시사합니다.
문제 해결 단계:
- 빌드 단계 구성
- AutoBuild 단계를 제거하고 대신 파이프라인에서 컴파일된 언어에 대한 특정 빌드 단계를 구성합니다.
- Azure DevOps에 대한 GitHub 고급 보안 구성에 제공된 설정 지침을 참조하세요.
오류: 에이전트 도구 캐시에서 CodeQL 디렉터리를 찾을 수 없음
이 오류는 자체 호스팅 에이전트에 대한 CodeQL 설치와 관련된 문제를 나타냅니다.
문제 해결 단계:
- Azure DevOps에 대한 GitHub 고급 보안 구성에 제공된 설정 지침 또는 구성 스크립트를 참조하세요.
오류: 언어 파이프라인 변수가 설정되지 않음
이 오류는 검색할 언어를 지정하는 파이프라인 변수를 설정하지 않고 CodeQL을 실행하려고 할 때 발생합니다.
문제 해결 단계:
- 언어 파이프라인 변수 설정
- 언어 파이프라인 변수가 올바르게 구성되었는지 확인합니다. Azure DevOps에 대한 GitHub 고급 보안 구성에 제공된 설정 지침을 참조하세요.
- 지원되는 언어에는
csharp,,cppgo,javajavascript,pythonruby및 .swift
결과를 반환하지 않는 CodeQL
이 섹션에서는 CodeQL 분석에서 결과를 생성하지 않는 상황에 대한 지침을 제공합니다.
문제 해결 단계:
- 검색된 취약성 확인
- 코드에 취약성이 없을 수 있는 가능성을 고려합니다. 취약성이 예상되었지만 검색되지 않은 경우 추가 확인을 진행합니다.
- 쿼리 도구 모음 구성 검토
- 사용 중인 쿼리 그룹을 확인하고 필요한 경우 보다 포괄적인 제품군으로 전환하는 것이 좋습니다.
- 또는 맞춤형 분석을 위해 사용자 지정 쿼리 도구 모음을 만들 수 있습니다.
- 결과 보기에 대한 권한 조정
- 적어도 기여자 수준에서 적절한 사용 권한이 분석 결과에 액세스하도록 부여되었는지 확인합니다. 자세한 내용은 고급 보안 권한을 참조 하세요.
CodeQL 시간 초과
AdvancedSecurity-Codeql-Analyze@1 작업이 This job was abandoned ... we lost contact with the agent 상태를 표시하는 경우, 호스트된 Microsoft 에이전트를 사용 중이라면 유료 호스팅 에이전트의 기본 제공 6시간 제한 시간을 초과하게 됩니다. 대신 자체 호스팅 에이전트에서 분석을 실행하려고 할 수 있습니다.
코드 검사 작업 권한
코드 검사 빌드 작업은 파이프라인 ID를 사용하여 고급 보안 REST API를 호출합니다. 기본적으로 동일한 프로젝트의 파이프라인은 CodeQL 분석을 실행하여 생성된 SARIF 파일을 업로드할 수 있습니다. 이러한 권한이 빌드 서비스 계정에서 제거되거나 사용자 지정 설정이 있는 경우(예: 리포지토리가 아닌 다른 프로젝트에서 호스트되는 파이프라인) 이러한 권한을 수동으로 부여합니다.
문제 해결 단계:
- 파이프라인에서 사용되는 빌드 서비스 계정에 대한 권한
Advanced Security: View alerts부여 및Advanced Security: Manage and dismiss alerts권한( 프로젝트 범위 파이프라인의 경우[Project Name] Build Service ([Organization Name])및 컬렉션 범위 파이프라인의 경우Project Collection Build Service ([Organization Name])).
의도하지 않은 리포지토리에 결과를 게시하는 코드 검사
한 리포지토리에 파이프라인 정의가 저장되어 있고 GitHub Advanced Security에서 검사할 소스 코드가 다른 리포지토리에 있는 경우 결과가 처리되어 잘못된 리포지토리에 제출되어 소스 코드 리포지토리가 아닌 파이프라인 정의가 포함된 리포지토리에 게시될 수 있습니다.
의도한 결과 라우팅을 사용하도록 설정하려면 리포지토리를 유추하여 작업 디렉터리의 리포지토리에서 게시하도록 파이프라인 환경 변수 advancedsecurity.publish.repository.infer: true 를 설정합니다.
trigger:
- main
resources:
repositories:
# PipelineRepo: The repository containing the pipeline definition.
# This is optional and only needed if you plan to reference files or scripts from this repo.
- repository: PipelineRepo
type: git
name: DevOpsPipelineRepo
ref: refs/heads/main
trigger:
- main
# SourceRepo: The repository where scanning and publishing will occur.
- repository: SourceRepo
type: git
name: code-to-analyze-repo
ref: refs/heads/main
trigger:
- main
jobs:
- job: "CodeQLScan"
displayName: "CodeQL Scanning with Inferred Publishing"
variables:
# Enable repository inference
advancedsecurity.publish.repository.infer: true
steps:
# Checkout the SourceRepo
- checkout: SourceRepo
# Initialize CodeQL
- task: AdvancedSecurity-Codeql-Init@1
displayName: "Initialize CodeQL"
inputs:
languages: "python,javascript" # Adjust based on repository languages
# Perform CodeQL analysis
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: "Analyze Code with CodeQL"
자체 호스팅 에이전트에 CodeQL 번들 수동 설치
GitHub에서 사용할 수 있는 아키텍처에 대한 설치 스크립트를 활용하여 CodeQL 번들을 에이전트 도구 캐시에 설치합니다. 이러한 스크립트를 사용하려면 환경 변수를 에이전트의 에이전트 도구 디렉터리 위치(예: )$AGENT_TOOLSDIRECTORY로 설정해야 C:/agent/_work/_tool 합니다. 또는 다음 단계를 수동으로 구현할 수 있습니다.
- GitHub에서 최신 CodeQL 릴리스 번들을 선택합니다.
- 일반적으로 다음 아래에
_work/_tool./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/있는 에이전트 도구 디렉터리 내의 다음 디렉터리에 번들을 다운로드하고 압축을 풉니까. 현재 릴리스를v2.23.5사용하면 폴더 이름에 제목이 지정./CodeQL/0.0.0-v2.23.5/x64/됩니다. 에이전트 도구 디렉터리에 대해 자세히 알아봅니다. - 폴더 내에
x64.complete있는 빈 파일을 만듭니다./CodeQL/0.0.0-[codeql-release-bundle-tag]. 이전 예제를 사용하면 파일의 끝 파일 경로가x64.complete여야./CodeQL/0.0.0-v2.23.5/x64.complete합니다.
코드 검사 경고를 게시할 리포지토리를 명시적으로 정의하려면 어떻게 해야 하나요?
- 파이프라인 환경 변수
advancedsecurity.publish.repository.infer: true를 사용하여 리포지토리를 유추하여 작업 디렉터리의 리포지토리에서 게시합니다. - 또 다른 옵션으로, 리포지토리를 명시적으로 체크 아웃하지 않거나 별칭을 사용하여 리포지토리를 체크 아웃하지 않는 경우 변수를 사용하세요.
advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['YourRepositoryAlias']) ]
자세한 내용은 릴리스 정보를 확인하세요.