이 가이드는 엔지니어링 시스템 개선을 위한 전략과 측정 항목을 추천하는 GitHub의 ESSP(엔지니어링 시스템 성공 플레이북)에서 영감을 받았습니다.
Copilot을 출시하려면 목표를 정의하고, 이에 따라 출시를 계획하고, 직원에게 목표를 명확하게 전달하는 것이 좋습니다. GitHub Copilot을 사용하여 회사의 엔지니어링 목표 달성을(를) 참조하세요.
1. 성공을 가로막는 장애 요인 식별
ESSP에서 권장하는 첫 번째 단계는 회사의 개선을 방해하는 장애물을 명확히 이해하는 것입니다. 현재 기준, 원하는 미래 상태, 진행을 방해하는 장벽을 이해하게 되면 발생하는 변화의 방향이 목표 지향적이고 효과적이라는 것을 확신할 수 있습니다.
개발 팀은 새로운 기능을 제공하고 애플리케이션을 원활하게 실행하기 위해 노력하므로 속도와 기능에 중점을 두는 경우가 많습니다. 그러나 시간이 지남에 따라 다음과 같은 작은 이슈가 누적될 수 있습니다.
- 해결되지 않은 알려진 보안 약점
- 잠재적 결함이 있는 이전 소프트웨어 구성 요소에 대한 의존성
- 발견된 문제에 대한 해결 지연
많은 조직에서 해결되지 않은 보안 이슈와 오래된 구성 요소의 누적으로 인해 상당한 백로그(보안 부채)가 생성됩니다.
이 부채는 실제 위험을 수반합니다. 해결되지 않는 시간이 길어질수록 위험이 더 커질 수 있으며 해결하는 데 더 많은 비용이 들게 됩니다. 대규모 보안 부채는 시스템을 공격에 취약하게 만들고, 중요한 데이터를 노출하며, 궁극적으로 고객 신뢰가 약화되고 수익에 영향을 줄 수 있습니다.
문제는 안전하고 안정적인 소프트웨어 환경을 유지해야 한다는 중요한 책임과 신속한 개발의 필요성 간에 균형을 유지하는 것입니다.
2. 옵션 평가
다음 단계는 1단계에서 확인한 장벽을 해결하기 위한 솔루션을 평가하고 합의하는 것입니다. 이 가이드에서는 GitHub Copilot이 사용자가 파악한 목표에 미칠 수 있는 영향에 대해 중점적으로 살펴보겠습니다. 새로운 도구를 성공적으로 출시하려면 문화와 프로세스도 바뀌어야 한다는 점을 명심하세요.
피드백을 수집하고 성공을 측정하기 위해 파일럿 그룹과 함께 새로운 도구와 프로세스의 평가판을 시험적으로 실행하게 됩니다. 평가판 중에 사용할 학습 리소스 및 메트릭에 대해서는 3. 변경 내용 구현 및 주시해야 할 메트릭 섹션을 참조하세요.
Copilot이 도움을 주는 방식
GitHub Copilot은 보안 고려 사항을 개발 수명 주기에 직접 통합하여 보안 부채를 완화하는 데 도움이 될 수 있습니다. 이 기능을 사용하면 개발자가 잠재적 취약성을 사전에 식별 및 해결하고, 프로젝트를 최신 상태로 유지할 수 있습니다.
Copilot은 소프트웨어 개발 수명 주기 동안 보안 취약성을 줄이는 데 도움이 될 수 있습니다.
개발 도중
Copilot은 코드를 작성할 때 사전에 검토하여 일반적인 보안 결함 및 패턴에 대한 이해를 토대로 악용되기 쉬운 영역에 플래그를 지정합니다. 이 실시간 분석은 표준 개발 또는 초기 보안 검토 중에 누락될 수 있는 숨겨진 취약성을 노출할 수 있습니다.
이슈가 확인되면 Copilot은 즉시 실행 가능한 코드 변경을 제안하여 취약성을 수정할 수 있으므로 개발자는 개발 주기 초기에 약점을 해결하고 보안 부채가 누적되지 않도록 할 수 있습니다.
지속적인 유지 관리
Copilot은 기존 코드베이스를 안전하게 유지하기 위해 GitHub의 코드스캔 기능과 통합됩니다. 코드스캔을 통해 잠재적인 보안 경고가 식별되면 Copilot Autofix는 취약성을 지능적으로 분석하고 대상 지정 컨텍스트별 권장 사항을 제공하여 해결할 수 있습니다.
이러한 구체적인 수정 제안은 수정을 간소화하여 개발자가 취약성을 조사하고 문제 해결 방법을 파악하는 데 소요되는 시간을 줄입니다. 결과적으로 보안 경고는 보다 효율적으로 해결되며 장기간 남아 보안 부채로 이어질 위험이 낮아집니다.
문화적 고려 사항
GitHub Copilot을 출시할 때, 목표 달성을 방해할 수 있는 사회적 또는 문화적 요소도 해결해야 합니다.
다음 예는 ESSP의 "Anti-Patterns" 섹션에서 가져온 것입니다.
- 팀은 보안 부채를 무시하거나 지연시켜 비효율적이고 취약한 시스템이 지속되도록 할 수 있습니다. 이러한 상황은 기능의 마감 기한에 맞추는 데 치중하거나, 보안 부채의 장기적 영향에 대한 교육 부족 때문에 발생할 수 있습니다.
- 팀은 간단한 문제에 대해 지나치게 복잡한 솔루션을 빌드하여 코드의 유지 관리가 더 어렵고 보안 이슈를 감지하기 어렵게 만들 수 있습니다. 불필요하게 미래를 대비하려는 욕구 또는 복잡성을 통해 가치를 추가해야 한다는 압력 때문에 이러한 상황이 발생할 수 있습니다.
3. 변경 내용 구현
장벽을 극복하기 위한 올바른 접근 방식을 파악하면 파악한 솔루션을 스케일링합니다. 새로운 도구 또는 프로세스를 성공적으로 도입하기 위해서는 도입의 각 부분에 소유권을 할당하고, 목표에 대해 투명하게 소통하고, 효과적인 교육을 제공하고, 성과를 측정하는 것이 중요합니다.
이 섹션에서는 개발자를 위한 예시 시나리오, 모범 사례, 리소스를 제공합니다. 이 섹션을 사용하여 직원들이 Copilot을 목표에 맞춰 사용할 수 있도록 돕는 커뮤니케이션 및 교육 세션을 계획하는 것이 좋습니다.
코드의 보안 취약성 분석
코드베이스의 크기에 따라 Copilot은 컨텍스트 제한으로 인해 개발자가 코드를 작성하는 동안 전체 프로젝트를 분석하지 못할 수도 있습니다. 그러나 개발자는 특정 파일에서 안전하지 않은 코드 사례를 분석하도록 Copilot에 요청하는 방식을 채택할 수 있습니다.
-
Visual Studio Code에서 분석할 파일을 엽니다.
-
Copilot 채팅에서
Analyze this code for potential security vulnerabilities and suggest fixes
와 같이 요청합니다.#file
채팅 변수를 사용하여 프롬프트에 파일의 콘텐츠를 구체적으로 포함하거나 프롬프트 파일 및 사용자 지정 지침을 사용하여 Copilot의 응답을 안내할 수도 있습니다. -
Copilot 채팅은 코드를 분석하고, 보안 취약성을 식별하고, 적절한 수정 사항을 제안합니다.
-
제안된 변경 내용을 검토하고 적절하게 적용합니다.
프롬프트의 다른 예는 다음과 같습니다.
Are there any security vulnerabilities in my code? If so, can you explain them and suggest fixes?
Does this code follow secure code best practices? If not, what specific improvements can I make?
What are the potential security risks in this code if it were deployed to production? How can I mitigate them?
code scanning 경고에 대해 Copilot Autofix 사용
Copilot Autofix는 GitHub Code Security의 구성 요소로, code scanning 경고에 대한 잠재적 수정 사항을 제안할 수 있습니다. Copilot Autofix는 퍼블릭 리포지토리 및 GitHub Code Security에 대한 라이선스가 있는 리포지토리에서 사용할 수 있습니다.
리포지토리에서 코드스캔을 실행하는 경우 리포지토리에서 잠재적인 이슈가 code scanning 경고로 발생합니다. 개발자는 다음 흐름에 따라 경고를 해결할 수 있습니다.
- GitHub에서 경고를 엽니다.
- Copilot이 경고를 해결할 수 있는 경우 표시되는 Generate fix를 클릭합니다.
- Copilot Autofix는 경고 자체의 코드 변경 내용을 보여 주는 이 경고에 대한 잠재적 수정 내용을 생성합니다. 그런 다음, 새 분기 또는 기존 분기에 이 코드 변경을 커밋하는 옵션을 제공합니다.
- 이 시점에서 코드를 테스트한 다음, 끌어오기 요청을 열어 변경 내용을 주 분기로 이동할 수 있습니다.
- 변경 내용을 주 분기로 이동하고 code scanning이 경고가 수정되었는지 확인하면 경고가 자동으로 닫힙니다.
개발자를 위한 모범 사례
개발자는 다음을 수행해야 합니다.
- Copilot 채팅을 정기적으로 사용하여 코드 조각에서 취약성 분석. 변경 내용을 커밋하기 전에 보안 이슈가 있는지 코드를 사전에 확인하는 것이 좋습니다.
- code scanning 경고에 대해 Copilot Autofix 활용: 경고가 나타나면 경고를 빠르게 해결하는 첫 번째 단계로 Copilot Autofix를 사용합니다.
- Copilot 채팅에 명확하고 구체적인 프롬프트 제공: 요청이 더 자세할수록 Copilot에서 코드를 더 잘 분석하고 관련 수정 내용을 제안할 수 있습니다. 예를 들어 프롬프트에 프로그래밍 언어 및 특정 관심 영역을 포함합니다.
- Copilot을 기존 보안 도구와 결합: Copilot을 전용 보안 스캐너 및 관행 대신 사용하는 것이 아니라 추가적인 보안 분석 계층으로 사용합니다.
개발자는 다음을 수행해서는 안 됩니다.
- Copilot의 보안 제안 자동 수락: 항상 Copilot에서 제안한 코드 변경 내용을 검토하고 테스트하여 적절하고 효과적인지 확인합니다.
- 포괄적인 보안 감사를 위해 Copilot만 사용: Copilot은 유용한 도구이지만 철저한 보안 검토 및 침투 테스트 대신 사용하면 안 됩니다.
- code scanning 경고 무시: 아무리 사소한 것이라도 모든 경고를 즉시 해결하여 보안 부채가 누적되는 것을 방지합니다.
- Copilot에 의존하여 보안 코딩 사례를 학습하지 않는 경우 방지: 계속해서 자신과 팀에게 보안 모범 사례를 교육합니다.
- Copilot이 모든 취약성을 잡아낼 것으로 가정: 보안은 진행 중인 프로세스이며 항상 경계를 늦추지 않아야 합니다.
- Copilot을 사용하여 보안 정책 우회: 조직의 보안 프로토콜을 준수하고 Copilot을 이러한 프로토콜을 우회하지 않고 개선하는 도구로 사용합니다.
개발자를 위한 리소스
조사할 메트릭
새로운 도구의 평가판을 평가하고 전체 출시를 통해 일관된 개선 사항을 제공하는지 확인하려면 결과를 모니터링하고 필요한 경우에는 조정해야 합니다. 일반적으로 품질, 속도, 개발자의 행복이라는 핵심 영역을 고려하고 이러한 영역이 어떻게 모여 비즈니스 성과에 기여하는지 살펴보는 것이 좋습니다.
Copilot이 이 특정 목표에 미치는 영향을 평가하기 위해 살펴보기 좋은 몇 가지 지표는 다음과 같습니다.
- 보안 부채 비율: 보안 개요를 사용하여 시간이 지남에 따라 경고 수가 감소하는지 확인합니다.
- 보안 문제 해결 시간: 보안 개요를 사용하여 시간이 지남에 따라 보안 문제 해결 시간이 감소하는지 확인합니다.
코드의 보안 위험 평가을(를) 참조하세요.