나 JAVA 봐라

[AWS SAA-C03] 4장 AWS IAM 본문

DevOps, MLOps/AWS

[AWS SAA-C03] 4장 AWS IAM

cool_code 2024. 6. 12. 01:18

IAM 이란?

  • Identity and Access Management
  • Globel service이기 때문에 리전 상관없이 제공된다
  • Root Account (루트 계정)이 있는데, 되도록 사용하지 말고 공유하지 말자.
  • User들은 그룹으로 묶일 수 있으며,
  • 그룹에는 오직 User들만 포함된다. (그룹이 또 다른 그룹을 포함할 순 없다. )
  • User는 2개 이상의 그룹에 포함될 수 있다.(multiple group)

IAM : Permissions

  • Users, Groups는 JSON 형태의 Policy(정책)를 부여받는다.
  • Policy는 유저의 permission(권한)에 대해 정의한다. 
  • 유저에게 권한 부여할 때에는 최소한으로 부여한다. (least privilege principle -> 최소 권한 원칙)

IAM: Policy 부여받는 방법, 조건들

IAM Group&Policy

  • 그룹마다 적용받는 정책 다르게할 수 있다.
  • 사용자가 동시에 여러 그룹의 정책을 부여받을 수 있다. 
  • 그룹에 속하지 않더라도 원하는 사용자 개인에게 인라인 정책 (inline policy) 부여 가능하다.
  • ex) Developers 그룹에 administorAccess Policy(정책) 부여하면, 모든 서비스에 대한 권한을 갖게 된다. 

IAM Policies 구조

policy 에시

  • JSON으로 구성된 Policy다. AWS에서도 왠만한 것들은 Policy로 있지만, 직접 Policy를 생성해서 user, group에 부여할 수 도 있다. 
  • Version: policy language version, always include “2012-10- 17”
  • Id: an identifier for the policy(optional)
  • Statement: one or more individual statements(required)
    • 내부 구성
    • Sid : statement의 식별자
    • Effect : 해당 statement를 allow 혹은 deny
    • Principle : 정책이 적용될 account, user, role (정책 적용될 api 목록)
    • Action : 이 정책에서 allow 혹은 deny할 action들
    • Resource : action이 적용될 resourse들
    • Condition(optional) : policy가 언제 적용될지 (contition) 

 

이렇게 Policy를 부여받고 다양한 서비스를 활용할 수 있을 때, 누군가 해킹하면 큰일 나겠죠? (당연...)

그렇기 때문에 보안도 강화하는 것이 중요합니다.

보안 강화를 위한 두 가지 방법이 있는데, Password 정책과 MFA 입니다. 

IAM Password Policy

  • AWS에서는 기본적으로 디폴트 password 정책을 적용한다.
  • 그렇지만 직접 pw 정책을 custom할 수 있다.
    • 비밀번호 최소길이 설정하기
    • 특정한 문자 타입 넣기
      • 대소문자 포함하기
      • 숫자 포함하기
      • 특수문자 포함하기
    • 모든 IAM user들은 주기적으로 비밀번호를 바꾸도록 한다. 
    • 비밀번호 재사용을 막는다. 
  • 위와 같이 커스텀할 수 있다. 

Multi Factor Authentication - MFA

  • 비밀번호 정책 말고도 MFA(다요소 인증)으로 보안을 강화할 수 있다. 
  • AWS에서 권장하는 방식이다. 
  • Root Account, IAM User를 MFA로 보호할 수 있다. 
  • MFA = 내가 설정한 패스워드 + 내가 설정한 디바이스의 특정 값(토큰)

MFA

 

  • MFA를 설정하면, 비밀번호 누출 되더라도 한번 더 MFA로 인증해야하니까 안전함. 
  • MFA 디바이스 종류
    • Virture MFA Device
      • Google Authenticator (폰에서만 가능)
      • Authy : multi device
    • Universal 2nd Factor(U2F) Security Key
      • USB 처럼 생김.
      • 3rd party
    • 뭐 등등 여러가지 디바이스 있는데, 그냥 지금 회사 로그인하려면 폰에서 추가 인증하는거랑 같은 방식임

AWS에 접근하는 3가지 방법

  • AWS Management Console : password + MFA로 보호
  • AWS CLI : access key로 보호
  • AWS SDK : access key로 보호

 

Access Key는 콘솔에서 발급받을 수 있고, 사용자 개별로 하나씩 발급받을 수 있으므로 절대 서로 공유 금지임. 

+ 까먹으면 걍 재발급 가능함. 근데 발급받을 때 최초 한번만 조회가능하니까 기록 잘해두기

Access Key Id와 Secret Access Key로 구성되어 있음. (map 구조 마냥? ㅎ)

 

AWS CLI

  • 그냥 AWS에서 제공하는 터미널임. 
  • 다운 받아서 사용가능하고, 리소스 관리하는 스크립트 작성해서 일부 작업 자동화 시킬 수 있음
  • AWS 서비스에서 제공하는 public API에 다이렉트로 접근 가능
  • CouldShell 서비스
    • AWS 클라우드에서 무료로 사용 가능한 터미널, CLI 처럼 사용 가능
    • 글로벌 서비스 아니라 리전 따라 사용 못할 수도 있음. (일단 한국은 사용 안됨. )

AWS SDK

  • 프로그래밍 언어에 맞는 SDK가 각각 있다.
    • java, javascript, python,...
    • android, iOS,..
    • Embedded C, arduino,...
  • Ex) AWS CLI는 Python용 AWS SDK로 만들어졌다. 

IAM Roles For Services

  • Role은 사용자에게 부여하는게 아니라, AWS 서비스에 부여하는 것임.
  • AWS Service 말고도 다른 데에 부여할 수 있는데 시험범위 아니라 pass
  • role 예시
    • EC2 Instance Roles
    • Lambda Funtion Roles
    • EC2가 AWS 특정 API 호출하려할 때, Role을 통해 제대로 권한 받아야 호출할 수 있음. 

 

IAM Security Tools

각 계정, 사용자들의 Policy를 감사(모니터링) 하기 위한 도구 2가지가 있다. 

이것을 잘 사용하면, 사용자가 어떤 서비스를 사용하는지 혹은 안하는지 파악해서 권한을 삭제함으로 '최소 권한 원칙'을 준수할 수 있다. 

 

  • IAM Credentials Report (account-level) 자격 증명 보고서
    • user 생성 일자, user 마지막 접속 일자, pw 변경 일자, access key 마지막 사용 시간, MFA 사용 여부,.. 등 각 유저에 대한 모든 정보를 확인할 수 있다. 
    • 뭐,,, 마지막 접속 일자 확인해서 일하는 사람들 체크하거나, MFA 사용 여부 확인해서 보안 신경 쓰라고 잔소리할 수 있을 듯
  • IAM Access Advisor (user-level) 접근 관리자?
    • 사용자에게 부여된 권한이 무엇인지, 특정 서비스에 마지막으로 액세스한 시간이 언제인지 등 확인
    • 어떤 서비스 사용 안하는지 확인해서, 사용 안하면 그냥 권한 없애서 '최소 권한 원칙' 준수 할 수 있음

IAM 가이드라인

그래서, 위의 내용을 바탕으로 어떻게 사용해야 좋은지 정리하자

  • root account는 처음 설정 때만 쓰고, 되도록 쓰지 말자
  • 한 명당 user 계정 1개 주자. 계정 돌려쓰지 마라
  • 사용자를 그룹에 넣고, 그룹에 permission을 줄 수 있다. -> 그룹 수준에서 permission 관리 가능
  • PW 정책을 강력하게 만들어라
  • MFA도 쓸 수 있음 써라 강추
  • AWS 서비스에 Permission 줄 때마다 roles 만들고 사용해라
  • CLI/SDK 사용시 AccessKey를 사용한다
  • 계정 권한 감사할 때 IAM Credentials Report & IAM Access Advisor 사용한다
  • IAM User & Access Key는 아무한테도 공유하지 마라

IAM 9줄 요약

  • Users : IAM User는 실제 물리적 사용자와 매핑되어야 하며, 이 사용자는 AWS Console 패스워드를 갖는다. 
  • Groups : 그룹에는 '사용자만' 포함한다. 그룹이 그룹을 포함하진 않는다. 
  • Policies : 사용자 또는 그룹에 대한 권한(Permission)을 설명하는 JSON 문서
  • Security: MFA + Password Policy
  • AWS CLI : AWS 서비스를 commend line으로 관리
  • AWS SDK : AWS 서비스를 프로그래밍 언어에 맞게 관리
  • Access Keys : CLI나 SDK에 접근하기 위한 키
  • Audit : IAM Credential Reports & IAM Access Advisor

끗. 다음 시간에는 EC2에 대해 알아보겠어요