반응형
해당 글에서는 public Repository 내에 민감한 API 키가 올라간 경우 해당 내용을 없애는 방법에 대해 확인해 봅니다.
1) API 키 노출 상황
1. GitGuardian - OpenAI API Key exposed on GitHub
💡 문제 상황
- GitGuardian으로부터 아래와 같은 메시지가 왔습니다.
- 내용은 'OpenAI API Key exposed on GitHub'이라고 이야기하고 있습니다. 말 그대로 multi-flex-chatgpt 레포지토리의 OpenAI API 키가 노출되었다는 이야기입니다.
2. 노출된 파일 확인
💡 노출된 파일 확인
- 문제가 되는 파일은 존재하지 않았습니다.
- 그렇다면 의심해 볼 부분은 이전에 Git Remote 저장소에 키 값이 저장되었다가 이후 다시 Git Remote로 Commit & Push를 통해 해당 내용이 덮어져서 현재 파일에서는 보이지 않을까 라는 의심을 하게 됩니다.
3. Git History 확인
💡Git History 확인
- 해당 문제에 대해 이전부터 Repository를 private로 사용하고 있다가 최근에 public으로 수정을 하였습니다.
- Private Repository에서는 문제가 되지 않지만 Public Repository 내에서는 노출이 되어 발생한 문제고, Git Hisotry 내에도 남아있기에 해당 문제가 발생됨을 확인하였습니다.
2) 해결방법
1. git filter-branch 명령어를 수행합니다.
💡 git filter-branch 명령어를 수행합니다.
- 이는 Git 저장소의 모든 커밋에 대해 필터링 작업을 수행하여 특정 파일의 Git의 히스토리를 '모두 삭제'하는 역할을 수행합니다.
💡 아래의 명령어를 설명합니다.
- Git 저장소에서 특정 파일을 제거하는 데 사용됩니다.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch './src/main/resources/config/application-multiflex-chatgpt-local.yml'" --prune-empty --tag-name-filter cat -- --all
1. git filter-branch : Git 저장소의 모든 커밋에 대해 필터링 작업을 수행하여 다시 쓰기 위한 명령어입니다.
2. —force : 해당 명령어를 강제로 실행하도록 지정합니다.
3. -index-filter : 인덱스를 수정하는 명령어를 지정합니다.
4. "git rm --cached --ignore-unmatch './src/main/resources/config/application-multiflex-chatgpt-local.yml'" : 지정된 파일을 인덱스에서 제거하는 Git 명령어입니다.
5. -prune-empty : 비어있는 커밋을 제거합니다.
6. -tag-name-filter cat : 태그를 다시 쓰기 위한 필터를 지정합니다.
7. - --all: 모든 브랜치와 태그에 대해 적용합니다.
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch './src/main/resources/config/application-multiflex-chatgpt-local.yml'" --prune-empty --tag-name-filter cat -- --all
💡 해당 명령어를 수행하니 아래와 같이 수행되었습니다.
2. 변경사항에 대해 강제로 적용합니다.
💡 변경사항에 대해 강제로 적용합니다.
- 위에 수행 과정 중에 커밋 히스트로리를 지우는데 변경된 정보를 위해 강제로 적용합니다.
- 충돌이 발생하지 않으면 해당 과정을 수행하지 않으셔도 됩니다.
$ git push --force -all
3. 적용된 사항을 확인해 봅니다.
💡 적용 이전
- 아래와 같이 Secret Key가 노출되어 있습니다.
💡 적용 이후
- 아래와 같이 명령어를 적용하여 Git Commit 내용이 사라졌습니다.
오늘도 감사합니다. 😀
반응형
'Github > 이해하기' 카테고리의 다른 글
[Github] .gitignore 파일이 바로 적용이 안될때 해결방법 : git 캐시 삭제 (1) | 2024.01.01 |
---|---|
[Github] 프로젝트 소스코드 줄(라인 수) 세는 방법 (0) | 2023.12.28 |
[Github] Git-flow 브랜치 전략을 변형한 간단한 사용방법(with. JIRA) (1) | 2023.12.28 |
[Github] Git-flow 브랜치 전략을 이용한 사용 예시(with. JIRA) (1) | 2023.12.27 |
[Github] Git 브랜치 전략(Git Branch Strategy) : Git Flow, Github Flow, GitLab Flow, TBD (1) | 2023.12.26 |