Post

IAM으로 안전한 조직 준비하기 (AWS로 시작하는 인프라 구축의 정석)

본 포스트는 AWS로 시작하는 인프라 구축의 정석 책을 활용한 스터디 기록입니다.
(CHAPTER 3 안전한 조작 준비하기)

AWS 계정을 처음 만들면

AWS 계정을 처음 만들게 되면 그 계정은 루트 사용자 계정이 됩니다.

루트 사용자

여기서 루트 사용자란? 모든 AWS 서비스 및 기능에 대한 접근 권한을 가진 사용자를 뜻하는데요.

모든 접근 권한을 가진 사용자? 너무 좋아! 라고 생각하실 수 있지만 루트 계정을 그대로 AWS 서비스 이용에 사용하시면 안됩니다.

이것은 내가 아닌 다른 누구라도 루트 계정에 대한 아이디와 비밀번호만 알고 있으면 AWS의 모든 서비스를 마음대로 사용할 수 있다는 것을 의미하기 때문에 AWS를 안전하게 사용하기 위해서는 IAM이라는 것을 활용해 목적에 맞는 사용자 계정을 따로 생성해 사용해야 합니다!

IAM이란

IAM(Identity Access Management)이란 AWS에서 리소스 접근을 관리하기 위해 사용하는 시스템으로 주로 인증인가 기능을 구현합니다. IAM을 정확히 이해하고 잘 사용하기 위해서는 인증과 인가에 대한 이해가 필요합니다.

  • 인증
    • 인증은 현재 이용하는 사용자가 누구인지에 대한 정보를 확인하는 것을 뜻합니다.
    • 보통 아이디와 비밀번호를 통해 로그인을 하는 과정이 인증 과정이라고 생각하시면 됩니다!
  • 인가
    • 인가는 사용자가 어떤 기능을 사용할 수 있는 권한이 있는지를 관리하고 그에 따라 행동을 허가하거나 제약하는 것을 뜻합니다.
    • 예를 들어 대학교 커뮤니티에 교수님만 글을 쓸 수 있는 게시판이 있다면 학생인 사용자에게는 해당 권한이 없으므로 글을 작성하는 행동에 제약이 따르게 되는 것이죠.

IAM 사용하기

(1) IAM 사용자

앞서 이야기했듯이 루트 사용자는 AWS의 모든 리소스에 대한 접근 권한을 가지고 있습니다.

그렇기 때문에 루트 사용자는 AWS의 계약 해지나 사용자 관리 등의 특수한 작업 이외에는 이용하지 않고, 특정 리소스에 대한 특정 권한을 가진 일반 사용자(IAM 사용자)를 생성하여 사용하는 것이 올바른 방법입니다.

(2) 사용자와 그룹

AWS에서는 특정 사용자에게 특정 권한을 부여할 수 있는 두가지 방법이 있습니다.

  • 사용자에게 직접 특정 권한을 부여하는 것
  • 특정 권한을 가진 그룹에 사용자를 포함시키는 것

사용자의 수가 적을 경우에는 직접 하나씩 권한을 부여할 수 있지만, 사용자의 수가 많아지고 권한이 나뉘게 된다면 관리하기가 어려워질 수 있습니다. 그렇기 때문에 특정 그룹에게 특정 권한을 부여하고, 사용자를 해당 그룹에 소속시키는 방식으로 권한을 부여하는 것이 일반적입니다.

조금 더 안전하게 IAM 사용하기

IAM을 사용하면 특정 권한을 가진 사용자를 분리해 안전하게 이용할 수 있지만 인증이나 접근 허가 설정이 올바르지 않으면 앞서 설정한 인증이나 접근 허가가 무용지물이 될 수도 있습니다. 이를 조금이나마 방지할 수 있는 IAM의 모범 사례는 5가지가 있습니다. (해당 모범 사례는 완벽한 가이드는 아니며, 본인이 속한 조직의 정책 등에 따라 달라질 수 있습니다.)

(1) 루트 사용자 계정의 액세스 키 잠금

AWS에서는 리소스에 대해 대시보드 화면을 이용해 대화형으로 조작 방법 외에도 프로그램을 통한 조작 시스템을 제공합니다. 대시보드가 아닌 프로그램을 이용해 조작할 때에는 아이디/비밀번호가 아닌 액세스 키 라는 정보를 이용하게 됩니다!

루트 사용자는 앞서 말했듯이 강력한 접근 권한을 가지고 있기 때문에 루트 사용자의 액세스 키는 아예 없는 상태로 두는 것이 바람직합니다.

Access_Keys

일반적으로 루트 계정을 생성만 했다면 Access Key는 없을겁니다. 그러나 실수로 생성을 했다면 ‘보안 자격 증명’ 탭에 들어가 Access Key를 모두 삭제해 주세요.

(2) MFA 활성화

처음 루트 계정을 만들게 되면 이메일 주소와 비밀번호의 조합만으로 로그인을 할 수 있습니다. 그러나 루트 계정은 정말 안전하게 지켜져야 하므로 추가적인 인증 방법을 더하는 것이 필요합니다. 우리는 이를 위해 MFA(Multi-Factor Authentication)를 사용할 것입니다.

보안 업계에서는 인증을 위한 요소를 세 가지로 분류합니다.
(1) 아는 요소: 본인만 알 수 있는 정보 (비밀번호, 인증번호 등)
(2) 가진 요소: 본인만 가지고 있는 것 (스마트폰, 신용카드 등)
(3) 갖춘 요소: 본인의 생물학적 요소 (지문, 홍채 등)


이런 요소가 하나인 것보다는 2개 이상의 요소를 조합하는 것이 보안 측면에서 강력합니다. 이렇게 여러 요소를 조합해 인증을 수행하는 것을 멀티 팩터 인증, MFA라고 합니다.

AWS에서는 비밀번호(아는 요소) + 인증 디바이스(가진 요소)를 사용하여 MFA를 수행합니다. USB로 접속하거나 소형 기기와 같은 전용 하드웨어를 이용하는 유형이 존재하지만 현재는 스마트폰을 가상 MFA 디바이스로 이용하는 방법을 가장 많이 사용합니다. (특정 스마트폰으로만 생성할 수 있는 유효기간이 짧은 인증 번호를 생성하여 확인)

MFA_1

MFA_2

보안 자격 증명 탭에 들어가 MFA를 활성화할 수 있으며 인증 App을 다운받아 QR코드를 스캔하고 스마트폰 화면에 나오는 MFA Code를 입력하면 MFA가 활성화됩니다. 저는 Google Authenticator를 사용했으며 더 다양한 인증 App의 종류는 공식 문서를 통해 확인할 수 있습니다.

(3) 개별 IAM 사용자 생성

루트 사용자는 강력한 접근 권한을 가지므로 일반 개발을 위해서는 IAM 사용자를 생성해서 사용하는 것이 안전합니다.

IAM_Add_User

사용자에게 권한을 부여하는 것은 직접 특정 권한을 선택하여 부여할 수도 있고, 그룹으로 부여할 수도 있고, 미리 만들어놓은 권한을 연결할 수도 있습니다.

(4) 사용자 그룹을 이용한 접근 권한 할당

앞서 이야기한대로 사용자 그룹을 만들어 특정 권한 부여 할 수 있습니다.

IAM_Create_Group

사용자 그룹은 일반 사용자를 생성하면서 같이 생성할 수도 있고 이렇게 따로 생성하여 사용자를 추가할 수도 있습니다.

(5) 사용자에 대한 강력한 암호 정책 구성

쉬운 비밀번호를 이용할 수 없도록 비밀번호의 내용이나 기한에 제한을 추가 할 수 있습니다!

IAM_Password_Policy

이렇게 다섯가지 방법만이 정답은 아니지만 이를 이용하면 조금 더 안전하게 IAM을 통해 AWS를 사용할 수 있을 것입니다.

This post is licensed under CC BY 4.0 by the author.

Comments