[CLOUD-003][입문] IAM 역할과 최소 권한 정책 이해하기 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[CLOUD-003][입문] IAM 역할과 최소 권한 정책 이해하기

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 255회 작성일 26-08-30 16:34

본문

[이번 수업]
IAM(Identity and Access Management, 신원·접근 관리)은 누가 어떤 리소스에서 무슨 작업을 할 수 있는지 통제합니다. 사용자·역할·정책을 구분하고 실제 클라우드에는 접속하지 않은 채 읽기 전용 정책의 와일드카드를 로컬에서 검사합니다.

[선수지식]
CLOUD-001의 클라우드 개념과 CLOUD-002의 리전·가용영역을 알면 좋습니다. Python 3만 필요합니다.

[학습목표]
1. 사용자와 역할을 구분합니다.
2. 정책의 Effect·Action·Resource를 읽습니다.
3. 최소 권한 정책을 설명합니다.

[핵심개념]
주체(principal)는 요청하는 사람·애플리케이션·서비스입니다. AWS IAM 사용자는 장기 자격증명을 가질 수 있습니다. 역할(role)은 권한을 가진 신원이지만 일반 비밀번호나 장기 액세스 키가 없고, 신뢰받은 주체가 맡으면 임시 자격증명을 받습니다. 사람은 가능하면 조직의 신원 공급자와 역할을 사용하고 클라우드 워크로드에도 코드에 넣은 키보다 역할을 사용합니다.

정책은 JSON 문서입니다. `Effect`는 Allow 또는 Deny, `Action`은 수행할 API, `Resource`는 대상 ARN입니다. 조건으로 시간·네트워크·태그를 더 제한할 수도 있습니다. AWS에서는 허용 근거가 없으면 거부하고 적용되는 정책의 명시적 Deny가 Allow보다 우선합니다. 최소 권한은 필요한 작업·리소스·기간만 허용하고 사용 기록에 따라 계속 줄이는 원칙입니다.

[따라하기]
다음을 `policy.json`으로 저장합니다. 존재하지 않는 학습용 버킷이며 적용하지 않습니다.

```json
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": ["s3:GetObject"],
    "Resource": ["arn:aws:s3:::learning-bucket/public/*"]
  }]
}
```

다음을 `check_policy.py`로 저장합니다. 입문용 검사이며 AWS 공식 검증을 대신하지 않습니다.

```python
import json
from pathlib import Path

policy = json.loads(Path("policy.json").read_text())
warnings = []
for item in policy.get("Statement", []):
    actions = item.get("Action", [])
    resources = item.get("Resource", [])
    actions = [actions] if isinstance(actions, str) else actions
    resources = [resources] if isinstance(resources, str) else resources
    if item.get("Effect") == "Allow":
        if "*" in actions or any(x.endswith(":*") for x in actions):
            warnings.append("허용 작업 범위가 너무 넓습니다")
        if "*" in resources:
            warnings.append("허용 리소스 범위가 너무 넓습니다")

print(*(warnings or ["기본 와일드카드 검사 통과"]), sep="\n")
```

macOS/Linux는 `python3 check_policy.py`, Windows PowerShell은 `python check_policy.py`를 실행합니다. 예상 결과는 `기본 와일드카드 검사 통과`입니다. `Action`을 `s3:*`, `Resource`를 `*`로 바꾸면 경고 두 개가 나옵니다. 통과 결과가 실제 접근 허용을 보장하지는 않습니다.

[흔한 실수]
오류를 없애려고 `Action: *`, `Resource: *`나 관리자 권한을 계속 붙이지 마세요. 역할의 권한 정책은 무엇을 할 수 있는지, 신뢰 정책은 누가 역할을 맡는지를 정합니다. Allow 하나만 보고 최종 허용이라 단정하지 말고 경계·조직 정책과 명시적 Deny도 확인합니다.

[보안 주의]
루트 사용자는 일상 작업에 쓰지 않고 MFA로 보호합니다. 액세스 키를 코드, Git, 메일에 넣지 말고 유출 시 즉시 폐기·교체합니다. 운영 변경 전 IAM Access Analyzer의 정책 검증과 테스트 환경을 사용하며, 쓰지 않는 사용자·역할·권한·키를 제거합니다. 권한을 줄일 때는 서비스 중단에 대비해 접근 기록과 복구 계정을 확인합니다.

[직접 해볼 과제]
`uploads/*`에만 `s3:PutObject`를 허용하는 별도 정책을 만들고 검사기를 통과시키세요. 왜 `s3:*`와 버킷 전체보다 권한이 작은지 한 문장으로 설명합니다.

[확인문제]
1. 워크로드에 장기 키보다 역할이 권장되는 이유는 무엇인가요?
2. Action과 Resource는 각각 무엇을 제한하나요?
3. 명시적 Deny와 Allow가 함께 적용되면 무엇이 우선하나요?

[다음 학습]
전체 순환의 다음 수업은 DEVOPS-003 ‘Docker Compose로 여러 서비스 실행’입니다. 이어서 CLOUD-004 ‘VPC·서브넷·보안그룹’을 학습하세요.

[공식 참고 자료]
AWS IAM 소개: https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html
AWS IAM 역할: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html
AWS 정책 평가: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html
AWS IAM 보안 모범 사례: https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
1,581
어제
5,103
최대
16,772
전체
772,635
Copyright © 소유하신 도메인. All rights reserved.