자습서: 커밋에서 비밀을 제거합니다

애플리케이션이 외부 리소스를 사용하는 경우 일반적으로 비밀 (토큰 또는 키와 같은)을 사용하여 애플리케이션을 인증해야 합니다. 비밀이 원격 저장소에 푸시되면 저장소에 액세스 할 수있는 사람은 누구나 당신이나 애플리케이션을 표절 할 수 있습니다. 비밀을 실수로 커밋하면 여전히 푸시하기 전에 제거할 수 있습니다.

이 자습서에서는 가짜 비밀을 커밋 한 다음 프로젝트에 푸시하기 전에 커밋 기록에서 비밀을 제거하는 방법을 알아볼 것입니다. 또한 비밀이 저장소에 푸시되었을 때 해야 할 일도 배울 것입니다.

::: 이 자습서는 GitLab Unfiltered 비디오 커밋에서 비밀을 제거합니다에서 적용되었습니다.

시작하기 전에

이 자습서를 완료하기 전에 다음 사항이 있는지 확인하세요.

  • 테스트 프로젝트. 모든 프로젝트를 사용할 수 있지만이 자습서를 위해 전용 테스트 프로젝트를 생성하는 것을 고려해보세요.
  • 명령줄 Git을 사용하는 방법에 대해 어느 정도 알고 계셔야 합니다.

비밀 커밋

GitLab은 특정 문자, 숫자 및 기호 패턴과 일치시켜 비밀을 식별합니다. 이러한 패턴은 비밀의 유형을 식별하는 데도 사용됩니다. 예를 들어 가짜 비밀 glpat-12345678901234567890glpat- 문자열로 시작하기 때문에 개인 액세스 토큰입니다.

형식에 따라 많은 비밀을 식별 할 수 있지만 저장소에서 작업하는 동안 실수로 비밀을 커밋 할 수 있습니다. 우리는 실수로 비밀을 커밋 한 것으로 시뮬레이션 해 봅시다.

  1. 테스트 저장소에서 새 브랜치를 체크 아웃 하세요.

    git checkout -b secret-tutorial
    
  2. 다음 내용으로 새 텍스트 파일을 만들고, 개인 액세스 토큰의 정확한 형식과 일치하도록 - 앞뒤의 공백을 제거하세요.

    가짜 비밀: glpat - 12345678901234567890
    메시지: hello, world!
  3. 파일을 브랜치에 커밋하세요.

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

우리는 문제가 있는 상황을 만들었습니다: 변경 사항을 푸시하면 텍스트 파일에 커밋한 개인 액세스 토큰이 노출됩니다! 진행하기 전에 커밋 기록에서 비밀을 제거해야 합니다.

기록에서 비밀 제거

Git 기록에서 비밀이 포함 된 유일한 커밋이 최근 커밋 인 경우, 기록을 수정하여 비밀을 제거 할 수 있습니다.

  1. 텍스트 파일을 열고 가짜 비밀을 제거하세요.

    가짜 비밀:
    메시지: hello, world!
  2. 변경된 내용으로 이전 커밋을 덮어쓰세요.

    git add .
    git commit --amend
    

비밀은 파일과 커밋 기록에서 제거되어 안전하게 변경 사항을 푸시 할 수 있습니다.

여러 커밋 수정

가끔은 여러 추가 커밋을 만든 후에 비밀이 추가되었음을 알게 될 때가 있습니다. 이런 경우, 가장 최근의 커밋에서 비밀을 제거하는 것만으로 충분하지 않습니다. 비밀이 추가된 후의 모든 커밋을 변경해야 합니다.

  1. 가짜 비밀을 파일에 추가하고 브랜치에 커밋하세요.
  2. 최소한 한 번의 추가 커밋을 만드세요. 기록을 검사하면 다음과 유사한 내용이 표시됩니다.

    $ git log
    커밋 456def
    
        다른 것들을 수행
    
    커밋 123abc
    
        가짜 비밀 추가
    
    ...
    

    456def 커밋에서 비밀을 제거 해도 여전히 기록에 존재하며 현재 변경 사항을 푸시하면 노출될 것입니다.

  3. 기록을 수정하려면 비밀을 도입한 커밋부터 대화식 리베이스를 시작하세요.

    git rebase -i 123abc~1
    
  4. 수정 창에서 비밀을 포함하는 모든 커밋에 대해 pickedit로 변경하세요.

    edit 456def 다른 것들을 수행
    edit 123abc 가짜 비밀 추가
  5. 텍스트 파일을 열고 가짜 비밀을 제거하세요.
  6. 변경 사항을 커밋하세요.

    git add .
    git commit --amend
    
  7. (옵션) 비밀을 삭제하면 커밋에 유일한 ​​차이가 사라질 수 있습니다. 이런 경우 Git은 다음과 같은 메시지를 표시합니다.

    변경 사항 없음
    최신 커밋을 수정하도록 요청했지만 그렇게 하면 비어있는 커밋이됩니다.
    

    빈 커밋을 제거하세요.

    git reset HEAD^
    
  8. 리베이스를 계속하세요.

    git rebase --continue
    
  9. 다음 커밋에서 비밀을 제거하고 리베이스를 계속하세요. 리베이스가 완료 될 때 까지이 프로세스를 반복하세요.

    성공적으로 리베이스가 완료되어 refs/heads/secret-tutorial이() 업데이트되었습니다.
    

비밀이 제거되었으며 변경 사항을 안전하게 원격 저장소에 푸시 할 수 있습니다.

비밀을 푸시 한 경우 해야 할 일

가끔은 비밀을 포함 한 상태로 변경 사항을 푸시하기도 합니다. 프로젝트에서 비밀 푸시 보호가 활성화 된 경우, 푸시가 자동으로 차단되고 문제가있는 커밋이 표시됩니다.

그러나 비밀이 원격 저장소에 성공적으로 푸시되면 더는 안전하지 않으며 즉시 취소해야 합니다. 비밀에 액세스 할 수있는 사람이 많지 않다고 생각하더라도 교체해야 합니다. 노출된 비밀은 심각한 보안 위험이 됩니다.

다음 단계

애플리케이션 보안을 개선하려면 프로젝트의 비밀 탐지 방법 중 하나를 활성화하는 것을 고려해 보세요.