Chapter 19

IAM Access Analyzer - 외부 노출 리소스 자동 탐지

"우리 리소스가 외부에 실수로 공개되어 있지는 않은지, 자동으로 찾아내자"

학습 목표

  • IAM Access Analyzer의 역할과 필요성을 이해한다
  • 외부 접근 분석기(Account 타입)를 생성하고 발견 사항(Findings)을 확인한다
  • 의도된 접근은 아카이브하고, 의도하지 않은 접근은 수정하는 방법을 학습한다
  • 미사용 접근 분석기(Unused Access)의 개념과 최소 권한 원칙과의 관계를 이해한다

IAM Access Analyzer란?

IAM Access Analyzer는 AWS 계정의 리소스가 외부에 공유되고 있는지 자동으로 탐지하는 서비스입니다. S3 버킷, IAM 역할, KMS 키 등이 의도하지 않게 외부 계정이나 인터넷에 노출되어 있는지 지속적으로 모니터링합니다.

비유로 이해하기: 건물의 보안 감사관

IAM Access Analyzer는 건물의 보안 감사관과 같습니다. 보안 감사관은 건물의 모든 문과 창문을 하나하나 점검하며, "이 문은 외부인도 열 수 있습니다!"라고 보고합니다.

비유AWS 서비스역할
건물AWS 계정보호해야 할 대상
문과 창문S3 버킷, IAM 역할 등외부 접근 가능한 리소스
보안 감사관IAM Access Analyzer외부 노출 자동 탐지
감사 보고서발견 사항 (Findings)"이 리소스는 외부에 공개되어 있습니다"

건물에 100개의 문이 있다면 일일이 확인하기 어렵습니다. 보안 감사관이 자동으로 모든 문을 점검하고, "3번 문과 17번 문은 외부인도 열 수 있습니다"라고 알려주면, 관리자는 그 문이 의도적으로 열어둔 것인지(고객 출입구) 아닌지(실수로 잠그지 않은 문)만 판단하면 됩니다.

ShopEasy에서 왜 필요한가?

ShopEasy 프로젝트에서 우리는 여러 리소스를 만들었습니다. 일부는 의도적으로 퍼블릭 접근을 허용했고, 일부는 내부에서만 접근해야 합니다.

리소스외부 접근 허용?이유
shopeasy-frontend-ACCOUNT_ID 의도된 퍼블릭 정적 웹 호스팅 (고객이 접근해야 함)
shopeasy-images-ACCOUNT_ID (uploads/) 의도된 퍼블릭 상품 이미지 공개 (고객이 볼 수 있어야 함)
ShopEasy-EC2-Role 허용 안 됨 외부 계정에서 사용 불가해야 함
KMS 키, Secrets Manager 등 허용 안 됨 내부에서만 접근해야 함

Access Analyzer가 자동으로 찾아줍니다: "S3 프론트엔드 버킷이 퍼블릭으로 공개되어 있습니다", "S3 이미지 버킷의 uploads/ 경로가 퍼블릭입니다" 등의 발견 사항을 보여주고, 관리자가 "이것은 의도된 것이다" 또는 "이것은 실수다, 즉시 수정해야 한다"를 판단하도록 합니다.

분석기 타입과 대상 리소스

분석기 타입

IAM Access Analyzer는 두 가지 타입의 분석기를 제공합니다.

타입신뢰 영역 (Trust Zone)탐지 대상사용 시나리오
계정 (Account) 현재 AWS 계정 현재 계정 외부에서 접근 가능한 리소스 단일 계정 환경 (이 실습)
조직 (Organization) AWS Organizations 전체 조직 외부에서 접근 가능한 리소스 여러 계정을 사용하는 조직
핵심 개념: 신뢰 영역 (Trust Zone)

신뢰 영역이란 "이 범위 안에서의 접근은 정상"이라고 간주하는 범위입니다.

계정(Account) 타입: 신뢰 영역 = 현재 AWS 계정. 다른 AWS 계정이나 인터넷에서 접근 가능하면 "외부 접근"으로 탐지합니다.

조직(Organization) 타입: 신뢰 영역 = AWS Organizations 전체. 같은 조직 내 다른 계정에서의 접근은 정상으로 간주하고, 조직 외부 접근만 탐지합니다.

이 실습에서는 계정(Account) 타입을 사용합니다.

분석 대상 리소스

Access Analyzer는 다음 리소스의 정책을 분석하여 외부 접근을 탐지합니다.

리소스 타입분석 내용ShopEasy 관련
S3 버킷 버킷 정책, ACL에서 외부 접근 탐지 프론트엔드/이미지 버킷 퍼블릭 접근
IAM 역할 신뢰 정책에서 외부 계정 접근 탐지 ShopEasy-EC2-Role 확인
KMS 키 키 정책에서 외부 계정 접근 탐지 Ch10에서 생성한 KMS 키
Lambda 함수 리소스 기반 정책에서 외부 접근 탐지 -
SQS 큐 큐 정책에서 외부 접근 탐지 -
Secrets Manager 리소스 정책에서 외부 접근 탐지 Ch11에서 생성한 시크릿
Inspector vs Access Analyzer - 무엇이 다른가?

이전 챕터(Ch18)의 Amazon Inspector는 EC2 인스턴스와 컨테이너의 소프트웨어 취약점(CVE)을 스캔합니다.

이번 챕터의 IAM Access Analyzer는 리소스의 정책(Policy)을 분석하여 외부 접근 가능 여부를 탐지합니다.

항목Inspector (Ch18)Access Analyzer (Ch19)
분석 대상소프트웨어 패키지리소스 정책
탐지 내용CVE 취약점외부 접근 가능 리소스
비유건물의 구조적 결함 검사문과 창문이 열려있는지 검사

실습: IAM Access Analyzer

시작 전 확인사항
  • AWS 콘솔에 로그인되어 있는지 확인하세요
  • 리전이 아시아 태평양 (서울) ap-northeast-2로 설정되어 있는지 확인하세요
  • 이전 챕터들에서 생성한 S3 버킷(프론트엔드, 이미지)이 존재하는지 확인하세요
실습: IAM Access Analyzer로 외부 노출 리소스 탐지하기
예상 소요 시간: 약 15~20분

Access Analyzer 생성은 간단하며, 스캔 결과가 나오기까지 수 분이 소요될 수 있습니다.

  1. IAM Access Analyzer 생성

    IAM 콘솔에서 외부 접근 분석기를 생성합니다. 분석기가 생성되면 계정 내 모든 지원 리소스의 정책을 자동으로 분석하기 시작합니다.

    설정 값

    항목
    분석기 이름ShopEasy-Analyzer
    분석기 타입계정 (Account)
    계정(Account) 타입 분석기

    계정(Account) 타입 분석기는 해당 AWS 계정 외부에서 접근 가능한 리소스를 탐지합니다. 즉, 다른 AWS 계정이나 인터넷에서 접근할 수 있는 S3 버킷, IAM 역할 등을 찾아냅니다.

    조직(Organization) 타입은 AWS Organizations 외부 접근을 탐지합니다. 이 실습에서는 계정 타입을 사용합니다.

    Access Analyzer는 무료 서비스입니다!

    외부 접근 분석기(Account/Organization 타입)는 추가 비용 없이 사용할 수 있습니다. 걱정 없이 활성화하세요!

    AWS 콘솔 상단 검색창에 IAM을 입력하고 IAM 서비스를 선택합니다. 왼쪽 메뉴에서 Access Analyzer를 클릭합니다. "분석기 생성" 또는 "Create analyzer" 버튼을 클릭합니다.

    분석기 이름에 ShopEasy-Analyzer를 입력하고, 타입은 "계정" 또는 "Account"를 선택한 후 "분석기 생성"을 클릭합니다.

  2. 발견 사항(Findings) 확인

    분석기가 생성되면 자동으로 계정 내 리소스를 스캔합니다. 수 분 후 발견 사항(Findings) 목록에서 외부 접근이 가능한 리소스를 확인합니다.

    예상 발견 사항

    ShopEasy 프로젝트에서는 다음과 같은 발견 사항이 나타날 수 있습니다:

    리소스발견 내용의도 여부
    shopeasy-frontend-* S3 버킷이 퍼블릭 읽기 허용 의도된 것 (정적 웹 호스팅)
    shopeasy-images-* S3 버킷 uploads/ 경로 퍼블릭 의도된 것 (상품 이미지 공개)
    기타 리소스 외부 접근 가능 확인 필요

    각 발견 사항에서 확인할 정보

    • 리소스 ARN: 어떤 리소스가 외부에 노출되어 있는지
    • 외부 접근 주체 (Principal): 누가 접근할 수 있는지 (예: 인터넷 전체, 특정 외부 계정)
    • 조건 (Condition): 어떤 조건에서 접근이 가능한지
    • 접근 수준: Read, Write, List 등 어떤 수준의 접근이 가능한지
    발견 사항이 바로 나타나지 않을 수 있습니다

    분석기 생성 후 첫 스캔이 완료되기까지 수 분이 소요됩니다. 발견 사항이 비어 있다면 잠시 기다린 후 페이지를 새로고침하세요.

    IAM → Access Analyzer 페이지에서 방금 생성한 ShopEasy-Analyzer를 선택합니다. Findings (발견 사항) 탭을 클릭하면 외부 접근이 가능한 리소스 목록이 표시됩니다.

    각 발견 사항을 클릭하면 상세 정보(리소스 ARN, Principal, Condition 등)를 확인할 수 있습니다.

  3. 발견 사항 처리 (Archive / Resolve)

    발견 사항을 검토하고, 의도된 접근과 의도하지 않은 접근을 구분하여 처리합니다.

    의도된 접근 처리: 아카이브(Archive)

    S3 프론트엔드 버킷의 퍼블릭 접근처럼 의도적으로 공개한 리소스는 "아카이브(Archive)" 처리합니다. 아카이브는 "이 발견 사항은 의도된 것이며, 보안 문제가 아니다"라고 표시하는 것입니다.

    아카이브 처리 방법

    • 발견 사항을 선택합니다
    • "아카이브(Archive)" 버튼을 클릭합니다
    • 해당 발견 사항이 Active에서 Archived 상태로 변경됩니다

    의도하지 않은 접근 처리: 리소스 정책 수정

    만약 의도하지 않은 외부 접근이 발견되면:

    1. 해당 리소스의 정책(Policy)을 수정하여 외부 접근을 제거합니다
    2. 정책 수정 후 "다시 스캔(Rescan)"을 클릭합니다
    3. 수정이 올바르면 발견 사항이 "Resolved" 상태로 변경됩니다
    모범 사례: Active 발견 사항 0 유지

    실무에서는 모든 발견 사항을 검토하고, 의도된 것은 아카이브, 의도하지 않은 것은 즉시 수정합니다. 정기적으로 Active 발견 사항이 0인 상태를 유지하는 것이 목표입니다.

    아카이브 규칙(Archive Rule)을 생성하면, 같은 패턴의 발견 사항이 새로 생성될 때 자동으로 아카이브 처리됩니다. 예: "shopeasy-frontend-* 버킷의 퍼블릭 접근은 항상 아카이브"

    Findings 목록에서 S3 프론트엔드 버킷 관련 발견 사항을 선택(체크)합니다. 상단의 "Archive" 또는 "아카이브" 버튼을 클릭합니다.

    마찬가지로 S3 이미지 버킷의 uploads/ 경로 관련 발견 사항도 의도된 것이므로 아카이브 처리합니다.

    아카이브 후 Active 탭에서 해당 발견 사항이 사라진 것을 확인합니다. Archived 탭에서 아카이브된 발견 사항을 볼 수 있습니다.

  4. 미사용 접근 분석기 생성 (Unused Access)

    외부 접근 분석기 외에, IAM Access Analyzer는 미사용 접근 분석기도 제공합니다. 이 분석기는 일정 기간 동안 사용되지 않은 IAM 역할, 사용자, 권한을 탐지합니다.

    설정 값

    항목
    분석기 이름ShopEasy-Unused-Access-Analyzer
    분석기 타입미사용 접근 (Unused Access)
    분석 기간30일

    미사용 접근 분석기가 탐지하는 것

    • 미사용 IAM 역할: 30일간 사용(Assume)되지 않은 역할
    • 미사용 IAM 사용자 자격 증명: 30일간 사용되지 않은 액세스 키, 비밀번호
    • 미사용 권한: 부여되었지만 30일간 실제로 사용된 적 없는 권한
    Ch08 최소 권한 원칙의 자동 검증

    Chapter 08에서 IAM 역할에 최소 권한을 부여하는 방법을 배웠습니다. 미사용 접근 분석기는 이를 자동으로 검증합니다.

    예를 들어, ShopEasy-EC2-Role에 S3, DynamoDB, CloudWatch, SSM, SecretsManager 접근 권한을 부여했는데, 만약 SSM 권한이 30일간 사용되지 않았다면 "이 권한은 불필요할 수 있습니다"라고 알려줍니다.

    이를 통해 실제로 필요한 권한만 유지하는 최소 권한 원칙을 지속적으로 적용할 수 있습니다.

    미사용 접근 분석기는 유료 서비스입니다!

    외부 접근 분석기(Account/Organization 타입)는 무료이지만, 미사용 접근 분석기는 유료입니다. IAM 역할/사용자당 월 $0.20이 과금됩니다.

    하지만 IAM 역할이 몇 개 없는 실습 환경에서는 비용이 거의 발생하지 않습니다 (예: IAM 역할 5개 = 월 $1.00).

    실습 후 반드시 삭제하세요! 분석기를 삭제하지 않으면 매월 비용이 발생합니다.

    IAM → Access Analyzer 페이지에서 다시 "분석기 생성"을 클릭합니다. 이번에는 타입을 "미사용 접근(Unused Access)"으로 선택합니다.

    분석기 이름에 ShopEasy-Unused-Access-Analyzer를 입력하고, 분석 기간을 30일로 설정한 후 "분석기 생성"을 클릭합니다.

    미사용 접근 분석 결과가 나타나기까지 시간이 걸릴 수 있습니다. 개념을 이해하는 것이 이 단계의 핵심입니다.

확인 사항

  • ShopEasy-Analyzer가 생성되고 활성(Active) 상태인가?
  • 발견 사항(Findings)에서 외부 접근 가능한 리소스를 확인했는가?
  • S3 프론트엔드 버킷의 퍼블릭 접근이 "의도된 것"으로 아카이브 되었는가?
  • S3 이미지 버킷의 uploads/ 퍼블릭 접근도 아카이브 되었는가?
  • Active 상태의 의도하지 않은 발견 사항이 없는가?
  • 미사용 접근 분석기의 개념과 최소 권한 원칙과의 관계를 이해했는가?
실습 후 미사용 접근 분석기는 반드시 삭제하세요!

미사용 접근 분석기(ShopEasy-Unused-Access-Analyzer)는 유료 서비스이므로, 실습이 끝나면 반드시 삭제해야 합니다. 외부 접근 분석기(ShopEasy-Analyzer)는 무료이므로 유지해도 비용이 발생하지 않습니다.

Chapter 23 리소스 정리 시 함께 삭제합니다.

이번 챕터에서 달성한 것
  • IAM Access Analyzer의 역할과 보안 감사관 비유를 이해
  • 계정(Account) 타입 분석기를 생성하고 외부 접근 리소스를 자동 탐지
  • 의도된 접근은 아카이브, 의도하지 않은 접근은 수정하는 워크플로우 학습
  • 미사용 접근 분석기로 최소 권한 원칙을 자동 검증하는 방법 이해
  • 무료(외부 접근 분석기) vs 유료(미사용 접근 분석기) 구분
보안 모니터링 서비스 비교 (Ch.12 ~ Ch.19)
챕터서비스탐지 대상비유
Ch.12CloudTrailAPI 호출 기록CCTV 녹화기
Ch.13GuardDuty보안 위협 자동 탐지AI 경비원
Ch.18Inspector소프트웨어 취약점건물 구조 점검사
Ch.19Access Analyzer외부 접근 가능 리소스보안 감사관

다음 Chapter 20에서는 CloudWatch 메트릭 필터를 사용하여 로그에서 특정 패턴을 감지하고 알림을 설정합니다.