권한 관리에서 가장 어려운 질문은 "누가 무엇을 할 수 있나"가 아니라 "누가 하지 말아야 할 것을 할 수 있나"다. IAM 정책을 한 줄씩 읽어 외부 노출 여부를 사람이 판단하는 건 사실상 불가능하다. S3 버킷 정책, KMS 키 정책, IAM 역할의 신뢰 정책이 서로 얽히면 "이 버킷이 외부 계정에 열려 있나"라는 단순한 질문조차 사람의 눈으로는 안정적으로 답할 수 없다. 정책 조합의 경우의 수가 폭발하기 때문이다.
IAM Access Analyzer의 본질은 이 질문을 수학적으로 증명하는 엔진이다. 정책을 실행해보고 결과를 관찰하는 게 아니라(그러면 모든 경우를 시도할 수 없다), 정책 자체를 논리식으로 변환해 "외부 접근이 가능한 입력이 존재하는가"를 형식 논리로 푼다. 왜 이게 "탐지"가 아니라 "증명"인지, automated reasoning이라는 기술이 어떻게 무한한 경우의 수를 유한 시간에 판정하는지, Trusted Advisor가 어떻게 모범 사례를 자동 점검하는지 — 이 도구들이 단순한 스캐너가 아닌 이유를 따라가는 게 이 글이다.
보안 스캐너 대부분은 패턴 매칭으로 동작한다. "이런 모양의 정책은 위험하다"는 규칙 목록을 두고, 정책이 그 패턴에 맞으면 경고한다. 문제는 정책 언어(IAM)가 너무 표현력이 풍부해서 위험한 패턴을 전부 열거할 수 없다는 것이다