본문 바로가기
데브옵스 (devops)/AWS

[AWS] 회사에서 AWS access key, AWS secret key 유출로 2000만원 과금된 썰

by jod2 2022. 7. 21.
반응형

 

(사건의 발단)

React로 사내 홈페이지를 만들다가 우리 회사 클라이언트와 투자 회사 로고 이미지를 리스트로 표시하는 작업을 하고 있었는데

문득, '투자회사와 클라이언트 로고가 변경될 때마다 배포를 다시해야할까?' 라는 의문이 들었다.

 

아 그러면,,,

 

AWS S3 버킷에 우리 회사 클라이언트의 로고를 저장해 놓고 AWS SDK를 이용해서 S3 getObjectList기능으로 이미지 리스트들을 받아오면 되겠다!! 그러면 이미지를 S3에 올리기만 하면 자동으로 가져와서 보여주겠네 ㅎㅎ

 

나는 신나서 당장, .env (github에 AWS accessKey랑 secret키가 올라가면 안되니까)와 aws-sdk를 설치하고 프로젝트에 적용했다.

 

많은 사례에서 알려주듯이 github에는 aws 키가 안올라가니까 유출될 위험도 없으니까 나도 안전할 줄 알았지만

이게 문제의 시작이었다.

 

(사건 발생)

똘똘한 일처리를 한줄 알았는데 한참 시간이 지난 띠링.. 2000만원이 과금되 있었다. 이유를 보니 외국에서 최고 사양의 인스턴스를 생성하여 코인 채굴을하고 인스턴스를 지우고를 반복하고 있었다고 한다. 나는 멘붕이 되서 어쩔줄 모르고 있었다.

 

 

알고보니 React에서 사용한 aws-sdk가 문제였던 것이다. 내가 aws-sdk에서 사용한 access key는 full 권한이었던 access key인데 이게 노출되어있었다. 자바스크립트 소스는 다운받으면 그대로 소스가 노출되어 있기 때문에 누구나 볼 수 있어서 내 키가 그대로 유출된것이다.

 

AWS: Access Key는 'AKIA~'로 시작하는 패턴으로 진행되서 크롤링 하기도 쉬웠을 거 같다.

 

 

(해결)

다행히 얼마전에 팀에 합류하신 Devops 분께서 AWS측에 연락하여 전액 환불 받아주셨는데 환불이 안됬으면 무슨 일이 일어났을지 생각만 해도 끔찍하다. 

 

1. 나도 당장에 다른 Front-end 프로젝트에서 사용하고 있는 aws-sdk가 있는지 확인하고 사용을 지양했으며 반드시 사용해야 될 필요가 있으면 IAM Role을 최소화 해서 사용하도록 처리하였다.

2. 그리고 Spring Boot 프로젝트에서도 AWS Key를 applicatoin.property로 관리했었는데 로컬에서는 /.aws/credentials 에 있는 키를 사용하도록 하고 배포 환경에서는 OS환경변수를 사용하거나 특정 VPC에서 접근 가능한 Private한 S3에 올려두고 사용하도록 설정하였다.

3. 그리고 혹시 몰라 마지막으로 IAM 보안 권장 사항도 체크하였다.

 

 

반응형

댓글