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

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 비밀(예: 토큰 또는 키)로 애플리케이션을 인증해야 합니다. 비밀이 원격 저장소에 푸시되면, 저장소에 접근할 수 있는 누구나 당신이나 당신의 애플리케이션을 가장할 수 있습니다.

비밀 푸시 보호를 사용하면, GitLab이 커밋 기록에서 비밀을 감지할 경우 푸시를 차단하여 유출을 방지할 수 있습니다. 비밀 푸시 보호를 활성화하는 것은 민감한 데이터에 대한 커밋을 검토하고 유출이 발생할 경우 이를 수정하는 데 필요한 시간을 줄이는 좋은 방법입니다.

이 튜토리얼에서는 비밀 푸시 보호를 구성하고 가짜 비밀을 커밋하려고 할 때 어떤 일이 발생하는지 확인합니다.

또한, 잘못된 긍정 결과를 우회해야 할 경우 비밀 푸시 보호를 건너뛰는 방법도 배웁니다.

이 튜토리얼은 다음 GitLab Unfiltered 비디오에서 수정되었습니다:

시작하기 전에

이 튜토리얼을 완료하기 전에 다음을 준비하세요:

  • GitLab Ultimate 구독.
  • 테스트 프로젝트. 원하는 프로젝트를 사용할 수 있지만, 이 튜토리얼을 위해 특별히 테스트 프로젝트를 만드는 것을 고려하세요.
  • 명령줄 Git에 대한 약간의 이해.

또한, self-managed GitLab에서만 비밀 푸시 보호가 인스턴스에서 활성화되어 있는지 확인하세요.

비밀 푸시 보호 활성화

비밀 푸시 보호를 사용하려면 보호할 각 프로젝트에 대해 활성화해야 합니다.

테스트 프로젝트에서 이를 활성화하도록 하겠습니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Secure > 보안 구성을 선택합니다.

  3. 비밀 푸시 보호 토글을 켭니다.

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

프로젝트에 비밀 푸시하기 시도

GitLab은 특정 문자, 숫자 및 기호의 패턴을 일치시켜 비밀을 식별합니다. 이러한 패턴은 비밀 유형을 식별하는 데에도 사용됩니다.

가짜 비밀 glpat-12345678901234567890를 프로젝트에 추가하여 이 기능을 테스트해 보겠습니다:

  1. 프로젝트에서 새 브랜치를 체크아웃합니다:

    git checkout -b push-protection-tutorial
    
  2. 다음 내용을 포함하는 새 파일을 생성하되, 개인 액세스 토큰의 정확한 형식을 맞추기 위해 - 전에 있는 공백과 후에 있는 공백을 제거합니다:

    hello, world!
    glpat - 12345678901234567890
    
  3. 파일을 브랜치에 커밋합니다:

    git add .
    git commit -m "Add fake secret"
    

    이제 비밀이 커밋 기록에 입력되었습니다. 비밀 푸시 보호는 비밀을 커밋하는 것을 막지 않으며, 푸시할 때 경고를 보냅니다.

  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]을 추가하면 됩니다.

다음 단계

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