[Architecting on AWS] IAM

Created
Nov 16, 2023
Created by
Tags
AWS
Property
 
아래 2가지를 관리한다.
  • 누가 (인증, Authentication)
  • 무엇을 할지 (인가, Authorization)
아래 5가지로 구성한다.
 

User

  • 사용자
  • email/password 기반 인증은 콘솔 접속을 제외하고 제공하지 않는다.
  • IAM 유저에게 AccessKeyID, SecretAccessKey 를 발급.
 

Policy

  • 1개 이상의 permission 을 모아서 정의해놓은 것 (JSON 형식)
  • user-based policy (자격증명 기반 정책)
    • 유저의 자격증명에 정책 정의 (어느 리소스에 어떤 동작을 허용/거부하는지 정책을 해당 유저/그룹에게 부여)
  • resource-based policy (리소스 기반 정책)
    • 리소스에 정책 정의 (어느 유저/그룹에게 어떤 동작을 허용/거부하는지 정책을 리소스에게 부여)
 

Permission

  • AWS 리소스에 대한 권한 (어느 리소스에 어떤 동작을 허용/거부하는지)
 

Group

  • 유저 모음
 

Role

  • temporary permission 부여에 사용한다. ex) prod 환경 리소스에 임시로 접근이 필요할 경우
  • role 생성 시 해당 role 에 trust relationship (role 을 행사할 수 있는 유저를 지정하는 것)을 설정한다.
  • role 을 부여받은 유저가 해당 role 을 가지고 리소스 접근하는 과정
    • 1. 내부적으로 STS 서비스에 AssumeRole() API 요청.
    • 2. AssumeRole() API 는 요청한 유저에게 임시 보안 자격증명에 해당하는 AccessKey, SecretAccessKey 를 응답.
    • 3. 유저는 STS 으로부터 받은 AccessKey, SecretAccessKey 를 가지고 리소스 접근 행사.
 

user-based policy vs resource-based policy

policy 우선순위는 아래와 같다.
Effect = "Deny" (explicit deny) > Effect = "Allow" > default (implicit deny)
  • Statement 에서 Effect = "Allow" 로 되어있지 않은 액션은 기본적으로 Deny 처리되어 (implicit deny) IAM 유저가 실행할 권한이 없다.
  • user-based policy 와 resourced-based policy 중 하나라도 Statement 에서 Effect = "Allow" 되어있으면 IAM 유저는 해당 액션을 실행할 권한이 있다.
  • IAM policy 와 ECR policy 중 하나라도 Statement 에서 액션이 Effect = "Deny" 되어있으면 (explicit deny) 다른 policy 에서 Effect = "Allow" 되어 있더라도 IAM 유저는 해당 액션을 실행할 권한이 없다.
  • 자세한 내용은 여기 참고.
 

심층 방어

  • VPC endpoint policy
    • vpc 내에 있는 리소스 접근 시 vpc 계층에서 접근 제어를 하는 것. (리소스 기반 정책에 포함.)
 

AWS Organizations

  • 여러 계정을 중앙에서 관리.
  • SCP(Service Control Policy) : source of truth.
notion image