IAM 정책 시뮬레이터로 IAM 정책 테스트하기
IAM 정책 시뮬레이터로 IAM 정책 테스트하기
IAM 정책 시뮬레이터(policy simulator)를 사용하면 아이덴티티 기반 정책, IAM 권한 경계(permissions boundaries), 서비스 제어 정책(SCPs), 리소스 기반 정책을 테스트할 수 있어요. 실제 AWS 서비스로 요청을 보내지 않고도 AWS가 그 정책들에 대해 요청을 어떻게 평가할지 시뮬레이션해요. 각 시뮬레이션은 테스트하는 모든 작업과 리소스에 대해 이진(binary) 승인 결과를 돌려줘요. 즉 작업이 허용되거나 거부되거나 둘 중 하나예요. 결과가 allow 또는 explicit deny면 시뮬레이터는 어떤 정책이 그 결과를 만들었는지도 보여줘서 원인을 이해하고 고칠 수 있게 해줘요.
출처: 문서
본문
중요
정책 시뮬레이터 결과는 실제 AWS 환경과 다를 수 있어요. 시뮬레이터로 테스트한 뒤에는 실제 AWS 환경에서 정책을 다시 확인해서 원하는 결과가 나오는지 확인하길 권장해요.
이 페이지에서는 다음 내용을 다뤄요.
- 정책 시뮬레이터 모드
- 정책 시뮬레이터로 할 수 있는 일
- IAM 정책 시뮬레이터의 동작 원리
- 조건 키 평가 방식
- 정책 시뮬레이터 사용 권한
- 정책 시뮬레이션 방법
정책 시뮬레이터 모드 (Policy simulator modes)
정책 시뮬레이터에는 두 가지 모드가 있어요. 계정에 이미 존재하는 정책을 테스트할지, 아직 작성 중인 정책을 테스트할지에 맞는 모드를 선택하세요.
Principal 모드
Principal 모드에서는 기존 IAM 사용자, 역할, 그룹에 이미 연결된 정책을 테스트해요. 시뮬레이션할 아이덴티티 하나를 선택하면 시뮬레이터가 해당 아이덴티티에 연결된 정책을 평가해요. 사용자 지정 아이덴티티 정책이나 권한 경계를 시뮬레이션에 포함하거나 제외할 수도 있어요. 추가된 정책은 IAM에 실제로 연결되지 않고 principal에 연결된 것처럼 시뮬레이션만 되므로 계정은 그대로예요.
Custom 모드
Custom 모드에서는 직접 작성하거나 붙여 넣은 하나 이상의 정책을 테스트해요. 정책을 연결하기 전에 확인할 때 유용해요. 사용자 지정 정책은 단독으로 시뮬레이션되며 계정에 저장되지 않아요.
정책 시뮬레이터로 할 수 있는 일
- 아이덴티티 기반 정책 테스트 — IAM 사용자, 그룹, 역할에 이미 연결된 정책이든 직접 작성·붙여 넣은 새 정책이든 테스트할 수 있어요. 정책이 여러 개인 아이덴티티라면 모든 정책을 함께 테스트하거나 개별 정책을 골라 특정 리소스에 어떤 작업이 허용·거부되는지 볼 수 있어요. 새 정책은 실제로 연결하지 않고 아이덴티티에 연결된 것처럼 평가되며, 계정에 저장되지 않아요.
- 제한적 통제가 액세스에 미치는 영향 테스트 — 한 번에 하나의 권한 경계를 시뮬레이션할 수 있어요. 계정이 AWS Organizations의 멤버라면 SCP가 아이덴티티 기반 정책에 미치는 영향도 테스트할 수 있어요. 시뮬레이터는 SCP가 작업을 허용하는지 거부하는지 알려주지만, 보안상의 이유로 SCP의 매칭된 구문은 다른 정책 유형처럼 표면화하지 않아요.
- 제공한 리소스 기반 정책의 효과 테스트 — 콘솔 외에는 시뮬레이터가 리소스의 정책을 자동으로 가져오지 않아요. 리소스 기반 정책을 시뮬레이션에 포함하려면 리소스와 함께 정책을 직접 제공해야 해요.
- 실제 조건에서 특정 서비스·작업·리소스 테스트 — 어떤 결과가 결정되는지 파악할 수 있어요. 예를 들어 특정 버킷에서 Amazon S3의
ListAllMyBuckets,CreateBucket,DeleteBucket작업을 정책이 허용하는지 테스트하고, 테스트 중인 정책의Condition요소에서 참조하는 IP 주소나 날짜 같은 컨텍스트 키를 제공할 수 있어요. 각 결과에 대해 시뮬레이터는 액세스를 허용·거부하는 특정 구문을 식별해요. 매칭된 구문은 아이덴티티 기반 정책과 제공한 리소스 기반 정책 모두에서 나올 수 있어요.
IAM 정책 시뮬레이터의 동작 원리
시뮬레이션을 실행하면 정책 시뮬레이터가 요청 범위 안의 정책, 범위 안의 SCP, 그리고 작업·리소스·컨텍스트 키 값 같은 입력값을 평가해요. Custom 모드에서는 정책을 직접 제공해요. Principal 모드에서는 선택한 아이덴티티에 연결된 정책을 사용하며, 시뮬레이션에 정책을 더 포함하거나 제외할 수 있어요. 결과는 각 작업과 리소스에 대한 이진 결과, 즉 허용 또는 거부예요.
정책 시뮬레이터는 실제 AWS 환경과 다음과 같이 달라요.
- 정책 시뮬레이터는 실제 AWS 서비스 요청을 보내지 않으므로, 실제 환경에 원치 않는 변경을 일으킬 수 있는 요청도 안전하게 테스트할 수 있어요. 프로덕션의 실제 컨텍스트 키 값을 사용하지 않고, 작업이 실제로 실행되지 않으므로 서비스 응답도 반환하지 않아요. 유일한 결과는 각 요청된 작업의 허용·거부 여부예요.
- 정책 시뮬레이터에서 정책을 편집하면 그 변경은 시뮬레이션에만 영향을 미쳐요. AWS 계정의 해당 정책은 그대로 남아요.
- 정책 시뮬레이터는 조건 키와 deny 구문의 리소스 범위 지정을 포함해 SCP를 평가하지만, 리소스 제어 정책(RCPs)은 지원하지 않아요. VPC 엔드포인트 정책, 역할 체이닝, 단일 리소스의 여러 리소스 기반 정책 같은 일부 고급 구성에서는 시뮬레이션 결과가 실제 동작과 여전히 다를 수 있어요.
- 크로스 계정 시뮬레이션은
EvalDecisionDetails에서 정책 유형별 결정(아이덴티티 정책과 리소스 정책)을 반환해요.
IAM 정책 시뮬레이터에서 조건 키 평가 방식
많은 정책이 aws:RequestedRegion이나 aws:MultiFactorAuthPresent 같은 조건 키에 의존하는 Condition 요소를 사용해요. 시뮬레이션을 실행하면 정책 시뮬레이터가 두 가지 원천에서 조건 키 값을 가져와요. 시뮬레이터가 자동으로 채우는 값과, 시뮬레이션 입력으로 제공하는 값이에요. 값이 조건을 충족하지 않으면 작업이 거부돼요.
시뮬레이터가 자동으로 채우는 컨텍스트
시뮬레이터는 평가를 위해 다음 principal 및 조직 컨텍스트 키를 자동으로 채워요.
- Principal 컨텍스트:
aws:PrincipalAccount,aws:PrincipalId,aws:PrincipalType,aws:Type,aws:UserId,aws:UserName - 조직 컨텍스트:
aws:PrincipalOrgID,aws:PrincipalOrgMasterAccountId,aws:PrincipalOrgPaths
이 키들은 자동으로 채워지므로 principal이나 조직 조건을 사용하는 SCP 및 기타 정책이 올바르게 평가돼요. 정책이 참조하는 다른 모든 조건 키의 값은 직접 제공해요. 테스트 중인 정책의 Condition 요소를 검토하고 위 목록에 없는 키에는 값을 제공하세요.
글로벌 조건 키와 서비스 지원
아이덴티티 기반 정책과 리소스 기반 정책의 경우, 시뮬레이터는 특정 글로벌 조건 키를 어떤 서비스가 권한 부여에 지원하는지 판별하지 않아요. 예를 들어 어떤 서비스가 aws:TagKeys를 지원하지 않는지 식별하지 않아요. 반면 SCP는 aws:RequestedRegion, aws:PrincipalAccount 같은 글로벌 조건 키를 포함해 서비스 인지 로직으로 평가돼요.
SCP의 조건 키
시뮬레이터는 SCP의 조건 키와 리소스 범위 지정을 평가해요. 시뮬레이션 실행 방식에 따라 값 제공 방법이 달라져요.
- AWS CLI나 AWS API에서는 SCP가 참조하는 조건 키에 값을 제공할 수 있어요.
- IAM 콘솔에서는 아이덴티티 기반 정책, 권한 경계, 리소스 기반 정책에 나타나는 조건 키에만 값을 설정할 수 있어요. 조건 키가 SCP에만 참조된다면 콘솔에서 값을 설정할 수 없어요. 하지만 같은 조건 키가 다른 정책 중 하나에도 나타나면 설정한 값이 SCP를 포함한 전체 평가에 사용돼요.
보안상의 이유로 SCP 평가는 누락된 컨텍스트 값을 반환하지 않아요. 그래도 요청에 대한 allow/deny 결정은 받을 수 있어요.