[github] API key를 git에 올린 경우 commit 기록 삭제하기

 

깃허브에 API 키를 올렸다?! 당황하지 않고 해결하는 방법

개발을 하다 보면 예기치 못한 실수를 저지르는 경우가 종종 있다. 그중 하나가 바로 API 키를 깃허브에 올리는 치명적인 실수다. API 키는 애플리케이션의 중요한 정보를 담고 있어 외부에 노출될 경우 심각한 보안 문제를 야기할 수 있다. 만약 API 키를 깃허브에 올렸다면 당황하지 않고 다음 단계를 따라 해결해보자.

1. 현재 상황 파악하기


firebase를 쓰려고 필요한 패키지를 다운받고 commit을 했더니 온 한 메일...
!?


API 키가 노출된 것을 확인했다면 가장 먼저 해야 할 일은 침착하게 현재 상황을 파악하는 것이다. 어떤 파일에서 API 키가 노출되었는지, 어떤 커밋에서 문제가 발생했는지 확인해야 한다. 깃허브의 히스토리 기능을 이용하면 커밋 기록을 쉽게 추적할 수 있다.
(vscode의 extension 중 'Git graph'를 사용하면 visualize하기 쉽다)

git graph


2. API 키가 노출되지 않은 안전한 커밋으로 이동하기

깃허브 히스토리에서 API 키가 노출되지 않은 가장 최근 커밋을 찾았다면, git checkout <commit hash> 명령어를 사용하여 해당 커밋으로 이동한다. <commit hash>는 히스토리에서 확인한 커밋의 고유한 해시 값을 의미한다. 이 명령어를 실행하면 로컬 저장소의 main 브랜치가 해당 커밋으로 이동하게 된다.
(Git graph에서는 단순히 우클릭 만으로 checkout이 가능하다)

checkout


3. API 키를 안전하게 제거하고 다시 커밋하기(커밋만!!)

이제 API 키가 노출된 파일을 수정해야 한다. API 키를 제거하거나, 더미 데이터로 변경하여 다시 커밋한다. 이때, 커밋 메시지에 API 키 제거와 관련된 내용을 명확하게 작성하는 것이 좋다.


커밋을 하면 다음과 같이 파란색 로컬 브랜치와 분홍색 원격 브랜치로 나뉘는 것을 볼 수 있다.

local vs remote


4. 로컬과 클라우드 브랜치의 충돌 해결하기

API 키를 제거하고 다시 커밋했다면, 로컬 저장소의 main 브랜치와 깃허브 클라우드의 main 브랜치는 서로 다른 상태가 된다. 이 상태에서 단순히 git push 명령어를 사용하면 충돌이 발생하게 된다. 따라서 git push -f origin main 명령어를 사용하여 로컬 브랜치의 커밋 기록을 클라우드에 강제로 반영해야 한다.

-f 옵션은 --force 옵션의 줄임말로, 로컬 브랜치의 변경 사항을 클라우드 브랜치에 강제로 덮어쓰도록 지시한다. 이 명령어를 실행하면 API 키가 노출된 커밋 기록이 삭제되고, API 키가 제거된 상태의 커밋 기록으로 대체된다.

분홍색 branch는 사라지고 하나로 합쳐진 모습!



주의: 이번 경우는 API key가 노출된 이후 거의 바로 인지한 덕분에 별 걱정 없이 사용할 수 있었다. 하지만 git push -f 명령어는 클라우드 저장소의 기록을 덮어쓰므로 주의해서 사용해야 한다. 협업 중인 프로젝트의 경우, 다른 개발자들에게 이 명령어를 사용할 것임을 미리 알리고 충돌을 방지해야 한다.



5. 다시 한번 확인은 필수!

git push -f origin main 명령어를 실행한 후, 깃허브 저장소에서 API 키가 제거되었는지 다시 한번 확인한다.(반영된 줄 알았는데 다시 가보니 그대로인 삽질 ㅠㅠ)
히스토리에서 API 키가 포함된 커밋이 삭제되었는지, 파일에서 API 키가 제거되었는지 꼼꼼하게 확인해야 한다.

반영이 완료된 모습



패키지를 다운받았더니 거기에 API 키가 들어가 있었을 줄이야... 이번 기회로 git에 대해 하나 더 배워간다.

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2