튜토리얼: 시크릿 푸시 보호로 프로젝트 보호하기
GitLab v19.5요약
애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키와 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿 푸시 보호를 사용하면 GitLab이 커밋 히스토리에서 시크릿을 탐지했을 때 누출을 막기 위해 푸시를 차단할 수 있습니다.
애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키와 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿이 원격 리포지터리에 푸시되면 해당 리포지터리에 접근할 수 있는 누구나 사용자 본인이나 애플리케이션을 사칭할 수 있습니다.
시크릿 푸시 보호를 사용하면 GitLab이 커밋 히스토리에서 시크릿을 탐지했을 때 누출을 막기 위해 푸시를 차단할 수 있습니다. 시크릿 푸시 보호를 활성화하면 민감한 데이터가 있는지 커밋을 검토하고 누출이 발생했을 때 조치하는 데 드는 시간을 줄일 수 있습니다.
이 튜토리얼에서는 시크릿 푸시 보호를 구성하고 가짜 시크릿을 커밋하려 할 때 어떤 일이 발생하는지 확인합니다. 또한 오탐을 우회해야 하는 경우에 대비하여 시크릿 푸시 보호를 건너뛰는 방법도 알아봅니다.
이 튜토리얼은 다음 GitLab Unfiltered 동영상을 바탕으로 작성했습니다:
시작하기 전에#
이 튜토리얼을 시작하기 전에 다음 사항을 확인합니다:
- GitLab Ultimate 구독.
- 테스트 프로젝트. 원하는 프로젝트를 사용할 수 있지만, 이 튜토리얼 전용 테스트 프로젝트를 만드는 방안을 고려합니다.
- 커맨드 라인 Git에 대한 기본적인 이해.
또한 GitLab Self-Managed에서만 시크릿 푸시 보호가 인스턴스에서 활성화되어 있는지 확인합니다.
시크릿 푸시 보호 활성화#
시크릿 푸시 보호를 사용하려면 보호하려는 각 프로젝트에서 활성화해야 합니다. 먼저 테스트 프로젝트에서 활성화합니다.
- 상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Secure > Security configuration을 선택합니다.
- Secret push protection 토글을 켭니다.
다음으로 시크릿 푸시 보호를 테스트합니다.
프로젝트에 시크릿 푸시 시도#
GitLab은 글자, 숫자, 기호의 특정 패턴을 매칭하여 시크릿을 식별합니다. 이러한 패턴은
시크릿의 유형을 식별하는 데에도 사용됩니다.
가짜 시크릿 glpat-12345678901234567890을 프로젝트에 추가하여 이 기능을 테스트합니다:
-
프로젝트에서 새 브랜치를 체크아웃합니다:
git checkout -b push-protection-tutorial -
다음 내용으로 새 파일을 만듭니다. 개인 액세스 토큰의 정확한 형식과 일치하도록
-앞뒤의 공백을 반드시 제거합니다:hello, world! # To make the example work, remove # the spaces before and after the dash: glpat - 12345678901234567890 -
파일을 브랜치에 커밋합니다:
git add . git commit -m "Add fake secret"이제 시크릿이 커밋 히스토리에 기록되었습니다. 시크릿 푸시 보호는 시크릿을 커밋하는 것 자체를 막지는 않으며, 푸시할 때만 알립니다.
-
변경 사항을 GitLab에 푸시합니다. 다음과 같은 내용이 표시됩니다:
$ git push remote: GitLab: remote: PUSH BLOCKED: Secrets detected in code changes remote: remote: Secret push protection found the following secrets in commit: 123abc remote: -- myFile.txt:2 | GitLab Personal Access Token remote: remote: To push your changes you must remove the identified secrets. To gitlab.com: ! [remote rejected] push-protection-tutorial -> main (pre-receive hook declined)GitLab이 시크릿을 탐지하고 푸시를 차단합니다. 오류 보고서에서 다음을 확인할 수 있습니다:
- 시크릿이 포함된 커밋(
123abc) - 시크릿이 포함된 파일 및 줄 번호(
myFile.txt:2) - 시크릿의 유형(
GitLab Personal Access Token)
- 시크릿이 포함된 커밋(
변경 사항이 그대로 푸시되었다면 시크릿을 폐기하고 교체하는 데 상당한 시간과 노력이 필요했을 것입니다. 대신 커밋 히스토리에서 시크릿을 제거하고 시크릿 누출을 막았다는 사실에 안심할 수 있습니다.
시크릿 푸시 보호 건너뛰기#
시크릿 푸시 보호가 시크릿을 식별했더라도 커밋을 푸시해야 할 때가 있습니다. GitLab이 오탐을 탐지한 경우가 그렇습니다. 이를 보여 주기 위해 마지막 커밋을 GitLab에 푸시합니다.
푸시 옵션 사용#
푸시 옵션을 사용하여 시크릿 푸시 보호를 건너뛸 수 있습니다:
-
secret_push_protection.skip_all옵션으로 커밋을 푸시합니다:git push -o secret_push_protection.skip_all
시크릿 푸시 보호를 건너뛰고 변경 사항이 원격에 푸시됩니다.
커밋 메시지 사용#
커맨드 라인에 액세스할 수 없거나 푸시 옵션을 사용하지 않으려는 경우:
-
커밋 메시지에
[skip secret push protection]문자열을 추가합니다. 예를 들면 다음과 같습니다:git commit --amend -m "Add fake secret [skip secret push protection]"
커밋이 여러 개이더라도 변경 사항을 푸시하려면 커밋 메시지 중 하나에만 [skip secret push protection]을 추가하면 됩니다.
다음 단계#
프로젝트의 보안을 더욱 강화하려면 파이프라인 시크릿 탐지 활성화를 고려합니다.