튜토리얼: 비밀 푸시 보호로 프로젝트 보호하기

만약 애플리케이션이 외부 자원을 사용한다면, 보통 비밀 토큰 또는 키와 같은 비밀을 사용하여 애플리케이션을 인증해야 합니다. 만약 비밀이 원격 저장소에 푸시된다면, 해당 저장소에 액세스하는 모든 사람은 당신 또는 당신의 애플리케이션을 사칭할 수 있습니다.

GitLab은 비밀 푸시 보호로, 커밋 기록에서 비밀을 감지하면 누설을 막기 위해 푸시를 차단할 수 있습니다. 비밀 푸시 보호를 활성화하면 민감한 데이터를 검토하고 누설이 발생한 경우 수정하는 데 소비되는 시간을 줄일 수 있습니다.

이 튜토리얼에서는 비밀 푸시 보호를 구성하고 가짜 비밀을 커밋할 때 어떤 일이 발생하는지 살펴볼 것입니다. 또한, 거짓 양성을 우회해야 하는 경우 비밀 푸시 보호를 건너뛰는 방법을 익힐 것입니다.

이 튜토리얼은 다음 GitLab Unfiltered 비디오를 참고로 하였습니다:

시작하기 전에

이 튜토리얼을 완료하기 전에 다음이 있는지 확인하세요:

  • GitLab 얼티밋 구독
  • 테스트 프로젝트. 원하는 프로젝트를 사용할 수 있지만, 이 튜토리얼 전용으로 테스트 프로젝트를 만들어보는 것을 고려해 보세요.
  • 명령줄 Git 명령에 어느 정도 익숙함

또한, 자체 관리 GitLab만 해당되는 것이지만, 비밀 푸시 보호가 인스턴스에서 활성화되어 있는지 확인하세요.

비밀 푸시 보호 활성화

비밀 푸시 보호를 사용하려면 보호하려는 각 프로젝트에서 활성화해야 합니다. 테스트 프로젝트에서 활성화하는 방법을 살펴보겠습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하여 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 보안 > 보안 구성을 선택합니다.
  3. 비밀 푸시 보호 토글을 켭니다.

다음으로, 비밀 푸시 보호를 테스트해 보겠습니다.

프로젝트에 비밀을 푸시하는 시도

GitLab은 특정 문자, 숫자 및 기호 패턴을 일치시켜 비밀을 식별합니다. 이러한 패턴은 비밀의 종류를 식별하는 데에도 사용됩니다. 가짜 비밀인 glpat-12345678901234567890를 프로젝트에 추가하여 이 기능을 테스트해 보겠습니다:

  1. 프로젝트에서 새 브랜치를 확인합니다:

     git checkout -b push-protection-tutorial
    
  2. 정확한 비밀 형식과 일치시키기 위해 - 앞뒤의 공백을 제거한 다음, 다음 내용으로 새 파일을 만듭니다:

     안녕, 세상아!
     glpat-12345678901234567890
    
  3. 파일을 브랜치에 커밋합니다:

     git add .
     git commit -m "가짜 비밀 추가"
    

    이제 비밀이 커밋 기록에 입력되었습니다. 비밀 푸시 보호는 비밀을 커밋하는 것을 막지 않습니다. 대신에 푸시할 때 알림을 보냅니다.

  4. 변경 사항을 GitLab에 푸시합니다. 다음과 같은 내용을 볼 수 있어야 합니다:

     $ git push
     remote: GitLab:
     remote: PUSH BLOCKED: 코드 변경 사항에서 비밀이 감지되었습니다
     remote:
     remote: 비밀 푸시 보호가 커밋에서 다음 비밀을 발견했습니다: 123abc
     remote: -- myFile.txt:2 | GitLab 개인 액세스 토큰
     remote:
     remote: 변경 사항을 푸시하려면 식별된 비밀을 제거해야 합니다.
     To gitlab.com:
     ! [remote rejected] push-protection-tutorial -> main (pre-receive hook declined)
    

    GitLab은 비밀을 감지하고 푸시를 차단합니다. 오류 보고서에서 다음과 같은 정보를 확인할 수 있습니다:

    • 비밀을 포함한 커밋 (123abc)
    • 비밀을 포함한 파일 및 라인 번호 (myFile.txt:2)
    • 비밀의 유형 (GitLab 개인 액세스 토큰)

만약 변경 사항을 성공적으로 푸시했다면, 비밀을 폐기하고 교체하는 데 상당한 시간과 노력을 들여야 했을 것입니다. 대신에, 커밋 기록에서 비밀을 제거했고, 누설을 막았다는 사실을 알고 안심할 수 있습니다.

비밀 푸시 보호 건너뛰기

가끔씩 GitLab이 거짓 양성을 발견했을 때 비밀 푸시 보호를 식별한 커밋을 푸시해야 할 수 있습니다. 이를 위해 마지막 커밋을 GitLab에 푸시해 보겠습니다.

푸시 옵션 사용

푸시 옵션을 사용하여 식별된 비밀을 건너뛸 수 있습니다:

  • secret_detection.skip_all 옵션으로 커밋을 푸시하십시오:

    git push -o secret_detection.skip_all
    

비밀 탐지가 건너뛰어지고 변경 사항이 원격으로 푸시됩니다.

커밋 메시지로

명령줄에 액세스할 수 없거나 푸시 옵션을 사용하고 싶지 않은 경우:

  • 커밋 메시지에 [skip secret push protection] 문자열을 추가하십시오. 예:

    git commit --amend -m "가짜 비밀 추가 [skip secret push protection]"
    

여러 커밋 중 하나의 커밋 메시지에만 [skip secret push protection]을 추가하여 변경 사항을 푸시하는 데 필요합니다.

다음 단계

프로젝트의 보안을 더욱 향상시키기 위해 파이프라인 비밀 탐지를 활성화하는 것을 고려해보세요.