Cloud 서비스가 각광을 받으면서 개인 프로젝트를 진행하려는 많은 사람들이 AWS 서비스를 사용하고 있습니다. AWS는 개인이 사용하기에는 초기에 알아야 할 부분들이 결코 적지 않은 서비스입니다. 사용자가 늘어남에 따라서 다양한 문제점들이 발생하는데, 이들 대부분은 사전에 예방할 수 있는 것들이 대부분입니다. 이번 글을 통해서 AWS를 사용하면서 알아두면 좋은 점들을 소개해보고자 합니다.
- root 계정은 사용하면 안됩니다.
- 사용자 계정은 MFA를 설정해야 합니다.
- 꼭 필요한 권한만 IAM 계정에 할당합니다.
- 액세스 키를 잘 관리해야 합니다.
- 퍼블릭 서브넷 사용을 지양해야 합니다.
- 보안 그룹에서 모든 IP 또는 포트에 대한 인바운드를 제한해야 합니다.
- 미사용 리소스는 제때 삭제해야 합니다.
root 계정은 사용하면 안됩니다.
최초로 AWS에 가입하면 해당 계정은 root 계정이 됩니다. 그런데, 이 계정을 사용하지 말라니 이게 무슨 말인가요?
AWS에서는 광범위한 서비스를 제공하기 때문에 세부적인 권한 설정이 가능하도록 IAM (Identity and Access Management) 서비스를 제공하고 있습니다. 그러나 root 계정은 특성상 언제나 관리자 권한을 가지도록 되어있기 때문에 외부에 유츨될 경우에 해킹되어 사용자에게 엄청난 비용이 부과될 수 있습니다. 또는 여러 사용자가 root 계정을 공유하여 사용하는 경우에 실제로 누가 작업을 했는지 구분하기가 어렵게 됩니다. 이러한 상황을 막기 위해서 최초 가입한 즉시 IAM 계정으로 실제 사용자가 사용할 관리자 계정을 만드는 것이 좋습니다.
사용자 계정은 MFA를 설정해야 합니다.
root 계정과 IAM 계정 모두 MFA를 설정하여 계정이 해킹당하지 않도록 추가 보안을 제공하는 것이 좋습니다. 다음과 같은 경우 모두에 가급적 MFA를 설정해야 합니다.
- root 계정
- IAM 콘솔 계정
- IAM 액세스 키 계정 (사용자 용)
여기서 유일한 예외는 액세스 키 계정 중에서 사용자가 직접 사용하는 것이 아닌, 외부 서비스에서 사용되는 경우입니다. 서비스가 MFA 설정에 대응할 방법이 없으므로 부득이하게 MFA를 설정할 수 없습니다.
꼭 필요한 권한만 IAM 계정에 할당합니다.
AWS에서는 최소 권한 정책을 권장하고 있습니다. 사용자나 서비스에 대한 각각의 IAM 계정 또는 IAM 역할이 필요로 하는 권한을 별도 정책으로 생성, 이를 할당하는 것입니다. 물론, 이 과정은 굉장히 고통스럽습니다. 그래서 이를 지키기 위해서는 다음과 같은 방법을 사용해볼 수 있습니다.
- 역할별로 구분된 사용자 그룹을 생성하고, 해당 사용자 그룹에 정책을 할당하여 다수의 사용자에게 동일한 정책을 빠르게 할당할 수 있습니다.
- 서비스 계정에 대해서는 실제 호출하는 API만을 추려서 서비스별 정책을 생성, IAM 계정이나 역할에 할당하여 서로 다른 서비스가 가급적 같은 계정이나 역할을 사용하지 않도록 최대한 분리합니다.
아무래도 서비스는 요구하는 권한이 사전에 정해지는 반면에, 사용자에 대한 권한 요구사항은 수시로 변하기 때문에 서비스는 분리하고, 사용자는 그룹으로 관리하는 것이 편리합니다.
액세스 키를 잘 관리해야 합니다.
발급한 액세스 키는 철저하게 관리해야 합니다. 액세스 키는 대부분 실수로 유출되는데, 한 번의 노출로 해커들이 장시간 채굴하고 수천만원의 비용이 청구되는 경우가 발생하고 있습니다. 저도 회사에서 여러 고객들이 해킹당한 사례들을 봐왔는데, 모두 액세스 키를 노출해서 발생하였습니다.
그래서 액세스 키는 코드에 적어서 사용하는 방식을 철저히 배제하셔야 합니다. 코드에 적어서 사용하다가 github와 같은 코드 저장소에 업로드하는 경우에 몇 분 지나지도 않아서 다수의 경고 이메일과 해킹을 동시에 겪을 수 있습니다. 이 부분에 대해서는 추가적인 글을 통해서 자세히 다루도록 하겠습니다.
퍼블릭 서브넷 사용을 지양해야 합니다.
네트워크에 대해서 잘 모르시는 분들은 AWS의 초기 설정에서 곧바로 EC2와 같은 서비스를 이용하시게 될 것입니다. 개인용 서비스이거나 테스트용 서비스라면 크게 상관이 없을 수도 있지만, 외부 사용자에게 제공하기 위한 애플리케이션을 구축한다면 퍼블릭 서브넷 사용을 최대한 지양해야 합니다.
퍼블릭 서브넷은 모든 인스턴스, 서비스가 공인 아이피를 할당받아 전세계에 곧바로 노출될 수 있습니다. 그렇기 때문에 NAT Gateway를 라우팅 룰에 추가하고 퍼블릭 아이피 할당이 제한되는 프라이빗 서브넷을 사용하도록 해야만 외부의 위협으로부터 한 단계 안전해질 수 있습니다.
보안 그룹에서 모든 IP 또는 포트에 대한 인바운드를 제한해야 합니다.
퍼블릭 서브넷에 서버가 위치한다면 유일한 보안 조치는 보안 그룹입니다. 보안 그룹은 기본적으로 사용자가 설정하여야 하는데, 포트를 개방할때는 반드시 포트 번호와 해당 포트를 열어줄 아이피 대역을 명확하게 설정하는 것이 안전합니다.
만약에 포트 번호와 아이피 대역을 광범위하게 설정한다면 항시 실행되고 있는 해커들의 해킹 시도가 이루어질 것이고 서비스가 해킹된다면 해당 서비스가 보유하고 있는 권한을 통해서 내부 시스템 전체가 좋지 않은 영향을 받을 수 있습니다. 그렇기 때문에, 보안 그룹은 최대한 보수적으로 설정하는 것이 안전합니다.
미사용 리소스는 제때 삭제해야 합니다.
비용 관점에서 미사용 리소스는 빠르게 판단하여 삭제하는 것이 중요합니다. 많은 개인 사용자 분들이 실수하는 부분 중에 하나입니다만, AWS에서 제공하는 많은 서비스가 1년 무료인 경우가 많습니다. 그래서 무료로 제공되던 서비스일지라도 사용하지 않게 되면 반드시 삭제해야 비용이 발생하지 않습니다. 1년 후에 갑자기 비용 청구가 이루어지는 이유는 미사용 리소스를 삭제하지 않았기 때문입니다.
그리고 보안 관점에서도 사용하지 않는 VPC는 삭제해두는 것이 좋습니다. 최초 가입시에 10여개의 AWS 리전이 기본적으로 활성화 되어있는데, 각 리전에 생성되어있는 기본 VPC를 삭제해두는 것이 안전합니다. 혹여 해킹당하더라도 VPC부터 생성해야 하므로 회사에서는 VPC 삭제 후에 생성 권한을 조직단위로 차단함으로써 네트워크 보안을 좀 더 향상시킬 수 있습니다.