튜토리얼: 시크릿 푸시 보호로 프로젝트 보호하기
애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키와 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿 푸시 보호를 사용하면 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_detection.skip_all옵션으로 커밋을 푸시합니다:git push -o secret_detection.skip_all
시크릿 감지가 건너뛰어지고 변경 사항이 원격에 푸시됩니다.
커밋 메시지 사용#
커맨드 라인에 액세스할 수 없거나 푸시 옵션을 사용하지 않으려면:
-
커밋 메시지에
[skip secret push protection]문자열을 추가합니다. 예를 들면:git commit --amend -m "Add fake secret [skip secret push protection]"
여러 커밋이 있더라도 변경 사항을 푸시하려면 커밋 메시지 중 하나에만 [skip secret push protection]을 추가하면 됩니다.
다음 단계#
프로젝트의 보안을 더욱 향상시키려면 파이프라인 시크릿 감지 활성화를 고려해 보세요.
