AWS IAM : 개념과 안전하게 사용하는 방법

AWS
AWS IAM : 개념과 안전하게 사용하는 방법

웹서버 코드를 작성할때 인증 인가를 구현하듯,
AWS에서도 사용자의 권한 인가를 위해서 IAM 이라는 서비스를 사용한다.

IAM이란

Identify and Access Management 의 약자인 IAM은
AWS의 리소스에 대한 접근을 안전하게 제어할 수 있는 서비스이다.
IAM을 사용하여 사용자,역할,그룹을 생성하고 관리하며 리소스에 대한 접근을 제어할 수 있다.

또한 IAM은 글로벌 서비스 로, 리전에 상관없이 작동한다.
글로벌 서비스가 뭔지 모르겠다면? 개념 확인해보기

IAM의 구성 요소

  • 사용자(User) : AWS와 상호작용하는 개인 또는 서비스 (일반적으로 조직의 한 사람과 매칭됨)
    • 일반적으로 개인(사람) 사용자는 AWS 콘솔 접속 권한을 부여하고, 애플리케이션(서비스) 사용자는 AWS 콘솔 권한 없이 API를 통해 리소스에만 접근한다
    • 사용자는 영구 자격 증명의 일종이다

영구 자격 증명이란?

명시적으로 취소하기 전까지 계속 유효한 장기 보안 인증으로, 주로 액세스 키와 비밀 키로 구성된다.

image
  • 그룹(Group) : 여러 사용자에게 공통 권한을 할당하기 위한 집합
    • 다수의 사용자에게 일관된 권한 정책을 사용 가능하며, 한 사용자는 여러 그룹에 속할 수 있다
image
  • 역할(Role) : 특정 권한을 가진 IAM 자격 증명으로, AWS 서비스나 외부 사용자가 일시적으로 사용
    • 역할을 부여하면 1~12시간 이내로 임시 자격 증명을 부여한다

임시 자격 증명이란?

특정 기간(15분~12시간) 동안만 유효한 단기 보안 토큰으로, 만료 후 재발급을 해야 다시 접근할 수 있다.

image
  • 정책(Policy) : 사용자 , 그룹 , 역할의 권한을 정의하는 JSON 문서
    • 사용자, 그룹, 역할이 어떤 AWS 리소스에 어떤 작업을 수행할 수 있는지 정의하는 JSON 형식의 권한 문서입니다.
image
  • 자격 증명 공급자(Identy Provider) : 외부 자격 증명 시스템
    • AWS 외부의 인증 시스템(회사 디렉토리, 소셜 로그인 등)을 통해 사용자를 인증하고 AWS 접근을 관리하는 메커니즘

IAM 정책(Policy)

IAM의 정책은 JSON 형식으로 작성된 문서를 사용하며 , AWS의 리소스에 대한 권한을 정의한다.

정책(JSON)의 기본 구조

image
  • Version : 정책 언어 버전, 항상 "2012-10-17" 사용 권장
  • Statement : 정책 내용을 포함하는 배열
  • Sid (필수 X) : Statement ID, 정책 설명 문자열
  • Effect : 명시된 리소스를 허용/거부 할지 여부. "Allow" 또는 "Deny"
  • Action : 허용/거부되는 API 작업 목록
  • Resource : 적용되는 AWS 리소스의 ARN(Amazon Resource Name)
  • Condition (필수 X) : 정책이 적용되는 조건

정책의 종류

위에 있는 JSON 정책 문서의 종류에도 여러가지가 있다.

  • 자격 증명 기반 정책: 사용자, 그룹, 역할에 직접 연결
  • AWS 관리형: AWS가 미리 만들어 제공하는 정책 (예: AmazonS3ReadOnlyAccess)
    • AWS가 만들고 관리하므로 사용자는 수정할 수 없으며, 서비스 업데이트에 따라 자동으로 정책이 업데이트됨
  • 고객 관리형: 사용자가 직접 생성 관리하는 정책
    • 특정 사용 사례에 맞춤화할 수 있으며, 여러 IAM 엔티티에 연결하여 재사용 가능
  • 인라인: 특정 사용자/그룹/역할에만 포함되는 정책
    • 해당 엔티티에만 직접 포함되어 있어 다른 곳에서 재사용할 수 없으며, 엔티티 삭제 시 함께 삭제됨
  • 리소스 기반 정책: S3 버킷, Lambda 함수 등 리소스에 직접 연결되는 정책
    • 리소스 자체에 연결되어 누가 해당 리소스에 접근할 수 있는지 정의한다. 이는 크로스 계정 접근 제어에 유용하다

크로스 계정 접근 제어란?

여러 AWS 계정 사이에서 내 계정의 리소스를 다른 계정이 사용할 수 있게 안전하게 허용하는 방법이다
예시 : A계정의 S3 버킷을 B계정에서도 읽을 수 있게 허용

  • 권한 경계 - 사용자/역할이 가질 수 있는 최대 권한 제한을 정의한 정책
    • 한 사용자가 가질수 있는 최대 권한의 한도를 설정하여 더욱 보안을 높일 수 있다
  • 서비스 제어 정책(SCP) - AWS Organizations에서 조직 전체 계정 권한을 제어하는 정책
    • 조직 내 모든 계정에 적용되며, 루트 사용자도 SCP정책에서 허용하지 않은 리소스는 사용할 수 없다

IAM 안전하게 관리하기

비밀번호 정책 설정하기

  • 최소 비밀번호 길이
  • 최소 비밀번호 요구사항 설정
  • 비밀번호 만료시간 설정
  • 이전에 사용한 비밀번호 사용 제한

IAM MFA 적용하기

MFA란? Multi Factor Autication의 줄임말!

설정한 비밀번호 + 소유한 보안 장비를 통해 인증하기 때문에 비밀번호가 도난 당하여도 해커가 소유한 보안 장치까지 확보해야 계정에 접근할 수 있으므로 계정의 보안을 향상시킬 수 있다!

MFA를 사용하여 계정을 보호할 수 있다.
AWS에서 사용 가능한 MFA 디바이스는 크게 3가지 종류로 나눌 수 있다

  • 가상 MFA 디바이스: 스마트폰에 Google Authenticator, Authy 같은 인증 앱을 설치하여 시간 기반 일회용 암호(TOTP)를 생성하여 인증
  • Universal 2nd Factor (U2F) 보안 키: YubiKey와 같은 물리적 USB 장치로, 컴퓨터에 연결하고 버튼을 눌러 인증
  • 하드웨어 MFA 디바이스(Key Fob): 작은 물리적인 장치로, 디스플레이에 표시되는 일회용 코드를 입력하여 인증

최소 권한의 원칙 적용하기

AWS의 IAM은 "최소 권한의 원칙(Principle of Least Privillege)" 을 따르는 것이 베스트 케이스이다.

최소 권한의 원칙에 따라 각 IAM사용자에게 작업에 필요한 최소한의 권한만을 부여하는 것이다

루트 계정을 사용하지 않기

AWS 계정을 처음 만든다면 IAM 사용자 없이 루트 계정만이 만들어진다.
이 루트 계정은 AWS의 모든 액세스 권한을 가지고 있기에 일반적인 작업에 사용하지 않는 것이 좋다. 공식 문서

권한 경계 사용하기

권한 경계(Permissions Boundary)는 IAM 사용자 또는 역할이 가질 수 있는 최대 권한을 설정하는 기능이다.
권한 경계를 설정하면 사용자가 자신에게 추가할 수 있는 권한의 상한선이 정해진다.