LabHub

클라우드 권한 설계 · 정책 문서 읽는 법 · 이론

정책 JSON 을 한 줄씩 뜯어보기

LabHub 에서 이어서 보기

한 줄 요약

정책은 결국 네 가지를 적는 문서입니다 — **무엇을(Action) 어디에(Resource)
허용/거부(Effect) 하며, 어떤 조건에서(Condition)**.

왜 이게 필요했나

정책은 문법상 유효해도 의도보다 넓게 열릴 수 있습니다. 허용 효과만 확인하고
자원 범위와 조건을 읽지 않으면 리뷰를 통과한 정책이 곧 권한 상승 경로가 됩니다.
그래서 정책을 구성 요소별로 분해하고 위험한 조합을 일정한 순서로 읽어야 합니다.

어떻게 동작하나

최소 형태

{  "Version": "2012-10-17",  "Statement": [    {      "Sid": "ReadReportsOnly",      "Effect": "Allow",      "Action": ["s3:GetObject", "s3:ListBucket"],      "Resource": [        "arn:aws:s3:::acme-reports",        "arn:aws:s3:::acme-reports/*"      ]    }  ]}

Version 은 날짜처럼 보이지만 정책 언어의 버전입니다. 2012-10-17
그대로 씁니다. 바꾸면 변수 치환 같은 기능이 사라집니다.

Resource 가 두 줄인 이유

이게 초보자가 가장 많이 틀리는 자리입니다.

둘은 다른 자원입니다. 하나만 적으면 "목록은 보이는데 파일이 안 열린다"
또는 그 반대가 됩니다.

ARN 의 구조

arn:aws:s3:::acme-reports/reports/2026/* │   │   │  │ │        └ 자원 경로 │   │   │  │ └ 계정 ID (S3 는 비움) │   │   │  └ 리전 (S3 는 전역이라 비움) │   │   └ 서비스 │   └ 파티션 (aws / aws-cn / aws-us-gov) └ 고정

빈 칸이 있는 게 오타가 아니라 그 서비스가 전역이라는 뜻입니다.

와일드카드 — 위험은 자리에 따라 다르다

| 표현 | 의미 | 위험도 |
| --- | --- | --- |
| "Action": "s3:Get*" | 읽기 계열 전부 | 낮음 |
| "Action": "s3:*" | S3 의 모든 동작 (삭제 포함) | 높음 |
| "Action": "*" | 모든 서비스의 모든 동작 | 관리자 |
| "Resource": "*" | 모든 자원 | 문맥에 따라 |

"Action": "*""Resource": "*" 가 한 문장에 같이 있으면 그건 관리자
권한입니다. 정책 리뷰에서 가장 먼저 찾아야 할 조합입니다.

Condition — 진짜 좁혀지는 자리

권한을 좁히는 가장 강력한 수단인데 가장 덜 쓰입니다.

"Condition": {  "IpAddress":     { "aws:SourceIp": ["203.0.113.0/24"] },  "Bool":          { "aws:SecureTransport": "true" },  "StringEquals":  { "aws:PrincipalTag/team": "platform" },  "DateLessThan":  { "aws:CurrentTime": "2026-12-31T00:00:00Z" }}

Condition 블록 안의 여러 키는 AND 로 묶이고, 한 키에 값이 여러 개면
OR 입니다. 이 규칙을 헷갈리면 의도와 정반대의 정책이 나옵니다.

NotAction 은 함정이다

{ "Effect": "Allow", "NotAction": "iam:*", "Resource": "*" }

"IAM 빼고 전부 허용" 으로 읽히지만, 실제로는 **앞으로 생길 모든 신규 서비스도
자동 허용**됩니다. 화이트리스트가 아니라 블랙리스트라서 그렇습니다.
권한은 항상 허용 목록으로 적습니다.

읽는 순서

리뷰할 때 이 순서로 보면 빠릅니다.

1. Effect: Deny 문장부터 — 무엇이 절대 막혀 있나
2. Action* 이 있나
3. Resource* 이 있나
4. Condition 이 있나 — 없으면 그 권한은 어디서든 통한다
5. NotAction / NotResource 가 있나 — 있으면 의심한다

현장에서 만나는 모습

다음에 볼 것

장기 키를 나눠 주지 않고도 권한을 주는 방법 — 역할과 임시 자격증명입니다.