Android Studio 파일을 GitHub에 push할 때 유의할 점

2024. 4. 22. 03:58·IDE

천문대에 가서 겨울밤에 직접 폰으로 찍은 별사진

 

반갑습니다 ㅎㅎ

위에 별 사진 너무 예쁘죠? 종종 저는 하늘을 올려다 보는데
별과 달을 보면 진짜 행복해져요. 너무 소녀감성인가요 ㅋㅋ

아무튼, 제 블로그는 개발 정보 블로그지만 소통하는 것도 엄청 좋아하니까
많은 관심 부탁드립니다 '~'

 

1. 상황

오늘도 어김없이 학부생 때 진행했던 안드로이드 프로젝트를 깃허브에 push 하려던 참이었습니다. 이전에 한 번 해보았던 경험이 있어서 깃허브에 push 하는 것 자체는 어려운 일은 아니었죠.

 

중간에 안드로이드 스튜디오에 VCS 탭이 안보여서 꽤나 고생했지만,

글 내용을 통일시키고 싶은 마음에 다음편에 해당 내용을 다루겠습니다...

 

그런데, 깃허브에 push 하자마자 깃허브에 연동된 메일계정으로 이메일이 하나 도착했습니다.

 

내용을 대략 요약하자면, "너가 방금 push한 코드에 노출되어선 안되는 개인정보가 포함되어 있어. 해당 정보는 누구나 읽을 수 있으니까 한 번 확인해볼래?" 였습니다.

 

검색해보니, 제가 구글 맵 API key를 그대로 public repository에 push하여 누군가 저의 API key를 악용할 수도 있다는군요.

 

2. 전개

 

국내 커뮤니티에선 해당 상황을 다루고 있는 글들이 많이 없어서 stack overflow부터 다양한 해외 커뮤니티까지 열심히 뒤져가며 공부하였습니다 ㅠㅠ

 

다음은 제가 알게 된 정보들입니다.

  • 어떤 분께서는 GCP(구글 클라우드 플랫폼) API key가 유출된지 한시간도 채 지나지 않았음에도 몇십만원의 요금이 청구되었다고 합니다.
  • GCP(구글 클라우드 플랫폼)에서 사용자를 인증(신원을 보장?)하는 다양한 방법이 있는데 하나는 API key가 있고 또 다른 하나는 서비스 계정 key가 있습니다. 이거 말고도 더 있습니다. 각각 다른 용도에 따라 쓰시면 될 것 같아요.
    • API key: 할당량과 액세스 권한을 확인하기 위해 간단한 API 키로 프로젝트를 확인합니다. Google 번역과 같은 API에 사용됩니다.
    • 서비스 계정 key: 로봇 계정을 사용하여 서버 간의 앱 수준 인증을 사용 설정합니다. Google Cloud API에 사용됩니다.
    • (이건 제 사견입니다) 뭔가 API key는 Google 번역이나 Google map 같은 가벼운 api (단방향으로 정보만 받게되는)를 사용할 때 인증하는 key 인 것 같습니다.. 반면, 서비스 계정 key는 Google Cloud api 같은 무거운 api (양방향으로 데이터를 주고받는) 를 사용할 때 인증하는 key 인 것 같아요. Google Cloud Platform은 저도 한 번도 사용해보지 않아 잘 모르지만 머신러닝도 사용할 수 있고 데이터베이스도 이용할 수 있어서 사용자 인증 절차가 보안상(?) 더 까다로울 것 같은 느낌이 듭니다. 그리고 검색엔진을 통해 이곳저곳 커뮤니티를 돌아다니다 보니 api key가 유출되고 일정 금액이 청구된 분들은 API key가 아닌 서비스 계정 key가 유출된 것 같더라구요..
하하.. 여러분.. 여기까지 글을 작성하다가 
API key와 서비스 계정 key가 뭐가 어떻게 구체적으로 다른지 정확하게 알고싶다는 오기가 생겨서 구글 공식 문서를 찾아보니.... 엄청 편리하게 설명이 되어있네요.. 하지만 제가 지금까지 쓴 글이 아깝기도 하고 저의 사고흐름이 잘 드러나있어서 삭제는 안했습니다... 부디 부정확한 제 생각을 주절주절 써 피로감을 드린 점 너그러이 용서해주시길 바랍니다. 해당 문서에 대한 제 나름의 해석은 다음편에 기재하도록 하겠습니다. 
해당 구글 문서 링크입니다:  https://developers.google.com/identity/protocols/oauth2?hl=ko 

 

  • 구글 클라우드 플랫폼의 key가 유출되신 분들이 요금을 청구받게 된 경로는 제가 추측하기론, 해커가 해당 key를 가지고 구글 클라우드 플랫폼 상의 여러 유료 api를 사용해서 요금을 청구받은 것 같습니다. 수업시간에 배운 지식을 되새겨보자면 구글 클라우드의 머신러닝과 데이터베이스 등 다양한 기능은 사용자가 사용한 시간과 데이터의 양에 따라 비용이 상이하게 책정되는 것으로 기억합니다.  

다음은 제가 궁금했던 점과 구글링을 통해 얻은 그에 대한 제 나름의 답변입니다.

  • 해커가 내 구글 maps API key를 어떻게 악용하는데?
    • 해커에겐 서비스계정 key가 아닌, API key는 악용하기엔 그다지 매력적이지 않은 정보이니(딱히 악용할만한 자원이 없다..?) 걱정하지 않아도 좋을 듯 합니다.
  • 내 구글 API key가 유출이 된다면, 내가 이용한 구글 maps 이외의 다른 라이브러리도 해커가 사용할 수 있는걸까?
    • (제 사견입니다.) 아마 그럴 것 같습니다.
  • 요금은 어떻게 청구되는건데? 요금이 청구된다면 유출된 이후 몇일이 지나 청구될까?
    • 만약 해커에게 서비스계정 key가 있다면 위 서술했던 구글 클라우드 플랫폼의 여러 유료 api(AI, 머신러닝, 데이터베이스 등)를 사용하여 요금이 해당 서비스계정 key를 생성한 사람에게 부과되고 이는 구글 공식 문서에 요금 청구 날짜가 기재되어 있습니다.
    • 추가로 덧붙이자면, 구글 클라우드 지원팀에서 부적절한 목적으로 해당 key가 사용된다면 알림 메일이 보내지는 것 같습니다.
  • 만약, 이미 내 API key가 누군가의 손에 들어갔다면 나는 어떻게 해야하는거지.
    • 해당 API key를 삭제합니다.
    • 해당 API key를 실수로 온라인 커뮤니티에 업로드하였다면 해당 글을 삭제합시다.
      • GitHub의 경우, 글을 '수정'만 하게 되면 commit 내역에 이전 key 정보들이 그대로 보관되니, 이전 commit 내역까지 삭제해야 합니다.
      • 저 같은 경우, 소스코드가 제 드라이브에 있어서 repository를 삭제하였습니다.
아.. 또 글을 여기까지 작성하고 다시 구글링을 통해 확인해보니, 해커가 구글 클라우드 플랫폼의 유료 api를 이용하려는 목적으로만 서비스 계정 key를 탈취한 건 아닌 듯 합니다... 암호화폐를 채굴하는데에 해당 key를 사용하고 있는가본데 관련내용 또한 제가 제대로 알아온 후 이 글에 덧붙여 작성하거나 새로 글을 쓰겠습니다.

 

3. 결론

  • GitHub에 내가 한 프로젝트를 업로드할 때는 Sign key, API key, token 등을 하드코딩 하지말고 숨겨서 push 합시다.
  • 이미 실수로 push 했다면, 해당 key나 token을 이용하지 못하게 삭제하고 온라인 상에서 민감한 정보가 남아있지 않도록 기록을 삭제합시다.

 

4. 소감

 

저와 에러와의 싸움을 기록하고자 시작한 블로그지만, 그래도 많은 분들께서 도움을 얻어가셨으면 하는 마음에 나름 공부해와서 글을 작성했는데, 말이 횡설수설하고 내용도 난잡한 것 같네요.. 심지어 정확한 공식 정보가 아닌 개인적인 사견이 잔뜩 들어갔습니다.

 

뭔가 정확한 정보전달에 대한 책임을 다하지 않은 것 같아 죄책감이 느껴집니다 ㅠㅠ

 

이 글을 읽으시는 모든 분들께.. 해당 글에 잘못된 정보나 오타가 있을 경우, 언제든지 편하게 말씀해주시면 감사한 마음으로 수용하고 바로잡겠습니다.

 

또, 저는 다른 사람들에게 어떻게 하면 내가 말하고자 하는 바가 명확하고 매끄럽게 전달이 될까 늘 고민하고 그에 대해 자부심을 느끼고 있으니, 매끄럽지 못한 표현 혹은 이해가 가지 않는 문장이 있다면 지적해주시면 감사하겠습니다.

 

아직 초보 개발자라 그다지 유용한 글은 아니지만, 참고 읽어주신 분들께 정말 감사합니다.

'IDE' 카테고리의 다른 글

Eclipse: for문을 사용해 150번 반복할 때, 149번째 값 보는 법  (1) 2024.11.30
이클립스에서 Spring Project를 Tomcat 서버와 연동할 수 없을 때  (0) 2024.07.29
Android Studio에 VCS 탭이 안보일 때 해결법  (0) 2024.04.22
'IDE' 카테고리의 다른 글
  • Eclipse: for문을 사용해 150번 반복할 때, 149번째 값 보는 법
  • 이클립스에서 Spring Project를 Tomcat 서버와 연동할 수 없을 때
  • Android Studio에 VCS 탭이 안보일 때 해결법
빙봉이
빙봉이
개발 관련 내용 80퍼센트, 저의 일상 내용 20퍼센트로 컨텐츠 비율을 조절하는 중입니다.
  • 빙봉이
    빙봉씨의 개발 블로그
    빙봉이
  • 전체
    오늘
    어제
    • 전체 글 (41)
      • MSA Spring Cloud (3)
      • Java (1)
      • Spring Boot (1)
      • 알고리즘 (9)
      • IDE (4)
      • Error (2)
      • Refactor (1)
      • Debug (1)
      • Front End (1)
      • New Project (9)
        • WorkSphere 360 (6)
        • 모바일 신분증 (1)
        • 나이스 페이먼츠 결제 서비스 연동 (2)
      • 취미 (9)
        • 게임 (8)
        • 애니 (1)
      • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring
    결제 개발
    worksphere 360
    java
    블로그
    코딩테스트
    나이스페이먼츠 결제
    프로젝트 생성 방법
    자료구조
    감성
    데이터베이스 선정 기준
    MSA
    결제 API
    롤
    jira 용어 설명
    요구사항 작성
    알고리즘
    SP 서버
    Android Studio
    결제 API 구현해보기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
빙봉이
Android Studio 파일을 GitHub에 push할 때 유의할 점
상단으로

티스토리툴바