코드 스캐닝용 Copilot 자동 수정(미리 보기)

Copilot Autofix는 코드 검색 경고에 대한 제안된 수정 사항을 생성하는 Azure DevOps GitHub 고급 보안의 AI 기반 기능입니다. CodeQL이 취약성 또는 코딩 오류를 식별하는 경우 고급 보안 탭에서 직접 경고에 대한 수정 사항을 생성할 수 있습니다. Copilot Autofix는 Copilot 코딩 에이전트를 사용하여 수정을 생성하고 제안된 변경 내용으로 끌어오기 요청을 열어 일반적인 끌어오기 요청 워크플로를 통해 검토, 편집 및 병합할 수 있습니다.

메모

이 기능은 제한된 공개 미리 보기로 제공됩니다. Microsoft 현재 미리 보기에 대한 추가 사용자를 허용하지 않습니다.

예고 없이 기능이 변경되거나 제거될 수 있습니다. 미리 보기 기능에는 SLA(서비스 수준 계약)와 제한된 지원이 없습니다.

Azure DevOps용 GitHub 고급 보안은 Azure Repos와 함께 작동합니다. GitHub 리포지토리에서 GitHub Advanced Security를 사용하려면 GitHub Advanced Security를 참조하세요.

사전 요구 사항

카테고리 Requirements
권한 - 리포지토리에 대한 모든 경고 요약을 보려면 기여자 권한이 필요합니다.
- 고급 보안에서 경고를 해제하려면: Project 관리자 권한
- 고급 보안을 관리하려면: Project 컬렉션 관리자 그룹의 멤버이거나 고급 보안: 설정 관리 권한을 허용으로 설정해야 합니다.

고급 보안 권한에 대한 자세한 내용은 고급 보안 권한 관리를 참조하세요.

  • 기본 설정 또는 고급 설정을 사용하여 리포지토리에 대해 구성된 코드 검사입니다.
  • 하나 이상의 CodeQL 코드 스캐닝 경고

Copilot Autofix 정보

Copilot Autofix는 CodeQL의 분석 능력을 Copilot 코딩 에이전트를 구동하는 큰 언어 모델과 결합합니다. 지원되는 코드 검색 경고에 대한 수정 사항을 생성할 때 Copilot Autofix는 경고 및 주변 코드를 분석한 다음 다음이 포함된 끌어오기 요청을 엽니다.

  • 기본 취약성을 해결하는 제안된 코드 변경 입니다.
  • 경고 ID, 심각도 및 변경 요약을 포함하여 수정 중인 경고에 대한 설명 입니다.

제안된 수정 사항은 코드 베이스의 광범위한 컨텍스트를 고려하므로 변경 내용이 경고가 발생한 한 줄 이상에 걸쳐 있고 필요한 경우 다른 파일의 변경 내용을 포함할 수 있습니다.

메모

Copilot Autofix에서 처리하는 데이터는 LLM(대규모 언어 모델)을 학습시키는 데 사용되지 않습니다.

Important

Copilot 자동 수정 제안은 AI 모델이 생성한 것으로, 정확성, 완전성 또는 보안이 보장되지 않습니다. 항상 끌어오기 요청을 신중하게 검토하고, 새 문제를 도입하지 않고 경고를 해결하는지 확인하고, 병합하기 전에 변경 내용을 테스트합니다.

지원되는 언어

Copilot Autofix는 CodeQL이 C/C++, C#, Go, Java/Kotlin, JavaScript/TypeScript, Python, Ruby 및 Swift를 포함하여 코드 검색을 위해 분석하는 것과 동일한 언어를 지원합니다. 현재 CodeQL 지원 언어 목록은 언어 및 쿼리 지원을 참조하세요.

Billing

Copilot Autofix는 GitHub Advanced Security for Azure DevOps 라이선스에 포함되어 있습니다. 수정 사항을 생성하면 조직의 Azure 청구 미터에서 AI 크레딧이 소비됩니다.

각 수정 생성은 모델에 전송된 코드 컨텍스트에 대한 입력 토큰, 제안된 변경에 대한 출력 토큰 및 기존 컨텍스트를 다시 사용하는 캐시된 토큰을 포함하는 토큰을 사용합니다.

청구를 간단하게 유지하기 위해 이러한 토큰은 GitHub AI 크레딧이라는 표준 단위로 변환됩니다. 여기서 1 크레딧은 $0.01 USD입니다. 요금은 Azure DevOps 조직에 연결된 Azure 구독에 청구되며 Azure Cost Management 별도의 미터로 표시됩니다.

각 수정 비용은 주변 코드 컨텍스트의 크기와 변경의 복잡성에 따라 달라집니다.

일일 요금을 모니터링하려면 Azure 포털에서 >>비용 분석으로 이동합니다.

Copilot 자동 수정 활성화

조직, 프로젝트 또는 리포지토리 수준에서 Copilot Autofix를 사용하도록 설정할 수 있습니다. 더 넓은 범위에서 Autofix를 사용하도록 설정하면 해당 범위 내의 모든 리포지토리에 설정이 적용됩니다. 설정을 적용할 리포지토리에 따라 Autofix를 구성할 위치를 선택합니다.

Scope Autofix를 구성하는 위치
조직 조직의 모든 리포지토리에 대해 Autofix를 활성화하려면 조직 설정>를 선택합니다.
프로젝트 프로젝트의 모든 리포지토리에 대해 Autofix를 사용 설정하려면 프로젝트 설정>리포지토리>모든 리포지토리를 선택하세요.
리포지토리 Project 설정>리포지토리를 선택한 다음 리포지토리를 선택하여 해당 리포지토리에 대해서만 Autofix를 사용하도록 설정합니다.

Copilot 자동 수정을 사용하도록 설정하려면:

  1. Azure DevOps 조직(https://dev.azure.com/{yourorganization})에 로그인합니다.
  2. 구성하려는 조직, 프로젝트 또는 리포지토리 범위에 대한 설정 페이지로 이동합니다.
  3. 고급 보안 섹션에서 코드 보안 기능 패널을 엽니다.
  4. Copilot 코딩 에이전트에서 생성한 코드 검색 경고에 대한 자동 수정을 만들려면 확인란을 선택합니다.
  5. 적용을 선택하여 변경 내용을 저장합니다.

코드 스캔 경고에 대한 자동 수정 확인란이 강조 표시된 코드 보안 기능 패널의 스크린샷.

CodeQL은 이미 실행 중이며 리포지토리에 대한 경고를 생성해야 합니다. 자세한 내용은 코드 검색 설정 GitHub 고급 보안 기능 구성을 참조하세요.

경고에 대한 수정 사항 생성

Copilot Autofix를 사용하도록 설정한 후 지원되는 코드 검색 경고에서 수정을 생성할 수 있습니다.

  1. Repos>고급 보안을 선택하세요.
  2. 코드 검색 탭을 선택한 다음 경고를 선택하여 세부 정보 보기를 엽니다.
  3. 경고의 위치, 설명권장 사항을 검토하여 결과를 이해합니다.
  4. 수정 생성을 선택합니다.

오른쪽 위에 수정 생성 단추가 있는 코드 검사 경고 세부 정보 보기의 스크린샷

Copilot Autofix가 수정을 진행하는 동안 경고 세부 정보 보기에는 수정이 진행 중임이 표시됩니다. Copilot Autofix는 수정이 준비되면 풀 리퀘스트를 생성합니다.

끌어오기 요청을 열기 전에 수정 작업을 수행하는 Copilot Autofix를 보여 주는 코드 검사 경고 세부 정보 보기의 스크린샷

Copilot Autofix는 수정 사항을 생성하고 copilot-autofix/... 분기에서 끌어오기 요청을 엽니다. 끌어오기 요청에는 Copilot Autofix 태그가 지정되며, 이 태그를 사용해 끌어오기 요청 목록에서 Autofix 끌어오기 요청을 식별할 수 있습니다.

CodeQL 경고의 경우 끌어오기 요청은 경고 세부 정보 보기의 관련 끌어오기 요청 아래에 자동으로 표시되며 생성 및 완료 진행률로 계속 업데이트되므로 페이지를 새로 고칠 필요가 없습니다.

관련 풀 리퀘스트 아래에 활성 Autofix 풀 리퀘스트가 표시된 코드 스캐닝 경고 세부 정보 보기 스크린샷

Copilot Autofix가 경고에 대한 코드 변경 내용을 생성하지 않는 경우 분기 또는 끌어오기 요청을 만들지 않으며 경고 세부 정보 보기에서 끌어오기 요청을 연결하지 않습니다. 이 경우 경고를 수동으로 수정합니다. 자세한 내용은 수정을 사용할 수 없음을 참조하세요.

수정 사항 검토 및 병합

Copilot Autofix가 열리는 끌어오기 요청은 다른 Azure Repos 끌어오기 요청과 같이 동작합니다. 해당 설명은 수정 사항이 해결하는 경고를 요약합니다.

설명에 경고 ID, 심각도 및 수정 세부 정보가 표시된 Copilot Autofix가 생성한 끌어오기 요청의 스크린샷.

Copilot Autofix 레이블은 자동 수정 풀 요청을 나타냅니다.

  1. 경고의 관련 풀 리퀘스트 섹션 또는 Repos>Pull requests에서 풀 리퀘스트를 엽니다.
  2. 영향을 받는 모든 파일에서 파일 탭에서 제안된 변경 사항을 검토합니다.
  3. 코드 스타일, 명명 규칙 또는 프로젝트 요구 사항과 일치해야 하는 경우 변경 내용을 편집합니다.
  4. 일반 검토 워크플로를 통해 끌어오기 요청을 승인하고 완료합니다.

끌어오기 요청이 병합되고 다음 코드 검사 실행이 완료되면 수정이 기본 취약성을 제거하면 경고가 자동으로 닫힙니다.

Tip

생성된 수정은 최종 답변이 아닌 시작점입니다. 끌어오기 요청을 다른 변경과 같이 처리합니다. 병합하기 전에 필요에 따라 검토, 테스트 및 추가 검토자를 요청합니다.

Copilot Autofix 문제 해결

수정 사항이 생성되었지만 커밋하거나 푸시할 수 없습니다.

Copilot Autofix는 커밋 작성자 전자 메일로 사용합니다noreply@dev.azure.com. 커밋 작성자 전자 메일 유효성 검사 정책에서 이 주소를 허용하지 않는 경우 Copilot Autofix는 코드 변경을 생성할 수 있지만 커밋하거나 푸시하여 끌어오기 요청을 만들 수는 없습니다.

경고 세부 정보 보기에는 차단된 커밋 작성자 전자 메일을 식별하는 오류가 표시됩니다.

커밋 작성자 전자 메일이 허용되지 않으므로 Copilot Autofix에서 생성된 수정 사항을 커밋할 수 없다는 것을 보여 주는 코드 검색 경고의 스크린샷

커밋 작성자 이메일 유효성 검사 정책의 허용된 이메일 패턴에 noreply@dev.azure.com를 추가합니다.

  1. 프로젝트 설정>리포지토리선택합니다.
  2. 모든 리포지토리를 선택하여 프로젝트 수준 정책을 업데이트하거나 정책이 있는 리포지토리를 선택합니다.
  3. 정책을 선택합니다.
  4. 리포지토리 정책에서 작성자 메일 유효성 검사 커밋을 찾습니다.
  5. noreply@dev.azure.com를 허용된 이메일 패턴에 추가합니다.
  6. 코드 스캐닝 경고로 돌아가 수정 다시 시도를 선택합니다.

허용된 커밋 작성자 전자 메일 패턴에 Copilot Autofix 전자 메일을 추가하는 리포지토리 정책 설정의 스크린샷

실행 실패

Copilot Autofix 실행을 완료할 수 없는 경우 경고는 실행이 성공하지 못했음을 빠르게 확인할 수 있도록 눈에 띄는 실패 상태를 표시합니다. 실패 상태에서 실행을 다시 시도하여 새 수정 사항을 생성할 수 있습니다.

실행을 다시 시도하는 옵션이 있는 실패한 상태에서 Copilot Autofix 실행을 보여 주는 코드 검색 경고의 스크린샷.

일시적인 이유로 실행이 실패하거나 실행에서 사용 가능한 코드 변경이 생성되지 않는 경우 실행이 실패할 수 있습니다. 실행을 다시 시도하여 수정 사항을 다시 생성합니다.

해결 방법을 사용할 수 없음

Copilot Autofix는 모든 경고에 대한 수정을 생성할 수 없습니다. 다음과 같은 경우 수정을 사용할 수 없을 수 있습니다.

  • 경고 유형은 현재 Copilot Autofix에서 지원되지 않습니다.
  • Copilot은 해당 경고가 오탐일 수 있다고 판단합니다.
  • CodeQL이 아닌 사용자 지정 쿼리 또는 타사 도구가 경고를 생성합니다.
  • Copilot Autofix는 실행되지만 코드 변경을 생성하지 않습니다. 이 경우 분기 또는 끌어오기 요청이 만들어지지 않습니다.

Copilot Autofix가 경고가 오탐일 수 있다고 판단하고 어떠한 변경도 생성하지 않으면, 경고 세부 정보 보기에는 그 결과가 표시됩니다. 실행을 검토하거나 수정을 다시 시도할 수 있습니다.

Copilot이 해당 경고를 가양성일 수 있다고 판단하여 수정 사항을 제시하지 않았으며, 실행을 보거나 수정을 다시 시도하는 옵션이 표시된 코드 스캐닝 경고 세부 정보 보기 화면의 스크린샷

수정 사항을 사용할 수 없는 경우 경고의 권장 사항예제 섹션을 사용하여 수정하거나 경고를 수동으로 해제합니다. 자세한 내용은 경고 세부 정보참조하세요.