IAM 사용자에게 어떤 정책이 연결돼 있는지 읽고, 정책 시뮬레이터로 S3 작업이 허용되는지 거부되는지 실제 요청 없이 확인합니다. 정책을 빼 보면서 허용 문장이 없으면 거부된다는 기본 규칙을 눈으로 확인합니다.
Microsoft 쪽 관리자 역할 점검은 Entra ID 관리자 역할 점검 글에서 다뤘습니다. 이 글은 AWS 쪽에서 같은 질문을 던집니다. 이 사용자의 권한이 업무에 필요한 범위를 넘지 않는지 확인합니다.
준비물
| 항목 | 내용 |
|---|---|
| AWS 계정 | IAM 사용자 한 명(이 글에서는 화면의 user03). 콘솔 로그인 가능 |
| 필요 권한 | IAM 조회 권한(사용자, 정책, 보안 인증 보고서), 시뮬레이터 사용 권한 |
| 브라우저 | Chrome, AWS 콘솔 한국어 화면 |
| 시뮬레이터 | 기존 IAM Policy Simulator 화면(영어), 새 시뮬레이터 안내 배너가 함께 표시됨 |
| 예상 소요 시간 | 약 20분 |
이 글에서 한 일은 읽기와 시뮬레이션뿐입니다. 정책이나 사용자를 만들거나 바꾸지 않았고, 시뮬레이터는 정책만 평가하므로 S3 버킷도 만들어지지 않았습니다. 화면의 계정 정보와 일부 사용자 이름은 가렸습니다.
1. 사용자 목록에서 읽을 수 있는 정보
IAM 콘솔의 왼쪽 메뉴에서 IAM 사용자를 엽니다. 목록의 각 열이 점검 단서입니다.
| 열 | 읽는 방법 |
|---|---|
| 마지막 활동 | 콘솔이나 API를 마지막으로 쓴 시점. 오래 비어 있으면 미사용 계정 후보 |
| MFA | 다중 인증 장치가 있으면 표시됨. -는 없음 |
| 암호 수명 | 암호를 마지막으로 설정한 뒤 지난 기간 |
| 콘솔 마지막 로그인 | 콘솔에 마지막으로 로그인한 시점 |
| 액세스 키 | 키가 있으면 상태와 사용 시점이 표시됨(오른쪽으로 스크롤해 확인) |

user03 행은 마지막 활동과 콘솔 로그인이 21분 전이고 MFA 열이 -입니다. 목록 맨 위의 사용자 두 명 이름은 가렸습니다.
2. 사용자의 권한 탭 읽기
목록에서 user03을 열면 권한 탭에 권한 정책 (3)이 보입니다.

| 정책 | 유형 | 의미 |
|---|---|---|
| AdministratorAccess | AWS 관리형 - 직무 | 모든 서비스와 리소스에 대한 전체 권한 |
| PowerUserAccess | AWS 관리형 - 직무 | 전체 권한에서 IAM, Organizations, account 관리를 제외(서비스 연결 역할 생성 등 일부 예외 있음) |
| IAMUserChangePassword | AWS 관리형 | 사용자가 자기 암호를 바꾸는 권한 |
연결 방식이 모두 직접이므로 그룹이 아니라 사용자에게 바로 붙은 정책입니다. 아래의 권한 경계 (설정되지 않음)는 권한 경계로 권한 상한을 두지 않았다는 뜻입니다. AWS 관리형 정책 참조는 AdministratorAccess를 모든 서비스와 리소스에 대한 전체 액세스로, PowerUserAccess를 전체 액세스에서 사용자와 그룹 관리를 뺀 것으로 설명합니다. 이 사용자에게는 둘 다 붙어 있어서 AdministratorAccess 하나만으로도 충분히 넓습니다.
정책 종류는 세 가지입니다. AWS 관리형은 AWS가 만들고 고칠 수 있어서 내용을 바꿀 수 없고, 고객 관리형은 직접 만들어 여러 대상에 붙이며, 인라인은 한 사용자나 역할에만 속합니다.
정책 목록 화면에서도 같은 내용을 확인할 수 있습니다. AdministratorAccess의 유형은 AWS 관리형 - 직무이고, 다음과 같이 사용 열에는 권한 정책 (17)로 표시되어 이 계정에서 권한 정책 17곳에 연결되어 있음을 알 수 있습니다.

3. 정책 상세에서 JSON 읽기
정책 이름을 눌러 상세 화면을 엽니다. 이 화면에서는 요약과 JSON 보기를 전환할 수 있습니다. 이 글의 화면은 요약 보기입니다.

요약 보기에는 서비스마다 전체 액세스 권한과 모든 리소스가 표시됩니다. JSON 문서로는 AWS 관리형 정책 참조에 아래와 같이 실려 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
| 요소 | 읽는 법 |
|---|---|
Effect |
Allow는 허용, Deny는 명시적 거부 |
Action |
허용하는 API 작업. *는 모든 작업 |
Resource |
적용 대상. *는 모든 리소스 |
문장 하나가 모든 작업과 모든 리소스를 허용하므로 AWS 문서의 설명대로 전체 접근 권한입니다. 직접 만든 정책을 읽을 때도 Action과 Resource에 *가 있는지부터 봅니다.
4. 정책 시뮬레이터로 허용 확인하기
user03의 권한 탭 오른쪽 위 시뮬레이션 버튼으로 시뮬레이터를 엽니다. 왼쪽에서 사용자를 고르면 사용자에게 연결된 정책이 IAM Policies 목록에 나타납니다. 위쪽에서 서비스로 Amazon S3를 고르고 작업은 CreateBucket, GetBucketAcl, DeleteObject 세 개를 체크합니다.

오른쪽 위 Run Simulation을 누르면 결과 표가 나옵니다. 결과 화면의 Global Settings 옆에 노란 경고 아이콘이 보이고 펼치면 Include Resource Policy 체크가 있었습니다. 이 아이콘과 체크의 정확한 의미는 공식 문서에서 확인하지 못했고, 이 글의 시뮬레이션에서는 건드리지 않았습니다.

상단 요약은 3 actions selected. 0 actions not simulated. 3 actions allowed. 0 actions denied.입니다. 행을 펼쳐 Show statement를 누르면 허용한 문장의 정책을 알 수 있습니다.

일치한 문장 두 개는 PowerUserAccess와 AdministratorAccess에서 나왔고, IAMUserChangePassword는 S3 작업과 관계가 없어 나오지 않았습니다.
5. 정책을 빼고 기본 거부 확인하기
왼쪽 IAM Policies에서 PowerUserAccess와 AdministratorAccess 체크를 해제합니다. 이 체크는 시뮬레이션 입력만 바꾸며 사용자에게 붙은 정책은 그대로입니다.

체크를 바꾼 직후에는 이전 결과가 그대로 남고 경고 표시가 붙습니다. 이 상태의 결과는 믿지 말고 Run Simulation을 다시 누릅니다.

이제 0 actions allowed. 3 actions denied.입니다. 일치하는 문장이 없어서 Implicitly denied가 됩니다. AWS 문서의 정책 평가 논리도 기본적으로 모든 요청은 암묵적으로 거부되고, 정책이 명시적으로 허용해야 허용된다고 설명합니다. 명시적 Deny는 허용보다 우선합니다.
6. 시뮬레이터의 한계
- 실제 요청이 없습니다: 문서에 따르면 시뮬레이터는 AWS 서비스에 요청을 보내지 않습니다. 결과는 허용인지 거부인지뿐이고 서비스 응답은 없습니다.
- 라이브 환경과 다를 수 있습니다: 문서는 시뮬레이션 뒤에 실제 환경에서도 확인하라고 안내합니다.
- 조건 키는 직접 넣어야 합니다: 정책에
Condition이 있으면aws:MultiFactorAuthPresent같은 키의 값을 입력해야 하고, 값이 조건에 맞지 않으면 거부됩니다. - SCP와 리소스 정책: SCP는 평가하지만 일치 문장은 보여 주지 않습니다. 리소스 정책은 콘솔에서는 가져오지만 API에서는 직접 제공해야 합니다.
- 새 시뮬레이터: 화면 위의 배너는 새 IAM Policy Simulator를 안내합니다. 이 글은 새 시뮬레이터를 다루지 않습니다.
7. 보안 인증 보고서와 점검 목록
왼쪽 메뉴 보안 인증 보고서에서 보안 인증 보고서 다운로드를 누르면 CSV가 내려옵니다. 문서에 따르면 4시간 안에 만든 보고서가 있으면 그것을 다시 받습니다.

이 글에서는 보고서를 내려받지 않았고 화면까지만 확인했습니다. CSV에서는 아래 열이 쓸모 있습니다.
| 점검 | 열 | 기준 예 |
|---|---|---|
| MFA | mfa_active |
콘솔 암호가 있는 사용자는 TRUE |
| 암호 수명 | password_last_changed |
조직 정책보다 오래되지 않았는가 |
| 미사용 | password_last_used |
오래 로그인하지 않은 사용자 |
| 액세스 키 | access_key_1_last_rotated |
오래된 키가 있는가 |
2번 절의 권한 탭 요약에는 MFA 없이 활성화됨 경고가 있습니다. 이 사용자는 AdministratorAccess를 가졌는데 콘솔 로그인에 MFA가 없습니다. 암호가 유출되면 곧바로 전체 권한이 노출됩니다. 개선은 두 방향입니다. MFA를 켜고, 필요한 작업만 허용하는 정책으로 권한을 줄입니다. 줄인 정책은 기존 시뮬레이터에서는 Create New Policy로, 새 시뮬레이터에서는 Custom 모드로 붙이기 전에 시험할 수 있습니다.
자주 막히는 곳
체크를 해제했는데 결과가 그대로입니다. 이전 실행 결과가 남은 것입니다. Run Simulation을 다시 누르면 갱신됩니다.
시뮬레이션 버튼이 영어 화면으로 열립니다. 이번에 사용한 기존 시뮬레이터는 영어이며 새 시뮬레이터 안내 배너가 표시됩니다. 동작은 같습니다.
보안 인증 보고서가 최신이 아닙니다. AWS 문서에 따르면 4시간 안에 만든 보고서가 있으면 새로 만들지 않고 그 보고서를 내려받으므로, 방금 바꾼 내용은 4시간이 지난 뒤에 만든 보고서에서 확인됩니다.
이어서 해 볼 것
- 새 정책 시험:
Create New Policy(새 시뮬레이터에서는Custom모드)로 최소 권한 정책을 직접 써서 같은 세 작업이 어떻게 평가되는지 시험합니다. - 권한 경계: 경계를 설정한 뒤 AdministratorAccess가 붙어 있어도 허용이 줄어드는지 확인합니다.
- MFA 조건: 정책에
aws:MultiFactorAuthPresent조건을 넣고 값을 바꿔 가며 결과를 비교합니다.
확인 범위
AWS 콘솔의 IAM 사용자 목록, 사용자 권한 탭, AdministratorAccess 상세(요약 보기), 기존 IAM Policy Simulator(S3의 CreateBucket, GetBucketAcl, DeleteObject), 보안 인증 보고서 화면을 읽기와 시뮬레이션으로만 확인했습니다. 정책, 사용자, 리소스를 만들거나 바꾸지 않았습니다. 정책 상세의 JSON 보기와 CSV 내려받기, Create New Policy, 권한 경계 설정, MFA 조건 시험은 실행하지 않았습니다. Global Settings의 경고 아이콘과 Include Resource Policy의 의미는 확인하지 못했습니다. JSON 문서는 AWS 관리형 정책 참조의 내용입니다. 보고서 열 목록과 시뮬레이터 한계는 공식 문서 설명이며 이 계정에서 재현하지 않았습니다. 새 시뮬레이터의 Principal, Custom 모드는 공식 문서의 용어이며 화면은 확인하지 못했습니다.
참고한 공식 문서입니다.
- https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic_policy-eval-denyallow.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html
- https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_getting-report.html
- https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html
- https://docs.aws.amazon.com/aws-managed-policy/latest/reference/PowerUserAccess.html
이 글의 다음 단계
- AWS 콘솔에서 EC2 인스턴스를 VPC 서브넷에 시작하고 종료까지 하기EC2 시작 화면에서 이름, AMI, 인스턴스 유형, 키 페어, 네트워크, 보안 그룹을 정하고 t3.micro 인스턴스를 시작합니다. 요약과 보안 탭에서 서브넷, IP, 인바운드 규칙을 읽고, 인스턴스를 종료해 정리합니다.
- AWS 콘솔에서 S3 버킷을 기본 보안 설정으로 만들고 HTTPS 전용 정책 붙이기버킷 만들기 화면의 기본값(ACL 비활성, 모든 퍼블릭 액세스 차단, SSE-S3 암호화, 버전 관리 비활성)을 하나씩 읽고 버킷을 만듭니다. 복사해 붙여 넣는 버킷 정책으로 HTTPS가 아닌 요청을 거부하게 하고, 실습 뒤 버킷을 삭제합니다.