DevOps31일차 - IAM

문한성·2023년 4월 19일
0

부트캠프

목록 보기
61/123
post-thumbnail

IAM (Identity and Access Management) 란?

IAM은 사용자의 접근 권한을 관리 하는 서비스 이다.

IAM을 통해서 회사 내 AWS를 사용하는 사람들에게 부서 마달 사용자별로 AWS에서 제공하는 서비스들, 서비스에 생성된 자원 등에 대해 세분된 권한을 지정할 수 있다.

예를 들어 개발부서 그룹은 EC2와 S3 서비스에 대한 엑세스 권한을 주고, DB관리 부서 그룹은 RDS 엑세스 권한을 준다던지 세부 설정이 가능하다.

따라서 대부분의 사용자 권한 관리 서비스와 마찬가지로, 최고 관리자가 Root 계정을 관리하고 그밖의 사용자들은 각자 계정을 발급받아 제한된 권한을 갖고 AWS를 이용하게 된다.

IAM은 AWS 서비스에 대한 엑세스 권한 설정 뿐만 아니라, 언제 어디서 누가 무엇을 어떻게 할수 있는가를 상세히 설정할 수도 있다.

예를 들어 회사IP로 된 요청에서 2-3시까지만 S3의 특정 버킷의 회계자료를 열람할수 있게 설정하는 식으로 단순히 사용자 등급을 매기는걸 넘어서 다양하게 권한 설정이 가능하다.

정리하자면, IAM는 AWS 사용자 및 그룹을 만들고 관리하며 AWS 리소스에 대한 액세스를 허용 및 거부 설정함으로서 전반적인 사용자 관리를 하는 서비스이다.

IAM 기능 총 요약하면 다음과 같다.

  • 사용자 생성 / 관리 / 계정의 보안
    • 사용자의 패스워드 정책 관리 (일정 시간마다 pw변경 등)
  • AWS 계정에 대한 공유 액세스 : AWS 계정의 리소스 관리 및 권한을 다른 사람에게 부여가능
  • 세분화된 권한 : 리소스에 따라 여러 사람에게 다양한 권한 부여 가능.
    • 일부 사용자에게는 EC2 전체 액세스 권한, 일부에게는 S3 읽기전용 권한, 일부에게는 결제 정보에만 액세스 할 수 있는 권한
  • EC2 애플리케이션 권한 자격 부여 (IAM 역할 사용) : 사용자 뿐만 아니라, EC2에서 실행되는 어플리케이션에 IAM기능을 이용해 자격증명 제공이 가능하다.
    • 예를 들어 어느어느 EC2가 S3 버킷이나 DynamoDB 테이블에 접근할 수 있는 액세스 권한을 지니도록 할 수 있다.
  • 멀티 팩터 인증 (MFA) : 보안강화를 위해 암호나 액세스 키뿐 아니라 특별히 구성된 디바이스 코드를 제공하는 인증을 추가할 수 있다
  • 자격증명 연동 : 기업 네트워크, 인터넷 자격 증명 공급자 같이 다른 곳에 이미 암호가 있는 사용자에게 AWS 계정에 대한 임시 액세스 권한 부여 가능
  • 계정에 별명 부여 가능 (로그인 주소 생성가능)
  • 글로벌 서비스 (리전 서비스X) : AWS의 계정은 전세계에서 유니크하다.

IAM 구성 요소

IAM은 AWS 클라우드 인프라 안에서 신분과 접속/접근을 관리하기 위한 서비스이며,

크게 사용자(Users), 그룹(Groups), 역할(Roles), 정책(Policies) 으로 구성되어 있다.

IAM 사용자 (Users)

  • 실제 AWS의 기능과 자원을 이용하는 사람 혹은 어플리케이션을 의미
  • 사용자(사람)가 AWS 서비스를 엑세스하는걸 조정하는 것 뿐만 아니라, 어플리케이션이 서비스에 엑세스 하는걸 관리

Info
다음과 같이 각 사용자마다 권한을 부여하는 방식

  • 사용자1 : RDS 권한 부여
  • 사용자2 : S3 권한 부여
  • 사용자3 : S3 권한 부여
  • 사용자4 : RDS, S3, EC2 권한 부여
  • 사용자5 : RDS, S3, EC2 권한 부여

IAM 그룹 (Groups)

사용자가 얼마 없을 때는 직접 사용자에게 권한을 설정하는 것이 더 직관적이고 편할 수 있지만 사용자가 많아지게 되면 관리하기 불편해지게 된다. 따라서 그룹이라는 개념을 사용한다.

  • 다수의 사용자를 모아놓은 개념
  • 하나의 그룹에 여러명의 사용자를 지정해서 공통적으로 권한을 주어야 하는 상황일때 유용
    IAM 사용자마다 매번 정책을 직접 연결해줘야하는 번거로움을 줄일수 있다.
    • 예를 들어, 백앤드 IAM 그룹에 S3와 Cloudwatch에 ReadOnly 정책을 연결하면, 이 그룹에 속한 IAM 사용자들에게 자동으로 이 정책이 적용되게 된다.
    • 즉, 그룹에 속한 사용자는 그룹에 부여된 권한을 행사
    • 개발자 그룹은 EC2 인스턴스 수정을 부여, 경영지원팀 그룹은 리포트를 받아볼수있는 권한만 부여 ..등
  • 그룹은 동일한 권한을 가지는 사용자에게 권한을 설정하는것을 편리하게 하기 위함이지, 그룹 자체가 보안 주체가 될 수는 없다.
  • 하나의 사용자는 최대 10개의 그룹에 속할 수 있다.

Info
사용자에게 직접 권한을 부여하지 않고 그룹에 부여한 뒤 사용자들을 그룹으로 관리하는 방식

  • 그룹 1 : RDS 권한 부여
  • 그룹 2 : S3 권한 부여
  • 그룹 3 : RDS, S3, EC2 권한 부여
  • 사용자1 : 그룹 1
  • 사용자2 : 그룹 2
  • 사용자3 : 그룹 2
  • 사용자4 : 그룹 3
  • 사용자5 : 그룹 2, 그룹 3

그룹에 권한 설정을 지정하고 사용자를 등록함으로서 관리

사용자는 여러 그룹에 속할 수 있다.

IAM 정책 (Policy)

  • 사용자와 그룹, 역할이 무엇을 할 수 있는지에 대한 permission 설정 모음 데이터 문서.
  • 하나 이상의 AWS 리소스에 대한 어떤 작업을 수행할 수 있는지 허용 규칙을 JSON 형식으로 작성된다.
    • 어떤 유저는 인스턴스를 올릴수있는데 삭제를 못하거나, 버킷에 접근은 가능한데 파일을 추가할수 없거나 ..등
  • 이렇게 만들어진 정책 문서를 IAM 사용자와 그룹, 역할에 연결한다.

IAM Policy 종류(타입)

IAM 정책도 주제에 따라 여러가지로 나뉘게 된다.

IAM 정책 타입은 아래와 같이 6가지로 분류된다.

  • 자격 증명 기반 (Identity-based policies)
    • AWS 관리형 정책 - AWS에서 미리 제공하는 정책
    • AWS 고객 관리형 정책 - 고객이 직접 만들어서 사용하는 정책
    • AWS 인라인 정책 - 단일 사용자, 그룹, 역할(Role)에 직접 추가하는 방식.
  • 리소스 정책 기반 (Resource-based policies) - EC2 같은 리소스에 적용하는 정책
  • 권한 경계 기반 정책 (Permissions boundaries)
  • 조직 SCP 기반 정책 (Organizations SCPs)
  • 액세스 제어 리스트 (Access control lists -ACLs)
  • 세션 정책 (Session policies)

모든 IAM 정책 종류를 알 필요는 없다.

그중 자주 쓰이는 정책을 알아보자

자격증명 기반 정책(Id-Based Policy)

자격(ID) 기반 정책은 ID(사용자, 사용자 그룹 및 역할)가 수행할 수 있는 작업, 리소스 및 조건을 제어하는 JSON 권한 정책 문서다.

자격 증명 기반 정책은 추가로 3가지로 분류할 수 있다.

1. AWS 관리형 정책(AWS Managed Policy)

AWS 관리형 정책은 AWS에서 생성 및 관리하는 독립적인 정책이다.

쉽게 말하면, IAM 정책 탭에서 나오는 미리보기 정책들이 바로 AWS 관리형 정책이다.

즉, AWS에서 기본으로 제공되는 정책이라고 이해하면 된다.

따라서 정책 스스로 정책 이름이 포함된 Amazon 리소스 이름(ARN)을 갖고 있다.

예를 들어 arn:aws:iam::aws:policy/IAMReadOnlyAccess는 IAMReadOnlyAccess 라는 정책이 AWS에서 미리 글로벌하게 만들어져 있기 때문에 AWS 관리형 정책이라고 할 수 있다.

2. AWS 고객 관리형 정책 AWS Customer Managed Policy)

AWS 관리형 정책(AWS Managed Policy)이 미리 만들어진 AWS에서 기본으로 제공하는 정책이라면, AWS 고객 관리형 정책(AWS Customer Managed Policy) 사용자가 정책을 새로 생성해서 커스텀한 것을 말한다.

고객 관리형 정책은 만들어진 Account에서만 사용할 수 있다.

3. AWS 인라인 정책

AWS 인라인 정책은 1 to 1 정책으로 명시적으로 할당되는 정책이다.

보통 IAM 정책이라 하면 다수의 사용자에게 여러번 적용해서 사용되는데, 인라인 정책은 하나의 사용자에게 하나의 정책을 적용하는 개념이라고 보면 된다.

참고
AWS IAM에서는 Inline Policies보다 Managed Policy 사용을 권장한다.
다만, 명시적으로 특정 사용자에게만 특정 권한을 주고 싶을 경우에는 Inline Policy를 사용하면 유용하다.

리소스 기반 정책(Resource-Based Policy)

자격 증명 기반 정책이 사용자나 그룹에 적용하는 정책이라면, 리소스 기반 정책은 AWS 서비스 리소스에 적용하는 정책이라고 보면 된다.

대표적으로 S3 버킷 정책이 있다.

IAM Policy JSON 문서 구조

IAM policy는 JSON파일로 구성 되어 있으며 여러 요소로 구성된다.

IAM 역할 (Role)

앞서 위에서 보다 사용자의 권한 관리를 용이하게 위해서 그룹이라는 개념을 사용한다고 했었다.

하지만 이 방식도 권한이 다양해지면 그룹이 복잡해지며, 관리가 복잡해 지게 된다.

따라서 역할(Role)이라는 개념이 등장한다.

IAM 역할(Role)을 간단하게 설명하자면 리소스에 대한 액세스 권한이 없는 사용자나 서비스에게 일시적으로 권한을 위임 하는 것이다. (마치 소꿉놀이에서 내가 요리사모자를 쓰면 요리사 역할을 한다는 것을 의미하듯이 비슷한 개념)

예를 들어 아무런 권한이 없는 IAM 사용자 / EC2 인스턴스가 S3 버킷에 접근하려면 직접 정책(policy)를 설정하는 것도 하나의 방법이지만, 만일 사용할일이 끝나 정책을 회수하려면 다시 일일히 설정을 다시 업데이트 해줘야하는 매우 번거로워진다.

따라서 아예 임시적인 자격 증명서를 IAM 사용자 / EC2 인스턴스에게 부여함으로서 임시 세션토큰을 발급받게 되고, 역할에 연결된 권한을 사용할 수 있게 되는 것이다 따라서 필요하면 얼마든지 역할을 부여해 사용하고 다시 회수할 수 있다.

  • 역할(Role) 이란, AWS 리소스가 무엇을 할 수 있는지를 정의하는 자격증명서
  • 그룹에 권한을 바로 부여하는 대신, 역할을 만들고 역할을 그룹이나 사용자에게 주는 방식
    • 그룹은 여러 사용자들을 묶는 개념으로 사용되고
    • 역할은 여러 권한들을 묶는 개념으로 사용이 되어
    • 그룹에 역할을 부여하는 방식으로 사용
  • 다른 사용자가 역할을 부여 받아 사용가능
    • 예를 들어 아무런 권한이 없는 IAM 사용자가 S3 버킷에 접근하기 위해 S3 Read 권한이 연결된 역할을 맡겠다는 요청을 보내면, 그 권한이 부여된 자격 증명을 얻게 되는 방식
    • 그리고 이렇게 역할을 맡게 되는 과정을 “임시 보안 자격 증명“이라고 한다.
  • 역할(Role)은 AWS 사용자 뿐만아니라, EC2 인스턴스, 심지어 다른 AWS 계정, Facebook, Google, Amazon 계정 전용으로 AWS 리소스에 대해 폭 넓게 접근 권한을 설정이 가능하다.

IAM 역할 (Role) 장점

  • 보안 자격증명을 공유할 필요가 없음 (보안 향상)
  • 언제든지 접근 권한 회수 가능 (강력한 권한 제어)
  • 각 사용자에게 매번 필요한 권한을 일일이 부여할 필요 없음

IAM 구성 요약

  • 모든 것은 정책(언제 어디서 누가 어떻게 무엇을) 으로 결정된다.
  • 그리고 이 정책은 사용자에게 부여, 그룹에 부여, 역할에 부여 할 수있다.
  • 역할은 aws 서비스에 붙어서 서비스가 무엇을 할수 있는가 결정할수 있다.

IAM 권한 검증 절차

위에서 배운 IAM 구성(user, group, policy, role)을 통해 실제로 사용자/어플리케이션이 AWS 서비스에 접근할때 어떠한 과정으로 권한 엑세스가 되는지 살펴보자.

사용자(user)가 S3를 사용하고 싶을 경우

  • 사용자(user)에게 S3 정책이 설정 되어 있는가?
  • 사용자가 속한 그룹(group)에게 S3 정책이 설정 되어 있는가?
  • S3 정책이 설정된 역할(role)이 사용자에게 부여되어 있는가?
  • ok / fail

Lambda(AWS 서비스)에서 S3를 이용하고 싶을 경우

  • aws 서비스(lambda)에 S3 정책이 설정된 역할(role)이 부여되어있는가?
  • ok / fail

IAM 자격증명 보고서

IAM 자격증명 보고서란, 말 그대로 IAM의 현재 계정 세팅 및 접속 정보 등을 총합한 보고서이다.

계정의 모든 사용자와 암호, 액세스키, MFA 장치 등의 증명상태 정보가 들어있다.

자격 증명 보고서는 AWS 콘솔, CLI, API에서 생성요청 및 다운로드 가능하다.

IAM 자격증명 보고서 다운하기

보고서에는 비밀번호 부터 언제 IAM 계정에 로그인했는지 등 전반적인 관리자로서의 IAM 관리 정보들이 들어있다.

참고로 보고서는 4시간 주기로 갱신된다. 즉, 보고서를 다운 받고 1시간 이내에 또 다운을 받으면 똑같은 보고서를 다운 받는다는 말이다.

레퍼런스

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

1개의 댓글

comment-user-thumbnail
2023년 4월 19일

초보자들도 이해할 수 있게 잘 정리해 주신거 같아요. 좋은 글 읽고 갑니다.
가독성이 너무 좋네요.

답글 달기