Canvas 1 Layer 1

아마존 웹 서비스 계정 생성 후 해야하는 IAM 보안 조치
루트 사용자와 IAM 사용자의 차이

들어가며 - 클라우드와 서버의 차이

클라우드 서비스의 핵심은 가상화된 컴퓨팅 자원을 제공하는 일입니다. 예를 들어 아마존 EC2Amazon Elastic Cloud Computing는 명실상부한 아마존 웹 서비스AWS, Amazon Web Service를 대표하는 서비스입니다. 하지만 클라우드는 가상 서버 호스팅과는 큰 차이가 있습니다. 가상 서버 호스팅은 컴퓨팅 자원만을 제공하지만, 클라우드는 네트워크 환경을 구축하기 위한 모든 구성요소를 가상화된 형태로 제공합니다. 그리고 이러한 구성요소들에 대한 접근 권한을 관리하는 AWS IAMAWS Identity and Access Management 서비스를 제공합니다.

이 서비스가 왜 필요한지 곰곰히 생각해볼 필요가 있습니다. 마치 컴퓨터를 혼자서 사용하더라도 마이크로소프트 윈도우Microsoft Windows나 애플 맥OSApple macOS가 다수의 사용자를 지원하는 운영체제인 것처럼, 아마존 웹 서비스도 혼자서 사용하더라도 다수의 사용자를 지원하도록 설계되어있습니다. 클라우드 서비스를 안전하게 사용하려면 이 개념을 이해할 필요가 있습니다. 이 글에서는 IAM 기초를 중심으로 아마존 웹 서비스에서 권장하는 계정 생성 후에 적용해야하는 보안 조치들에 대해서 소개합니다.

AWS 계정은 다중 사용자 환경

아마존 웹 서비스에 가입하면 하나의 계정이 만들어집니다. 이 때 만들어지는 사용자를 루트 사용자라고 부릅니다. 루트 사용자를 사용해서 아마존 웹 서비스에서 제공하는 모든 서비스를 곧바로 이용할 수 있습니다. EC2 가상 컴퓨팅 자원을 사용할 수도 있고, RDS 데이터베이스를 만들거나, 오브젝트 스토리지 S3 버킷에 데이터를 저장하는 것도 가능합니다. EC2 머신, RDS 데이터베이스, S3 버킷과 같은 것들을 자원(리소스)이라고 합니다. 루트 사용자는 계정에 속한 모든 리소스들에 대한 무제한적인 접근 권한을 가집니다.

아마존에서는 리소스들에 대한 접근 권한을 제어하는 AWS IAM 서비스를 제공하고 있습니다. 접근 권한을 어떤 주체가 어떤 리소스에 대해 어떤 행동을 할 수 있는 지 제어하는 것으로 정의해본다면, 루트 사용자는 모든 리소스에 대해서 모든 행동이 허용되어 있습니다. 따라서 루트 사용자는 AWS IAM으로 권한을 제어하는 대상이 아닙니다. IAM은 단순히 권한을 제어하는 기능을 제공할 뿐 아니라, IAM 사용자IAM User라는 어떤 행동을 하는 주체를 정의하는 기능을 제공합니다. 루트 사용자의 권한은 제어할 수 없지만, 이 IAM 사용자의 권한을 제어할 수 있습니다. IAM 사용자는 루트 사용자와 마찬가지로 웹 콘솔에서 로그인할 수 있습니다.

따라서 하나의 AWS 계정은 하나의 루트 사용자와 다수의 IAM 사용자를 가질 수 있습니다. 이 기능을 사용해 하나의 계정을 다수의 관리자가 공유해서 사용하는 대신 각각의 IAM 사용자를 생성해서 관리하는 것이 가능해집니다. AWS에서는 공식적으로 루트 사용자를 사용하지 않을 것을 강력하게 권고하고(strongly recommend) 있습니다. 루트 사용자로 나의 보안 증명My Security Credentials 페이지에 접속하면 다음과 같은 경고 문구가 출력됩니다.

나의 보안 증명 페이지에 접속하면 출력되는 경고 메시지
나의 보안 증명 페이지에 접속하면 출력되는 경고 메시지

이 경고를 요약하면 루트 사용자는 무제한적인 권한을 가지고 있으니 대신 IAM 사용자를 사용하라는 이야기입니다. 루트 사용자는 오직 루트 사용자로만 가능한 작업에만 사용하시기를 권장합니다.

노트
왜 루트 사용자를 사용하지 않도록 권장하나요?

앞서 설명했듯이 루트 사용자는 모든 리소스에 대한 무제한적인 접근 권한을 가지고 있으며, 이러한 권한을 제어하는 것은 불가능합니다. 루트 사용자를 사용하면 여러가지 문제가 발생할 수 있습니다.

먼저 루트 사용자를 다수의 작업자가 공유해서 사용하는 경우 누가 어떤 작업을 했는지 구분하는 것이 불가능합니다. 아마존 웹 서비스의 모든 기능은 API로 구현되어있으며 AWS 클라우드 트레일AWS CloudTrail 서비스를 사용해 어떤 사용자가 어떤 API를 호출했는지 전부 추적하는 것이 가능합니다. 하지만 루트 사용자만 사용하면 모두 루트 사용자가 호출한 것으로 기록됩니다. 이는 문제가 생겼을 때 추적이나 해결을 어렵게 합니다.

두 번째로 루트 사용자의 권한이 탈취되는 경우 공격자가 AWS 계정에 대한 모든 권한을 가지게 됩니다. 루트 사용자를 한 명 이상의 사용자가 모든 작업에 사용하는 경우 사용자 정보가 유출될 위험은 높아집니다. IAM 사용자의 경우 적절하게 권한이 제어되어있다면 이 사용자의 정보가 유출되더라도 피해가 제한적입니다. 사용자를 차단해버리거나 클라우드 트레일로 피해를 정확히 파악하는 것이 가능합니다. 하지만 루트 사용자의 권한을 제어하거나 차단하는 방법은 없습니다.

액세스 키의 경우도 문제가 있습니다. 루트 사용자의 액세스 키가 유출된 경우 이 키를 삭제하는 것 이외에는 대응할 수 있는 방법이 없습니다. 이 키를 프로덕션 서비스에서 사용중이었다면 키를 삭제하면 서비스 장애로 이어질 수 있습니다. 반면에 IAM 사용자에게 발급된 액세스 키는 권한을 제어하는 것이 가능하며, 삭제나 재발급에 대한 부담이 적습니다.

루트 사용자를 사용하지 않도록 권장하는 것은 AWS 고유의 정책은 아닙니다. 리눅스로 서버 관리를 하더라도 시스템에 대한 모든 권한을 가진 root 계정은 아주 제한적으로만 사용합니다. 시스템에 영향을 끼치는 루트 권한이 필요한 작업은 sudo 명령어를 통해 임시적으로 권한을 위임 받아 실행하는 방법을 사용합니다. 리눅스 뿐만 아니라 윈도우나 macOS 역시 마찬가지입니다. AWS 역시 다중 사용자 환경으로 생각해본다면, 이를 이해하는 것은 어렵지 않을 것입니다.

처음 해야하는 IAM 보안 조치들

루트 사용자로 AWS에 로그인 후 IAM 관리 콘솔에 접속하면 아래의 보안 상태Security Status에서 처음으로 해야하는 보안 조치들을 확인할 수 있습니다.*

* 루트 사용자로 로그인했을 때와 IAM 사용자로 로그인했을 때 나오는 보안 상태의 항목에는 조금 차이가 있습니다. 여기서는 루트 사용자의 경우를 다룹니다.

IAM 관리 콘솔 대시보드
IAM 관리 콘솔 대시보드

다섯가지 항목은 다음과 같습니다.

이 경고를 무시하더라도 AWS 사용에는 아무런 문제가 없습니다. 하지만 안전한 사용을 위해서는 반드시 조치를 취하는 것이 좋습니다. 하나씩 살펴보도록 하겠습니다.

루트 사용자의 액세스 키 삭제

루트 사용자의 액세스 키는 무제한적인 권한을 가지고 있습니다. 따라서 루트 사용자의 액세스 키 대신 권한을 제어할 수 있는 IAM 사용자의 액세스 키를 발급해 사용할 것을 권장합니다. 루트 계정의 액세스 키는 자동으로 생성되지 않기 때문에 따로 생성하지 않았다면 취해야할 조치는 없습니다.

루트 계정의 액세스 키는 나의 보안 증명My Security Credentials 페이지에서 관리할 수 있습니다. 삭제를 할 때는 반드시 삭제하기에 앞서 액세스 키를 사용하고 있는 곳이 있는지 확인해야합니다. 액세스 키를 사용하고 있다면 IAM 사용자의 액세스 키나 IAM 역할IAM Role으로 대체한 후 삭제하시기 바랍니다.

루트 사용자의 MFA 활성화

MFA는 다 요소 인증Multi-factor authentication의 줄임말입니다. MFA보다는 OTP나 TOTP 인증이라는 표현이 더 익숙할 것입니다. MFA를 활성화하면 로그인 시 비밀번호를 인증하고 추가적인 일회용 인증 번호를 입력해야 로그인이 가능해집니다. 이 때 AWS에서 지원하는 하드웨어 MFA 디바이스를 사용하거나 가상 디바이스를 사용할 수 있습니다. 스마트폰을 가상 디바이스로 사용하는 경우 아래의 애플리케이션을 사용할 수 있습니다.

이외에 1패스워드1Password를 가상 디바이스로 사용하는 것도 가능합니다. MFA는 나의 보안 증명에서 활성화활 수 있습니다.

가상 디바이스로 다 요소 인증(TOTP) 활성화

먼저 나의 보안 증명 페이지에 접속합니다. 다 요소 인증Multi-factor authentication 아코디언 메뉴를 열고 MFA 활성화Activate MFA 버튼을 클릭합니다.

나의 보안 증명 페이지에서 MFA를 활성화할 수 있습니다
나의 보안 증명 페이지에서 MFA를 활성화할 수 있습니다

MFA 활성화를 위한 팝업이 나타납니다. 가상 MFA 디바이스A virtual MFA device를 선택하고 다음을 클릭합니다.

MFA 등록 팝업
MFA 등록 팝업

가상 디바이스에 대한 안내가 나옵니다. 읽어보고 다음을 누릅니다. 가상 디바이스 등록을 위한 QR 코드가 생성됩니다.

MFA 등록을 위한 QR 코드 스캔
MFA 등록을 위한 QR 코드 스캔

이 QR 코드를 가상 디바이스 앱에서 스캔해야합니다. QR 코드 스캔이 어렵다면 수동 설정을 위한 시크릿 키 출력Show secret key for manual configuration을 클릭해 문자열을 복사해 앱에 넣어줍니다. 앱에 정상적으로 등록이 되면 6자리의 숫자가 생성됩니다. 처음으로 생성된 숫자를 인증 코드 1Authentication code 1에 넣어줍니다. 숫자가 생성되고 30초가 지나면 다음 숫자가 생성됩니다. 이 숫자를 인증 코드 2에 넣어줍니다. 이 두 숫자는 연속적으로 생성된 숫자여야합니다. 마지막으로 가상 MFA 활성화Activate virtual MFA를 클릭합니다.

이제 루트 사용자로 로그인을 할 때 비밀번호를 입력하고 나면 추가로 인증 코드를 입력하는 화면으로 넘어갑니다. MFA 앱에서 생성된 6자리 숫자를 넣어서 로그인합니다.

MFA 등록을 마치면 계정 인증 후 추가 인증을 해야만 로그인이 가능합니다
MFA 등록을 마치면 계정 인증 후 추가 인증을 해야만 로그인이 가능합니다

그룹을 사용하여 권한 할당

IAM 사용자에게 직접 어떤 권한을 부여하는 것도 가능하지만 그룹을 사용하면 좀 더 유연하게 관리하는 것이 가능합니다. 그룹에는 정책Policy을 연결할 수 있습니다. 정책은 권한을 미리 정의해둔 문서입니다. 사용자는 그룹에 속할 수 있고, 이 그룹에 연결된 정책의 권한을 그대로 상속 받습니다.

여기서는 관리자 권한을 가진 admin 그룹을 만들어보겠습니다. IAM 그룹 메뉴로 이동하고 왼쪽 위의 새로운 그룹 생성Create New Group을 클릭합니다.

IAM 그룹 생성 1단계: 이름
IAM 그룹 생성 1단계: 이름

첫 번째 단계에서 이름을 admin으로 지정하고 다음을 클릭합니다.

IAM 그룹 생성 2단계: 그룹에 연결할 정책 선택
IAM 그룹 생성 2단계: 그룹에 연결할 정책 선택

두 번째 단계에서는 그룹에 연결할 정책을 선택할 수 있습니다. 사용자가 직접 정책을 정의할 수도 있지만, AWS 미리 정의해둔 정책을 사용하는 것도 가능합니다. 목록에서 노란색 박스 표시가 아마존이 미리 정의해둔 정책을 의미합니다. 필터에서 AdministratorAccess를 입력합니다. 아마존이 미리 정의해둔 AdministratorAccess를 선택하고 다음을 클릭합니다.

리뷰를 하고 그룹 생성Create Group를 클릭합니다. admin 그룹이 생성됩니다. 이제 사용자를 생성하고 이 그룹에 포함시켜보겠습니다.

개별 IAM 사용자 생성

IAM 사용자 페이지에 접속하고 왼쪽 위의 사용자 추가Add user를 클릭합니다.

IAM 사용자 생성 1단계: 이름과 사용자 타입
IAM 사용자 생성 1단계: 이름과 사용자 타입

사용자 이름에는 administrator를 지정합니다. 액세스 유형Access Type에는 프로그래밍 방식 액세스Programmatic accessAWS 관리 콘솔 액세스AWS Management Console access 두 가지가 있습니다. 프로그래밍 방식 액세스는 액세스 키만 생성하는 방식이고, AWS 관리 콘솔 액세스는 로그인 가능한 사용자 유형입니다. 어느 쪽으로 생성해도 이후에 변경이 가능합니다. 여기서는 아래의 AWS 관리 콘솔 액세스 타입을 선택합니다.

AWS 관리 콘솔 액세스 타입을 선택하면 추가적으로 패스워드를 입력해야합니다. 패스워드 자동생성Autogenerated password을 선택하고, 첫 로그인 시 패스워드 변경User must create a new password at next sign-in을 체크해줍니다. 오른쪽 아래의 다음 버튼을 클릭합니다.

IAM 사용자 생성 2단계: 사용자에 연결할 그룹/정책
IAM 사용자 생성 2단계: 사용자에 연결할 그룹/정책

새로운 사용자의 권한을 설정합니다. 권한은 3가지 방법으로 정의할 수 있습니다. 첫 번째는 그룹을 사용하는 방법입니다. 두 번째는 기존 사용자의 권한을 복사합는 방법입니다. 세 번째 방법은 미리 준비되어있는 정책을 사용자에 직접 연결하는 방법입니다. AWS에서 권장하는 대로 그룹을 사용해서 권한을 정의해보겠습니다. 기본적으로 사용자를 그룹에 추가Add user to group 버튼이 활성화되어있습니다. 아래의 그룹 목록에서 위에서 생성했던 admin 그룹을 체크합니다. 오른쪽 아래의 다음 버튼을 클릭합니다.

리뷰를 마치고, 사용자 생성Create user을 클릭합니다.

사용자 추가 후 임시 비밀번호를 확인합니다
사용자 추가 후 임시 비밀번호를 확인합니다

비밀번호 아래의 보기Show를 클릭해 자동생성된 비밀번호를 확인할 수 있습니다.*

* IAM 사용자 로그인 방법에 대해서는 뒤에서 다룹니다.

IAM 비밀번호 정책 적용

마지막으로 IAM 비밀번호 정책을 적용해보겠습니다. 비밀번호 정책은 계정 설정Account Settings에서 적용할 수 있습니다.

비밀번호 정책 관리 페이지
비밀번호 정책 관리 페이지

비밀번호 정책에 특별한 제약은 없습니다. 패스워드 최소 길이와 원하는 항목들을 선택한 후 패스워드 정책 적용Apply password policy를 클릭합니다.*

* 개인적으로는 문자 조합보다 최소 길이 설정을 선호합니다. 1패스워드와 같은 패스워드 관리자를 권장하고 최소 길이를 50자 이상으로 강제하는 것을 추천합니다.

이것으로 보안 상태의 다섯 가지 항목이 모두 체크되었습니다. 👏👏👏

IAM 대시보드: 다섯 가지 보안 상태가 모두 체크된 모습
IAM 대시보드: 다섯 가지 보안 상태가 모두 체크된 모습

IAM 사용자로 로그인

앞에서 루트 사용자를 사용해 IAM 사용자를 만들어보았습니다. 이 계정으로 로그인을 하려면 AWS 계정 별로 마련된 고유의 로그인 페이지로 접속할 필요가 있습니다. 이 페이지의 주소는 IAM 대시보드의 IAM 사용자 로그인 링크IAM users sign-in link에서 확인할 수 있습니다.

먼저 루트 사용자를 로그아웃합니다. 확인한 주소로 이동하면 루트 사용자가 아닌 IAM 사용자로 로그인할 수 있는 페이지로 이동합니다.

IAM 사용자로 로그인
IAM 사용자로 로그인

계정 IDAccount ID, IAM 사용자 이름IAM user name, 비밀번호Password 세 개의 폼으로 구성되어있습니다. 계정 ID에는 루트 계정의 계정 ID(12자리 숫자) 혹은 문자열로 된 별칭을 입력합니다. IAM 사용자 이름은 앞서 생성했던 administrator를 입력합니다. 비밀번호는 임시로 자동생성된 문자열을 넣어줍니다. 처음 로그인하면 비밀번호를 변경하는 페이지로 이동합니다. 앞서 적용한 비밀번호 정책에 부합하는 새로운 비밀번호로 변경합니다.

administrator 사용자는 admin 그룹에 속해있으며, admin 그룹에는 AdministratorAccess 정책이 연결되어있습니다. 따라서 이 계정으로 빌링을 제외한 거의 대부분의 기능을 루트 사용자와 마찬가지로 사용할 수 있습니다. 필요한 경우 루트 사용자를 사용해 이 계정의 권한을 줄이거나 계정을 삭제해버리는 것도 가능합니다.

IAM 사용자 MFA 설정

앞서 루트 사용자에 대해서 MFA를 설정했던 것처럼, IAM 사용자에 대해서도 MFA를 설정할 수 있습니다. 먼저 사용자 페이지로 이동해서 MFA를 설정하고자 하는 IAM 사용자를 선택합니다. 사용자 상세 페이지에서 보안 증명Security Credentials 탭을 선택합니다.

IAM 사용자의 MFA 설정
IAM 사용자의 MFA 설정

설정된 MFA 디바이스Assigned MFA device 항목이 있습니다. 현재는 없음no으로 되어있습니다. 수정 아이콘을 클릭하면 MFA를 설정할 수 있습니다. 설정 방법은 루트 사용자의 MFA 설정법과 동일합니다.

마치며: IAM 베스트 프렉티스

AWS에서는 IAM 모범 사례를 공식 문서로 제공하고 있습니다. 이 문서에서는 다음과 같이 IAM을 사용할 것을 권장하고 있습니다.

이 중에서 강조한 항목이 지금까지 작업한 항목들입니다. 테스트 용도로 사용한다면 이를 지키지 않아도 상관없겠지만, AWS를 사용해서 프로덕션 서비스를 운영한다면 IAM 베스트 프렉티스를 충분히 숙지하고 지속적으로 관리하는 것이 좋습니다. 한 번 쯤은 정독해보시기를 추천합니다.

더 읽을거리