AWS IAM Best Practices

AWS Identity and Access Management (IAM)를 사용하면 AWS 서비스와 리소스에 대한 접근을 안전하게 관리할 수 있습니다. IAM에서는 Identity(유저, 그룹, 역할)을 생성 및 관리할 수 있으며 생성된 Identity에 특정 권한 (Permission)을 부여합니다. 특정 권한을 부여받은 Identity는 자격증명을 통한 인증을 받아 ‘어떤’리소스에 대한 접근을 허용 및 거부할 지를 관리합니다.

IAM 모범사례를 통해
AWS 안전하게 사용하기

  • IAM 계정 루트 사용자 사용 제한
  • 개별 IAM 유저 생성
  • MFA 활성화
  • EC2에 역할 부여
  • IAM 그룹을 통한 권한 부여
  • IAM 역할을 통한 권한 부여
  • AWS Managed 정책 사용
  • 자격 증명을 정기적으로 교체
  • Inline 정책 대신 Custom Managed 정책 사용
  • 불필요한 자격증명 삭제
  • 최소 권한 부여
  • IAM 정책 조건 사용
  • 강력한 암호정책 설정
  • AWS 계정 활동 모니터링

1AWS 계정 루트 사용자 사용 제한

AWS 계정 루트 사용자는 AWS 계정을 생성할 때 사용한 이메일 주소와 패스워드로 로그인하는 사용자로써 해당 계정의 모든 AWS 서비스 및 리소스에 대한 완전한 권한을 가지고 있습니다. 루트 사용자의 Credential (이메일 주소 및 패스워드)를 통해서 AWS Management Console에 접근하거나 루트 사용자의 Access Key를 이용해서 AWS SDK, CLI, API를 사용할 경우 어떤 제약도 없이 모든 리소스들을 생성하고, 보고, 지우고, 변경할수 있습니다. 따라서 루트 사용자는 일상적인 작업이나 관리 작업 시 사용하지 말고 초기 IAM 유저를 생성할 때만 사용하는 것을 권장합니다.

또한 루트 사용자에게는 Access Key를 부여하지 말고 만약 이미 부여했다면 삭제하기를 권장합니다. 루트 사용자의 패스워드를 안전하게 보관하고 다른 사람과 공유하지 말고 유출될 경우를 대비해서 Hardware MFA를 사용할 것을 권장합니다.

AWS 루트 계정 보안 강화하는법

2개별 IAM 유저 생성

AWS 서비스 및 리소스에 대한 접근이 필요한 사용자에게는 별도의 IAM 유저를 생성하고 필요한 권한을 부여해서 사용하도록 해야합니다. 관리자 권한이 필요한 경우에는 루트 사용자를 통한 접근 대신 IAM 유저를 생성하고 관리자 권한(Administrator Access)을 부여해서 사용하기를 권장합니다.

IAM 유저의 패스워드 및 Access Key는 다른 사용자와 공유하지 말고 개별 사용자만 이용할 수 있도록 합니다. 하나의 IAM 유저를 복수의 사용자가 공유할 경우 (1) 특정 사용자에게 불필요한 권한이 부여될 수 있고 (2) 로깅 관점에서도 해당 IAM 유저를 통한 Activity가 어떤 사용자에 의해 실행되었는지 알 수 없습니다.

3IAM 그룹을 통한 권한 부여

개별의 IAM 유저에 대한 권한을 정의하는 대신 역할 또는 부서 기반의 그룹을 생성하고, 각 역할 및 부서의 구성원에게 필요한 권한을 해당 그룹에 부여하고, IAM 유저를 각각의 그룹에 배치하여 더 편리하게 권한관리를 할수 있습니다. IAM 유저가 특정 IAM 그룹에 속하게 되면 해당 그룹에 부여된 모든 권한을 상속받습니다.

예를 들자면 “철수"와 “영희"가 이커머스 업체의 마케팅 부서에서 데이터 사이언티스트로 일을 하고 있다고 가정한다면, 마케팅부서에 필요한 권한을 명시한 IAM 정책과 데이터 사이언티스트로써 필요한 권한을 명시한 IAM 정책을 만들어서 각각 철수와 영희에게 부여하는 대신, 마케팅 IAM 그룹과 데이터 사이언티스트 IAM 그룹을 생성해서 각 그룹에 필요한 IAM 정책을 부여하고, “철수"와 “영희"를 각각의 그룹에 배치하면 됩니다. 만약에 부서이동 또는 역할의 변경이 있을 시에는 해당 유저를 기존의 그룹에서 제거하고 새로운 그룹에 추가하는 방식으로 좀 더 손쉽게 관리할수 있습니다.

4AWS Managed 정책 사용

사용자 지정 정책에서 모든 권한과 조건을 정의하여 특정 유저나 그룹에 필요한 권한을 부여할 수도 있습니다. 하지만 이를 위해서는 관리자에게 IAM 대한 깊은 이해와 지식이 요구되고, 학습과 점검에 들일 시간이 필요합니다. 만약 신속히 IAM을 사용해야 하는 상황이라면 ‘AWS 관리형 정책’으로 시작할 수 있습니다.

AWS 관리형 정책은 여러가지 일반적인 사용 사례를 기반으로 설계되었고 AWS에 의해서 유지 관리 및 업데이트 됩니다. 각 AWS 서비스별 FullAccess, ReadOnlyAccess 또는 WriteOnlyAccess 등의 행동을 기반으로 한 정책들부터 일반적인 IT 직무별로 나누어진 AdministorAccess, SysAdmin, NetworkAdmin, DatabaseAdmin 등의 정책도 제공합니다.

5Inline 정책 대신 Custom Managed 정책 사용

Inline 정책은 개별 IAM 유저, 그룹, 역할에 직접적으로 IAM 정책을 생성하여 권한을 부여하기 때문에 Inline정책은 해당 IAM 객체의 상세 설정을 통해서만 확인할 수 있습니다. 따라서 Inline 정책은 (1) 재사용이 불가능하고 (2) 일일이 IAM 객체의 상세 설정을 통해서 수동으로 Audit해야 하므로 꼭 필요할 경우를 제외하고는 사용하지 않을 것을 권장합니다.

이와 달리 AWS Managed와 Custom Managed 정책은 다수의 IAM 유저, 그룹, 역할에 부여할 수 있고, 해당 정책의 어떤 IAM 유저, 그룹, 역할에 부여 됐는 지 쉽게 확인할 수 있습니다.

6최소 권한 부여

IAM 유저, 그룹, 역할에 요구되는 작업 수행에 필요한 최소한의 권한만 부여합니다. 예를 들어 철수는 “chulsoo”라는 S3 Bucket에 파일을 업로드하고 다운받는 권한만으로 충분하지만 현재 AWS Managed 정책인 AmazonS3FullAccess 정책을 부여받고 있어서 철수는 영희와 민수의 S3 Bucket에 접근해서 파일을 읽고, 쓰고, 삭제할수 있습니다. 이런 경우 해당 AWS Managed 정책을 제거하고 “chulsoo” S3 Bucket에 대한 접근 권한을 가진 Custom Managed 정책을 생성해서 철수에게 부여해야합니다.

Principle of Least Privilege with IAM Policy

7강력한 암호정책 설정

AWS 계정 루트 사용자의 경우에는 다음과 같이 AWS에서 지정한 암호정책을 따라야 합니다

  • 8자 이상의 문자
  • 대문자, 소문자, 숫자, 영숫자가 아니 특수문자 중에서 최소 3개 이상의 조합
  • AWS 계정 이름 또는 이메일 주소와 동일하지 않음

IAM 유저의 대한 암호정책은 AWS 계정 관리자가 아래와 같은 항목들을 활성화해서 지정할수 있습니다.

  • 최소 문자수
  • 1개 이상의 대문자 필수
  • 1개 이상의 소문자 필수
  • 1개 이상의 숫자
  • 1개 이상의 특수문자
  • 패스워드 만료기간 설정
  • 패스워드 만료시 계정관리자를 통한 패스워드 초기화
  • IAM 유저가 자신의 패스워드 변경 가능
  • 패스워드 재사용 방지

위의 항목들은 기본값으로 활성화되어 있지 않기 때문에 AWS 계정 생성 후에는 암호정책을 반드시 지정해 주셔야 합니다.

8MFA 활성화

아무리 강력한 암호정책을 통해서 암호를 관리하더라도 패스워드가 유출되면 로그인을 막을 방법이 없습니다. 이러한 상황을 방지하기 위해서 MFA를 활성화해야 합니다. 로그인 과정에서 패스워드 이외에 가상 또는 하드웨어 MFA 디바이스에서 생성된 코드를 함께 입력해야만 로그인을 완료할 수 있도록 설정하여 계정을 보호할 수 있습니다.

MFA로 AWS 보안 강화하기

9EC2에 IAM 역할 부여

EC2 인스턴스에서 실행되는 어플리케이션에서 다른 AWS 서비스에 대한 접근권한이 필요할 경우, AWS CLI 설정파일이나 어플리케이션 소스코드에 IAM 유저의 자격증명을 (Access Key 와 Secret Access Key 조합) 직접 입력해서 사용하기 보다는 별도의 IAM 역할을 EC2에 부여해서 사용할 것을 권장합니다.

IAM 역할에는 IAM 유저와 달리 영구적인 자격증명이 부여되지 않고 AWS Security Token Service (STS)를 통해서 동적으로 생성되는 임시 자격증명 (임시로 생성되는 Access Key와 Secret Access Key 조합)을 사용합니다. 이 임시 자격증명이 만료될 경우 다시 새로운 임시 자격증명을 부여 받아야 하기 때문에 자격증명을 관리 하지 않아도 된다는 이점이 있습니다.

10IAM 역할을 통한 권한 부여

IAM 역할을 다른 AWS 계정, 웹 ID(Amazon, Facebook, Google, Cognito) 또는 기타 자격증명 공급자(Identity Provider)와 연동하여 내 계정의 AWS 서비스 및 리소스에 대한 접근 권한을 줄 수 있습니다. IAM 유저를 통한 자격증명(IAM 유저 로그인정보 및 Access Key)을 제공하는 대신 IAM역할을 이용해 임시 자격증명을 부여하여 관리할 수 있습니다.

11자격 증명을 정기적으로 교체

IAM 유저의 로그인 암호나 Access Key를 주기적으로 교체하기를 권장합니다. 해당 자격 증명이 노출되어 침해사고가 일어나고 있다는 사실을 사용자가 인지하지 못하더라도 정기적인 자격 증명 교체를 통해 피해 기간을 최소화 할 수 있습니다.

12불필요한 자격증명 삭제

불필요한 IAM 유저 패스워드 및 Access Key는 삭제합니다. 예를 들어 CLI, SDK, API로만 AWS 리소스에 접근할 경우에는 IAM 유저 암호가 필요없고, AWS Management Console을 통해서만 AWS 리소스를 접근할 경우에는 Access Key가 필요 없습니다. IAM Console에서 IAM 유저의 마지막 로그인 날짜 및 Access Key의 마지막 사용 날짜를 확인하여 불필요할 경우에는 삭제합니다.

13IAM 정책 조건 사용

IAM 정책에 리소스에 대한 접근 허용 조건을 정의할 수 있습니다. 예를 들어 특정 IP 주소에서 오는 요청, 지정된 시간 범위내에서의 요청, MFA가 인증된 자격증명에서의 요청일 경우에는 접근을 허용하도록 설정할 수 있습니다. 사용 가능한 조건들은 아래 링크에서 확인할 수 있습니다. 접근 허용 조건 바로가기 Principle of Least Privilege with IAM Policy

14AWS 계정 활동 모니터링

AWS CloudTrail을 통해서 사용자가 AWS 계정에서 수행한 작업과 사용한 리소스 기록을 확인할 수 있습니다. 해당 로그에는 작업 시간 및 날짜, 사용자 정보, 작업 실패 및 성공 여부 등이 나타납니다. AWS Config를 통해서 IAM 사용자, 그룹, 역할, 정책등의 구성 및 변경 내역을 확인할 수 있습니다. CloudWatch Event와 연동해서 사용자 로그에서 특정 이벤트(특정 API 호출, 특정 ID 또는 특정 IP에서 호출) 발생시 알람을 받을수도 있습니다.

AWS Root Account Best Practice

AWS Trusted Advisor를 통해서 CloudTrail 로깅에 활성화 됐는지, IAM 암호정책이 설정됬는지, 생성한지 90일이 지난 Access 키가 있는지, 노출된 Access 키가 있는지, 루트 사용자에 MFA가 활성화 되어 있는지를 모니터링 할 수 있습니다.




솔트웨어의 DevOps 전문가들이 도와드립니다.
  • 신규 및 기존AWS 계정에 대한 IAM 모델을 설계 및 구성해드립니다.
  • 다수의 AWS 계정간의 연동다수의 AWS 계정간의 연동 및 기타 자격증명 공급자를 통한 권한부여 구성을 도와드립니다.
  • CloudTrail, AWS Config, CloudWatch, Lambda 등을 이용해서 IAM 관련 보안 취약점을 실시간으로 모니터링 하고 보완할수 있는 시스템을 구축해드립니다.





AWS 서비스에 대해
궁금하신 사항이 있으신가요?

csm@saltware.co.kr
T. 02-2025-4942