오늘도 기록하는 중 GitHub

Cloud

[AWS] IAM

YongE 2025. 5. 7. 17:59

AWS Identity and Access Management(IAM)


IAM란?

AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 접근을 안전하게 제어하는 핵심 서비스다. IAM을 통해 사용자 인증(authentication)과 권한 부여(authorization)를 관리하며, AWS 계정 내에서 세분화된 접근 제어를 구현할 수 있다.

IAM의 주요 기능은 루트 계정 보호, 사용자/그룹 관리, 역할 기반 접근 제어, 임시 자격 증명 발급으로 구성된다. 특히 루트 계정은 모든 권한을 보유하므로 일상 작업에서 사용을 지양해야 하며, IAM 사용자를 생성해 최소 권한 원칙을 적용하는 것이 필수적이다.

IAM의 역할

IAM은 AWS 전역 서비스로 리전에 종속되지 않으며, 다음 요소들이 상호작용한다.

  • 보안 주체(Principal). 사용자, 역할, 애플리케이션 등 AWS 작업을 요청하는 주체
  • 요청(Request). API 호출 또는 콘솔 접근 시도
  • 인증(Authentication). 자격 증명(비밀번호, 액세스 키, MFA) 확인
  • 인가(Authorization). 정책 기반 권한 검증

IAM의 핵심 구성 요소

사용자(User)와 그룹(Group)

IAM 사용자는 실제 사용자 또는 애플리케이션을 대표하는 엔터티로, 장기 자격 증명(액세스 키/비밀 키)을 부여받는다. 그룹은 사용자 집합에 정책을 일괄 적용하는 메커니즘으로, 조직 구조에 맞춰 개발자/관리자/감사자 그룹 등을 구성할 수 있다. 예를 들어 'Developers' 그룹에 Amazon EC2 전체 권한과 S3 읽기 전용 권한을 부여하면, 구성원 사용자들은 개별 정책 없이 그룹 권한을 상속받는다.

역할(Role)과 정책(Policy)

역할은 임시 자격 증명을 사용하는 보안 주체로, EC2 인스턴스나 Lambda 함수에 권한을 위임할 때 활용된다. 신뢰 정책(Trust Policy)은 역할을 수임할 수 있는 주체를 정의하며, 리소스 기반 정책의 일종이다.

정책은 JSON 형식으로 권한 규칙을 기술하며, 주요 요소는 다음과 같다.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::example-bucket/*",
    "Condition": {"IpAddress": {"aws:SourceIp": "192.0.2.0/24"}}
  }]
}

이 정책은 특정 IP 대역에서 S3 버킷 객체 조회를 허용한다. 정책 유형은 관리형(Managed)과 인라인(Inline)으로 구분되며, 권한 경계(Permission Boundary)를 통해 최대 권한 범위를 제한할 수 있다.

보안 강화 메커니즘

다중 인증(MFA)

MFA는 비밀번호와 일회용 코드 조합으로 보안을 강화한다. IAM 정책을 통해 MFA 미활성화 시 작업 제한을 구현할 수 있다.

{
  "Effect": "Deny",
  "NotAction": ["iam:CreateVirtualMFADevice", "iam:EnableMFADevice"],
  "Resource": "*",
  "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
}

이 정책은 MFA 없이 접근 시 대부분 작업을 차단하며, MFA 등록 관련 액션만 허용한다.

다음은 MFA 인증 흐름을 나타낸 자료다.

[사용자] -- 1. 사용자명/비밀번호 입력 --> [AWS 로그인 포털/API]
                                          |
                                          | 2. 1차 인증 (비밀번호 검증)
                                          V
                                    [인증 성공 시]
                                          |
                                          | 3. MFA 코드 입력 요청
                                          V
[사용자] -- 4. MFA 디바이스에서 코드 확인 후 입력 --> [AWS 로그인 포털/API]
                                                    |
                                                    | 5. 2차 인증 (MFA 코드 검증)
                                                    V
                                              [인증 최종 성공]
                                                    |
                                                    V
                                          [AWS 리소스 접근 권한 획득]

암호 정책 및 자격 증명 관리

IAM 암호 정책에서는 최소 길이(8~128자), 문자 유형 조합(대문자/소문자/숫자/특수문자), 재사용 방지(최근 3회 기억), 만료 주기(90일) 등을 설정할 수 있다. 액세스 키는 정기적으로 교체해야 하며, AWS Security Token Service(STS)를 활용한 임시 자격 증명 사용이 권장된다.

권한 관리 전략

최소 권한 원칙 적용

IAM Access Analyzer는 CloudTrail 로그를 분석해 실제 사용된 권한을 기반으로 정책을 생성한다. 예를 들어 S3 버킷 목록 조회만 수행한 사용자에게는 s3:ListAllMyBuckets 권한만 부여하는 정책이 자동 생성된다.

교차 계정 접근 관리

역할 수임(AssumeRole)을 통해 타 계정 리소스에 안전하게 접근할 수 있다. 신뢰 정책에서 원본 계정을 명시함으로써 권한 에스컬레이션을 방지한다.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": "arn:aws:iam::123456789012:root"},
    "Action": "sts:AssumeRole"
  }]
}

IAM 역할 수임(AssumeRole)을 통한 교차 계정 접근 흐름을 나타낸다.

[신뢰하는 계정 (Account A)의 IAM 사용자/역할]
      |
      | 1. sts:AssumeRole API 호출 (대상: Account B의 역할 ARN)
      V
[AWS STS (Security Token Service)] <--- 2. Account B의 역할 신뢰 정책 검증
      |                                     (Account A의 호출 허용 여부 확인)
      | 3. 임시 보안 자격 증명 발급 (액세스 키, 비밀 키, 세션 토큰)
      V
[신뢰하는 계정 (Account A)의 IAM 사용자/역할]
      |
      | 4. 발급받은 임시 자격 증명을 사용하여 Account B의 리소스에 접근 요청
      V
[신뢰받는 계정 (Account B)의 AWS 리소스 (예: S3 버킷)]
      ^
      | 5. Account B의 역할 권한 정책에 따라 접근 허용/거부
      |    (임시 자격 증명에 연결된 역할의 권한 사용)

고급 기능 및 통합

IAM 페더레이션

SAML 2.0 또는 OIDC 표준을 지원하는 기업 인증 시스템(예: Active Directory)과 연동하여 Single Sign-On을 구현할 수 있다. 페더레이션 사용자는 AWS 콘솔에 직접 로그인하지 않고, IdP를 통해 임시 자격 증명을 획득한다.

CLI 및 SDK 연동

Boto3를 활용한 IAM 사용자 생성 예시는 다음과 같다.

import boto3

def create_iam_user(username):
    iam = boto3.client('iam')
    try:
        response = iam.create_user(UserName=username)
        print(f"사용자 {username} 생성 완료")
    except iam.exceptions.EntityAlreadyExistsException:
        print(f"사용자 {username} 이미 존재")
    except Exception as e:
        print(f"오류 발생: {e}")

create_iam_user('new_developer')

이 코드는 새로운 IAM 사용자를 생성하며, 예외 처리를 통해 중복 생성 시 오류를 방지한다.

모범 사례 구현

조직별 권한 설계

  • 개발 환경. AmazonEC2FullAccess, AmazonS3ReadOnlyAccess 정책 조합
  • 운영 환경. AWSCloudFormationFullAccesscloudformation:DeleteStack 액션 제한
  • 감사 계정. SecurityAudit 관리형 정책과 CloudTrail 로그 분석 권한

지속적 보안 모니터링

IAM 자격 증명 보고서는 사용자별 MFA 상태, 액세스 키 사용 기간 등을 CSV 형식으로 제공한다. Access Advisor는 최근 400일 동안 사용되지 않은 권한을 식별해 불필요한 권한 제거를 용이하게 한다.

반응형

'Cloud' 카테고리의 다른 글

[AWS] CloudWatch  (0) 2025.05.08
[AWS] Lambda  (1) 2025.05.07
[AWS] VPC  (0) 2025.05.02
[AWS] CloudFormation  (0) 2025.05.02
클라우드 컴퓨팅 아키텍처  (0) 2025.03.10