본문으로 건너뛰기
김신건의 로그

[AWS] IAM: User, Role, Policy, STS

· 수정 · 📖 약 1분 · 318자/단어 #aws #iam #security #auth #cloud
IAM, AWS IAM, IAM Role, IAM Policy, STS, AssumeRole, Identity Center, SSO

정의

IAM (Identity and Access Management) = AWS 의 권한 관리 전부. User, Group, Role, Policy.

객체

flowchart LR
    User["User<br/>(사람)"] -->|attach| Policy
    Group[Group] -->|attach| Policy
    Role["Role<br/>(임시 권한, EC2/Lambda/외부 등)"] -->|attach| Policy
    Policy --> Statement[Effect: Allow/Deny<br/>Action: s3:GetObject<br/>Resource: arn:...]
객체의미
User사람 (long-term credentials)
GroupUser 묶음
Role임시 권한 받는 entity (EC2, Lambda, 외부 계정 등)
Policy권한 표현 (JSON)

Policy 구조

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowListBucket",
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": "arn:aws:s3:::my-bucket"
    },
    {
      "Sid": "AllowReadObjects",
      "Effect": "Allow",
      "Action": ["s3:GetObject"],
      "Resource": "arn:aws:s3:::my-bucket/*",
      "Condition": {
        "IpAddress": { "aws:SourceIp": "10.0.0.0/8" }
      }
    }
  ]
}

Policy 종류

종류의미
AWS ManagedAWS 가 관리 (AmazonS3ReadOnlyAccess)
Customer Managed사용자 정의, 재사용 가능
InlineUser/Group/Role 에 직접 임베드 (재사용 불가)
Permission Boundary최대 권한 상한
Service Control Policy (SCP)Organization 수준
Resource-based Policy자원에 붙음 (S3 bucket policy 등)

권한 평가 알고리즘

flowchart TD
    Q1{Explicit Deny?}
    Q1 -->|예| Deny[DENY]
    Q1 -->|아니오| Q2{Explicit Allow?}
    Q2 -->|아니오| Deny
    Q2 -->|예| Q3{SCP 차단?}
    Q3 -->|예| Deny
    Q3 -->|아니오| Q4{Permission Boundary 안?}
    Q4 -->|아니오| Deny
    Q4 -->|예| Allow[ALLOW]

Explicit Deny 가 모든 것을 이김.

Role 과 AssumeRole

sequenceDiagram
    User->>STS: AssumeRole(arn:role/admin)
    STS-->>User: temporary credentials (1h-12h)
    User->>S3: API 호출 (임시 credentials)
aws sts assume-role \
  --role-arn arn:aws:iam::123:role/admin \
  --role-session-name my-session
사용의미
EC2 RoleEC2 가 metadata 로 자동
Lambda Role함수 실행 권한
Cross-account다른 계정의 role assume
외부 ID + 신뢰 관계3rd party (SaaS) 가 우리 계정 접근
Federated (OIDC, SAML)외부 ID provider

IRSA / Pod Identity (EKS)

자세한 건 aws-eks.

Identity Center (옛 SSO)

flowchart LR
    User --> IC[AWS Identity Center]
    IC --> Acct1[Account A]
    IC --> Acct2[Account B]
    IC --> Acct3[Account C]
    IC -.SAML.-> Okta[Okta / Azure AD]
  • organization 의 통합 SSO.
  • User 가 로그인 1회로 N 계정 접근.
  • short-lived credentials (1시간).

Best Practice

✓ Root user 의 MFA + 일상 사용 금지
✓ User 대신 SSO (Identity Center)
✓ Role 우선 (long-term credentials 회피)
✓ Least privilege (필요한 권한만)
✓ Permission Boundary 로 *최대* 제한
✓ Access Analyzer 로 unused 권한 식별
✓ IAM Access Advisor 로 미사용 확인
✓ MFA 강제
✓ Credentials rotation 정기

흔한 함정

WARNING

  1. Root user 의 access key = 누출 = 모든 권한. delete 후 SSO.
  2. "*" 권한 남발 = 사고. 작은 권한 부터.
  3. Long-term access key = git 누출 사고. Role + STS.
  4. Resource-based policy 의 Principal 오타 = 의도치 않은 공개.

관련 위키

이 글의 용어 (5개)
[Auth] OAuth 2.0 / 2.1: Authorization Code + PKCEauth-security
정의 OAuth 2.0 (RFC 6749, 2012) 은 제3자 앱이 사용자 동의로 자원에 접근 하게 하는 권한 위임 프레임워크. 인증 (authentication) 이 아니라 …
[AWS] EKS: managed Kubernetescloud
정의 EKS (Elastic Kubernetes Service) = AWS 의 managed K8s control plane. worker node 는 사용자 (또는 Fargat…
[AWS] Secrets Manager + Parameter Storecloud
정의 | | Secrets Manager | Parameter Store (SSM) | |---|---|---| | 가격 | $0.40/secret/월 + $0.05/10k AP…
[AWS] STS / AssumeRole: 임시 자격, cross-accountcloud
정의 STS (Security Token Service) = 임시 자격 증명 발급. short-lived (15분-12시간) credentials. 5가지 API | API | …
[K8s] RBAC: Role, ClusterRole, ServiceAccount, RoleBindingkubernetes
정의 RBAC (Role-Based Access Control) = K8s 의 권한 부여 모델. 주체 + 권한 + 바인딩. 4 객체 | 객체 | 범위 | |---|---| | |…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기