메뉴

문서정보

목차

AWS IAM best practices

IAM은 AWS 자원에 대한 인증, 접근 제어를 목적으로 제공하는 서비스다. 인프라의 보안을 강화하기 위한 가장 중요한 서비스다.

여기에서는 IAM을 효과적으로 사용하기 위한 모범 살계를 정리한다.

MFA 활성화

강력한 패스워드의 사용은 필수 이지만 이것 만으로는 충분하지 않다. 대부분의 인증관련 침해사고는 패스워드 유출로 발생한다. MFA를 이용해서 다중 인증 시스템을 구성하자. MFA를 한다고 했을 때, 일반적으로 사용 할 수 있는 장치들은 아래와 같다.
  1. 사람의 기억 : 패스워드. 보통 기본(1차 인증수단)으로 사용한다.
  2. 사람이 소유하고 있는 것 : 하드웨어 토큰, 모바일 디바이스의 OTP 애플리케이션.
  3. 사람자신(신체) : 망막 스캔, 지문 인식.
AWS는 1과 2두가지 MFA를 제공한다. 1은 이미 알고 있는 것이니까 넘어가고, 2를 살펴보자. AWS는 아래의 인증 수단을 제공한다.

 AWS MFA

 AWS MFA

  1. Virtual MFA device : 모바일 앱 방식
  2. U2F security key : Yubikey/U2F 디바이스 방식
  3. Other hardware MFA device : 토큰 디바이스 방식
그냥 대충 Virtual MFA device 로 충분하긴 한데, 이왕 이면 카드 타입의 MFA 디바이스를 권장한다. 권장 이유는 있어보여서(그다지 비싸지도 않고). Yubikey는 USB 타입이라서 은근히 분실위험이 높다.

하드웨어 MFA 디바이스(Other hardware MFA device)

하드웨어 MFA를 제공하는 Gemalto 제품이 있다. (은행 OTP 발급기와 비슷한 느낌의)하드웨어 전자키 MFA 디바이스와 세련된 디자인의 하드웨어 디스플레이 카드 디바이스가 있다.

 카드 방식의 하드웨어 MFA 디바이스

 하드웨어 MFA

제품을 구입한 뒤 Serialnumber와 30초마다 갱신되는 6자리의 OTP 번호를 연속해서 두 번 입력하면 된다.

가상 MFA 디바이스

하드웨어 MFA 디바이스를 준비하기가 부담스럽다면, 가상 MFA 디바이스를 이용하자. 가상이라는 용어가 붙어서 뭔가 대단한 것인가라고 생각 할 수있는데, 그냥 OTP 소프트웨어 설치하는 방식이다. Google Authenticator, authy 등의 앱을 설치하면 된다. 나는 authy를 사용하고 있다.

모바일 기기에 애플리케이션을 설치하고, QR Code를 찍어서 30초마다 갱신되는 6자리의 OTP 번호를 두 번 입력하면 된다.

U2F security key

 Yubikey

 Yubikey

YubiKey는 유비코(Yubico)에서 제조한 하드웨어 인증 장치로 일회용 패스워드, 공개 키 암호화 및 인증을 수행한다. U2F(Universal Second Factor)및 FIDO2 프로토콜을 지원한다. USB에 꽂을 수 있는데, 가운데 열쇠가 있는 부분을 손으로 누르면 된다.

 Yubikey 사용

 Yubikey 사용

Policy Conditions 이용한 추가적인 권한 제어

IAM Condition 블럭을 이용해서 정책이 효력을 발휘하는 상세한 조건을 지정 할 수 있다. 추가적인 요구사항이므로 필수는 아니다. equal, less than 등을 이용해서 다양한 제약조건을 만들 수 있다. 예를 들어

사용하지 않는 Credential 지우기

사용자 자격증명을 정기적으로 감사하고 사용하지 않는 것은 제거한다. AWS는 암호 및 access key의 수명주기를 추적하는데 도움이 되는 "자격 증명 보고서"를 제공한다.

 자격 증명 보고서

 자격 증명 보고서

aws cli로 확인 할 수 있다.
# aws iam list-users
{
    "Users": [
        {
            "Path": "/",
            "UserName": "3cx_test",
            "UserId": "AIDAXTH64WM5T5WM2IKEE",
            "Arn": "arn:aws:iam::522373083963:user/3cx_test",
            "CreateDate": "2019-05-20T01:38:44Z"
        },
        {
            "Path": "/",
            "UserName": "awsclitest",
            "UserId": "AIDAJDZ24U7H6VRNPDLUU",
            "Arn": "arn:aws:iam::522373083963:user/awsclitest",
            "CreateDate": "2018-12-22T15:48:39Z"
        },
        {
            "Path": "/",
            "UserName": "awsstudy",
            "UserId": "AIDAJHMBPQIU5GUXPX32W",
            "Arn": "arn:aws:iam::522373083963:user/awsstudy",
            "CreateDate": "2018-12-11T15:11:43Z",
            "PasswordLastUsed": "2018-12-15T07:40:29Z"
        },
        {
            "Path": "/",
            "UserName": "operator",
            "UserId": "AIDAXTH64WM5QMUWJROGE",
            "Arn": "arn:aws:iam::522373083963:user/operator",
            "CreateDate": "2019-06-27T06:51:19Z"
        },
        {
            "Path": "/",
            "UserName": "ReadOnly",
            "UserId": "AIDAXTH64WM5SGGSC4SMX",
            "Arn": "arn:aws:iam::522373083963:user/ReadOnly",
            "CreateDate": "2019-06-17T14:29:27Z"
        }
    ]
}

AWS에서 제공하는 Policy 사용하기

AWS에 익숙하지 않고, 다양한 기능에 대한 정책을 만들고 유지하는데 어려움이 있다면, 그냥 AWS 정의 정책을 사용하는게 정신건강에 좋다. AWS 정의 정책에는 빌링을 처리해야 하는 재무담당자, hadoop과 빅데이터 솔류션을 사용해야하는 데이터엔지니어, 네트워크 관리자 등을 위한 일반정책들을 잘 정의해두었다. 예를 들어 네트워크 관리자 정책은 Amazon EC2, Amazon Route 53, Amazon VPC, AWS Direct Connect 네트워크 설정 유지를 위한 권한을 포함하고 있다.

이러한 정책을 사용하면, AWS의 자동 업데이트 기능등의 혜택도 누릴 수 있다. AWS 서비스 또는 API가 도입될 때, 자동으로 업데이트 되기 때문에 시간을 절약할 수 있다. 예를 들어 AWS는 AWS의 모든 서비스에 대한 ReadOnlyAccess 정책을 제공한다. AWS에 새로운 서비스가 만들어지면, ReadOnlyAccess 정책에 자동으로 포함된다.

아래 다이어그램은 AWS policy가 어떻게 그룹과 유저 role에 적용되는지를 보여주고 있다.

 IAM Policy

개별 사용자가 아닌 그룹권한을 관리

Policy는 개별 사용자가 아닌 그룹에 할당하거나 인라인 정책을 작성한다. 예를 들어 조직별로 그룹을 만들어서 policy를 관리하면 특정 조직의 사용자가 다른 조직으로 이동 할 때, 자동으로 해당 조직의 policy가 적용된다. 사용자 별로 관리했다가는 얼마안되서 혼돈의 카오스를 경험하게 될 것이다.

애플리케이션의 경우 Role을 사용하기

EC2 위에서 실행되는 애플리케이션의 경우 Role을 이용해서 권한을 제어하자. Credential을 발급해서 사용하면 access/secret key를 관리해야 하는데, 하드코딩 혹은 설정파일로 관리해야 하므로 누출가능성이 높아진다.

KMS로 secret key를 암호화해서 s3에 저장한 다음, 복호화해서 쓰는 방법도 있겠으나 배보다 배꼽이 더 큰 짓이라고 하겠다.

Role은 AWS 자원(EC2나 Target group 같은)에 권한을 위임하기 때문에, key 없이 권한을 제어 할 수 있다. AWS IAM Role을 이용한 안전한 자원 접근을 참고하자.

유저 활동의 모니터링

CloudTrail은 AWS에서 제공하는 감사시스템으로, AWS 계정에서 발생하는 작업들에 대한 로그를 기록하고 이벤트를 발생시키고, 추적할 수 있다. 에를 들어, 사용자가 로그인 하면 "ConsoleLogin", EC2 인스턴스를 start 하면 "StartInstances", 인스턴스를 stop 하면 "StopInstnces" 로그를 발생한다. AWS 계정에 대한 모니터링은 보안을 강화하기 위한 중요한 요소다.

웹 콘솔에서 계정의 최근 활동을 확인 할 수 있다. 활동 로그들은 cloudwatch로 전송해서 이벤트를 모니터링 할 수도 있다.

 Cloudtrail

 Cloudtrail

참고