홈/엔지니어/클라우드/AWS IAM 역할·정책 실전 — 최소권한 모범사례…
클라우드중급awsiam최소권한

AWS IAM 역할·정책 실전 — 최소권한 모범사례

IAM 사용자·그룹·역할·정책의 개념 차이, JSON 정책 작성법, 최소권한 원칙 적용, MFA 강제, IAM 모범사례를 정리합니다.

목차
  1. IAM 핵심 개념
  2. JSON 정책 구조
  3. 최소권한 정책 예시
  4. EC2 인스턴스 역할 생성
  5. MFA 강제 정책
  6. IAM 모범사례 체크리스트

IAM 핵심 개념

개념설명
사용자(User)실제 사람 또는 서비스 계정
그룹(Group)사용자 모음 — 그룹에 정책 부여
역할(Role)EC2·Lambda 등 AWS 서비스가 가정하는 임시 자격증명
정책(Policy)허용/거부 규칙 JSON 문서
권한 경계역할이 가질 수 있는 최대 권한 범위

JSON 정책 구조

JSON
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3ReadOnly",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ]
    },
    {
      "Sid": "DenyDeleteEverything",
      "Effect": "Deny",
      "Action": "s3:DeleteObject",
      "Resource": "*"
    }
  ]
}

Deny는 Allow보다 항상 우선합니다.


최소권한 정책 예시

EC2 읽기 전용

JSON
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "ec2:Describe*",
      "ec2:List*"
    ],
    "Resource": "*"
  }]
}

특정 S3 버킷만 전체 접근

JSON
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::my-specific-bucket",
        "arn:aws:s3:::my-specific-bucket/*"
      ]
    }
  ]
}

EC2 인스턴스 역할 생성

Bash
# 역할 생성
aws iam create-role \
  --role-name EC2-S3-ReadOnly \
  --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Principal": {"Service": "ec2.amazonaws.com"},
      "Action": "sts:AssumeRole"
    }]
  }'

# 정책 연결
aws iam attach-role-policy \
  --role-name EC2-S3-ReadOnly \
  --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess

# 인스턴스 프로파일 생성 및 연결
aws iam create-instance-profile --instance-profile-name EC2-S3-ReadOnly
aws iam add-role-to-instance-profile \
  --instance-profile-name EC2-S3-ReadOnly \
  --role-name EC2-S3-ReadOnly

MFA 강제 정책

콘솔 접속 시 MFA 미설정 시 권한 차단:

JSON
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyWithoutMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "sts:GetSessionToken"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}

IAM 모범사례 체크리스트

Bash
# root 계정 사용 현황 확인
aws iam get-account-summary | grep RootAccess

# MFA 미설정 사용자 확인
aws iam generate-credential-report
aws iam get-credential-report | python3 -c "
import sys, base64, csv, io
data = eval(sys.stdin.read())
report = base64.b64decode(data['Content']).decode()
reader = csv.DictReader(io.StringIO(report))
for row in reader:
    if row['mfa_active'] == 'false' and row['password_enabled'] == 'true':
        print(row['user'])
"

# 90일 이상 미사용 접근키
aws iam list-users --query 'Users[*].UserName' --output text | \
  xargs -I{} aws iam list-access-keys --user-name {} --query \
  'AccessKeyMetadata[?Status==`Active`].[UserName,AccessKeyId,CreateDate]' \
  --output table
  • root 계정은 MFA 설정 후 사용 금지
  • 개인 액세스키 대신 역할(Role) 사용
  • 정기적으로 미사용 자격증명 삭제
  • AWS Organizations SCP로 계정 수준 가드레일 적용
#aws#iam#최소권한#정책#보안#role
편집 안내 · Editorial Note

AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)AWS 공식 문서 ↗OWASP 공식 문서 ↗

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.