InfoGrab Docs

튜토리얼: 커밋에서 시크릿 제거하기

요약

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 이 튜토리얼에서는 가짜 시크릿을 커밋한 다음, 프로젝트에 푸시하기 전에 커밋 기록에서 시크릿을 제거합니다.

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿이 원격 저장소에 푸시되면 저장소에 액세스할 수 있는 누구든 여러분이나 애플리케이션을 사칭할 수 있습니다. 실수로 시크릿을 커밋한 경우, 푸시하기 전에 여전히 제거할 수 있습니다.

이 튜토리얼에서는 가짜 시크릿을 커밋한 다음, 프로젝트에 푸시하기 전에 커밋 기록에서 시크릿을 제거합니다. 또한 시크릿이 저장소에 푸시된 경우 수행할 작업을 알아봅니다.

이 튜토리얼은 GitLab Unfiltered 비디오 Remove a secret from your commits를 참고하여 제작되었습니다.

시작하기 전에#

이 튜토리얼을 완료하기 전에 다음 사항을 확인하세요:

  • 테스트 프로젝트. 원하는 프로젝트를 사용할 수 있지만, 이 튜토리얼을 위해 특별히 테스트 프로젝트를 만드는 것을 고려하세요.
  • 커맨드라인 Git에 대한 어느 정도의 친숙함.

시크릿 커밋#

GitLab은 특정 문자, 숫자, 기호 패턴을 매칭하여 시크릿을 식별합니다. 이러한 패턴은 시크릿의 유형을 식별하는 데도 사용됩니다. 예를 들어 가짜 시크릿 glpat-12345678901234567890 glpat- 문자열로 시작하므로 개인 액세스 토큰입니다.

많은 시크릿을 형식으로 식별할 수 있지만, 저장소에서 작업하는 동안 실수로 시크릿을 커밋할 수 있습니다. 실수로 시크릿을 커밋하는 것을 시뮬레이션해 보겠습니다:

  1. 테스트 저장소에서 새 브랜치를 체크아웃합니다:

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

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

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

이렇게 하면 문제가 발생합니다: 변경 사항이 푸시되면 텍스트 파일의 개인 액세스 토큰이 유출됩니다! 진행하기 전에 커밋 기록에서 시크릿을 제거해야 합니다.

기록에서 시크릿 제거#

시크릿이 포함된 유일한 커밋이 Git 기록의 가장 최근 커밋인 경우, 기록을 수정하여 제거할 수 있습니다:

  1. 텍스트 파일을 열고 가짜 시크릿을 제거합니다:

    fake-secret:
    message: hello, world!
    
  2. 변경 사항으로 이전 커밋을 덮어씁니다:

    git add .
    git commit --amend
    

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

여러 커밋 수정#

때로는 여러 번의 추가 커밋을 한 후에야 시크릿이 추가되었다는 것을 알아챌 수 있습니다. 이 경우 가장 최근 커밋에서 시크릿을 삭제하는 것만으로는 충분하지 않습니다. 시크릿이 추가된 이후의 모든 커밋에 변경 사항을 적용해야 합니다:

  1. 파일에 가짜 시크릿을 추가하고 브랜치에 커밋합니다.

  2. 최소 한 번 이상의 추가 커밋을 만듭니다. 기록을 검사하면 다음과 같은 내용이 표시됩니다:

    $ git log
    commit 456def
    
        Do other things
    
    commit 123abc
    
        Add fake secret
    
    ...
    

    456def 커밋에서 시크릿을 제거하더라도 기록에 여전히 존재하며 지금 변경 사항을 푸시하면 노출됩니다.

  3. 기록을 수정하려면 시크릿을 도입한 커밋에서 대화형 리베이스를 시작합니다:

    git rebase -i 123abc~1
    
  4. 편집 창에서 시크릿이 포함된 모든 커밋에 대해 pickedit으로 변경합니다:

    edit 456def Do other things
    edit 123abc Add fake secret
    
  5. 텍스트 파일을 열고 가짜 시크릿을 제거합니다.

  6. 변경 사항을 커밋합니다:

    git add .
    git commit --amend
    
  7. 선택 사항. 시크릿을 삭제할 때 커밋의 유일한 diff가 제거될 수 있습니다. 이 경우 Git은 다음 메시지를 표시합니다:

    No changes
    You asked to amend the most recent commit, but doing so would make it empty.
    

    빈 커밋을 제거합니다:

    git reset HEAD^
    
  8. 리베이스를 계속합니다:

    git rebase --continue
    
  9. 다음 커밋에서 시크릿을 제거하고 리베이스를 계속합니다. 리베이스가 완료될 때까지 이 과정을 반복합니다:

    Successfully rebased and updated refs/heads/secret-tutorial
    

시크릿이 제거되어 원격에 변경 사항을 안전하게 푸시할 수 있습니다.

시크릿을 푸시했을 때 해야 할 일#

때로는 변경 사항이 시크릿을 포함하고 있다는 것을 알아채기 전에 변경 사항을 푸시하는 경우가 있습니다. 프로젝트에서 시크릿 푸시 보호가 활성화된 경우, 푸시가 자동으로 차단되고 위반 커밋이 표시됩니다.

그러나 시크릿이 원격 저장소에 성공적으로 푸시된 경우, 더 이상 안전하지 않으므로 즉시 취소해야 합니다. 많은 사람들이 시크릿에 액세스하지 않았다고 생각하더라도 교체해야 합니다. 노출된 시크릿은 상당한 보안 위험입니다.

다음 단계#

애플리케이션 보안을 개선하려면 프로젝트에서 시크릿 감지 방법 중 하나 이상을 활성화하는 것을 고려하세요.

튜토리얼: 커밋에서 시크릿 제거하기

원문 보기
요약

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 이 튜토리얼에서는 가짜 시크릿을 커밋한 다음, 프로젝트에 푸시하기 전에 커밋 기록에서 시크릿을 제거합니다.

애플리케이션이 외부 리소스를 사용하는 경우, 일반적으로 토큰이나 키 같은 시크릿으로 애플리케이션을 인증해야 합니다. 시크릿이 원격 저장소에 푸시되면 저장소에 액세스할 수 있는 누구든 여러분이나 애플리케이션을 사칭할 수 있습니다. 실수로 시크릿을 커밋한 경우, 푸시하기 전에 여전히 제거할 수 있습니다.

이 튜토리얼에서는 가짜 시크릿을 커밋한 다음, 프로젝트에 푸시하기 전에 커밋 기록에서 시크릿을 제거합니다. 또한 시크릿이 저장소에 푸시된 경우 수행할 작업을 알아봅니다.

이 튜토리얼은 GitLab Unfiltered 비디오 Remove a secret from your commits를 참고하여 제작되었습니다.

시작하기 전에#

이 튜토리얼을 완료하기 전에 다음 사항을 확인하세요:

  • 테스트 프로젝트. 원하는 프로젝트를 사용할 수 있지만, 이 튜토리얼을 위해 특별히 테스트 프로젝트를 만드는 것을 고려하세요.
  • 커맨드라인 Git에 대한 어느 정도의 친숙함.

시크릿 커밋#

GitLab은 특정 문자, 숫자, 기호 패턴을 매칭하여 시크릿을 식별합니다. 이러한 패턴은 시크릿의 유형을 식별하는 데도 사용됩니다. 예를 들어 가짜 시크릿 glpat-12345678901234567890 glpat- 문자열로 시작하므로 개인 액세스 토큰입니다.

많은 시크릿을 형식으로 식별할 수 있지만, 저장소에서 작업하는 동안 실수로 시크릿을 커밋할 수 있습니다. 실수로 시크릿을 커밋하는 것을 시뮬레이션해 보겠습니다:

  1. 테스트 저장소에서 새 브랜치를 체크아웃합니다:

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

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

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

이렇게 하면 문제가 발생합니다: 변경 사항이 푸시되면 텍스트 파일의 개인 액세스 토큰이 유출됩니다! 진행하기 전에 커밋 기록에서 시크릿을 제거해야 합니다.

기록에서 시크릿 제거#

시크릿이 포함된 유일한 커밋이 Git 기록의 가장 최근 커밋인 경우, 기록을 수정하여 제거할 수 있습니다:

  1. 텍스트 파일을 열고 가짜 시크릿을 제거합니다:

    fake-secret:
    message: hello, world!
    
  2. 변경 사항으로 이전 커밋을 덮어씁니다:

    git add .
    git commit --amend
    

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

여러 커밋 수정#

때로는 여러 번의 추가 커밋을 한 후에야 시크릿이 추가되었다는 것을 알아챌 수 있습니다. 이 경우 가장 최근 커밋에서 시크릿을 삭제하는 것만으로는 충분하지 않습니다. 시크릿이 추가된 이후의 모든 커밋에 변경 사항을 적용해야 합니다:

  1. 파일에 가짜 시크릿을 추가하고 브랜치에 커밋합니다.

  2. 최소 한 번 이상의 추가 커밋을 만듭니다. 기록을 검사하면 다음과 같은 내용이 표시됩니다:

    $ git log
    commit 456def
    
        Do other things
    
    commit 123abc
    
        Add fake secret
    
    ...
    

    456def 커밋에서 시크릿을 제거하더라도 기록에 여전히 존재하며 지금 변경 사항을 푸시하면 노출됩니다.

  3. 기록을 수정하려면 시크릿을 도입한 커밋에서 대화형 리베이스를 시작합니다:

    git rebase -i 123abc~1
    
  4. 편집 창에서 시크릿이 포함된 모든 커밋에 대해 pickedit으로 변경합니다:

    edit 456def Do other things
    edit 123abc Add fake secret
    
  5. 텍스트 파일을 열고 가짜 시크릿을 제거합니다.

  6. 변경 사항을 커밋합니다:

    git add .
    git commit --amend
    
  7. 선택 사항. 시크릿을 삭제할 때 커밋의 유일한 diff가 제거될 수 있습니다. 이 경우 Git은 다음 메시지를 표시합니다:

    No changes
    You asked to amend the most recent commit, but doing so would make it empty.
    

    빈 커밋을 제거합니다:

    git reset HEAD^
    
  8. 리베이스를 계속합니다:

    git rebase --continue
    
  9. 다음 커밋에서 시크릿을 제거하고 리베이스를 계속합니다. 리베이스가 완료될 때까지 이 과정을 반복합니다:

    Successfully rebased and updated refs/heads/secret-tutorial
    

시크릿이 제거되어 원격에 변경 사항을 안전하게 푸시할 수 있습니다.

시크릿을 푸시했을 때 해야 할 일#

때로는 변경 사항이 시크릿을 포함하고 있다는 것을 알아채기 전에 변경 사항을 푸시하는 경우가 있습니다. 프로젝트에서 시크릿 푸시 보호가 활성화된 경우, 푸시가 자동으로 차단되고 위반 커밋이 표시됩니다.

그러나 시크릿이 원격 저장소에 성공적으로 푸시된 경우, 더 이상 안전하지 않으므로 즉시 취소해야 합니다. 많은 사람들이 시크릿에 액세스하지 않았다고 생각하더라도 교체해야 합니다. 노출된 시크릿은 상당한 보안 위험입니다.

다음 단계#

애플리케이션 보안을 개선하려면 프로젝트에서 시크릿 감지 방법 중 하나 이상을 활성화하는 것을 고려하세요.