...
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 서비스를 엑세스하는걸 조정하는 것 뿐만 아니라, 어플리케이션이 서비스에 엑세스 하는걸 관리
다음과 같이 각 사용자마다 권한을 부여하는 방식
사용자1 : RDS 권한 부여
사용자2 : S3 권한 부여
사용자3 : S3 권한 부여
사용자4 : RDS, S3, EC2 권한 부여
사용자5 : RDS, S3, EC2 권한 부여
IAM 그룹 (Groups)
사용자가 얼마 없을 때는 직접 사용자에게 권한을 설정하는 것이 더 직관적이고 편할 수 있지만 사용자가 많아지게 되면 관리하기 불편해지게 된다. 따라서 그룹이라는 개념을 사용한다.
- 다수의 사용자를 모아놓은 개념
- 하나의 그룹에 여러명의 사용자를 지정해서 공통적으로 권한을 주어야 하는 상황일때 유용
IAM 사용자마다 매번 정책을 직접 연결해줘야하는 번거로움을 줄일수 있다.
- 예를 들어, 백앤드 IAM 그룹에 S3와 Cloudwatch에 ReadOnly 정책을 연결하면, 이 그룹에 속한 IAM 사용자들에게 자동으로 이 정책이 적용되게 된다.
- 즉, 그룹에 속한 사용자는 그룹에 부여된 권한을 행사
- 개발자 그룹은 EC2 인스턴스 수정을 부여, 경영지원팀 그룹은 리포트를 받아볼수있는 권한만 부여 ..등
- 그룹은 동일한 권한을 가지는 사용자에게 권한을 설정하는것을 편리하게 하기 위함이지, 그룹 자체가 보안 주체가 될 수는 없다.
- 하나의 사용자는 최대 10개의 그룹에 속할 수 있다.
사용자에게 직접 권한을 부여하지 않고 그룹에 부여한 뒤 사용자들을 그룹으로 관리하는 방식
그룹 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 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시간 이내에 또 다운을 받으면 똑같은 보고서를 다운 받는다는 말이다.
IAM 계정 생성하기
IAM 사용자 만들기
1. 사용자 메뉴에 들어가서 사용자 추가 버튼을 누른다.
2. 추가할 사용자 정보를 설정한다.
IAM 그룹 만들기
1. 그룹명을 지정해주고 그룹에 등록할 정책을 고른다.
2. 그룹에 사용자를 추가하는 방법
IAM 사용자 정책 설정하기
1. 사용자에 대한 권한 정책을 설정한다.
- 정책 이름에 대한 표들이 펼쳐져 있는데, 이들중 사용자에게 권한을 주고 싶은 정책을 선택해서 제공하는 것이다.
- 기존에 있는 정책 권한을 선택해줘도 되고 아예 새롭게 정책을 만들어도 된다.
- 어떤 정책을 가지고 있느냐에 따라 사용자는 할 수 있는게 달라지게 된다.
- 본 강의에선는 루트권한인 Administrator접근 권한을 줘 보겠다.
IAM 사용자 계정 접속하기
1. csv를 다운로드한다.
- 사용자 추가가 되면 비밀 엑세스 키와 비밀번호가 있는데, 특히 비밀 엑세스 키는 다운을 미리 받아놓아야 한다.
- 관리자는 해당 IAM 계정 접속 정보를 csv파일로 다운받아 로컬에 저장해 계정을 관리하는 것이다.
2. 이메일을 전송한다
- 다른 사람에게 이메일 전송(이메일 로그인 지침) 을 하게되면, 메일로 로그인 url이 보내지게 된다.
만일 이메일 내용이 인코딩 되어 해괴한 문자로 나온다면, 이 사이트를 이용하길 바란다.
메일 내용을 복붙하고 Decode버튼을 누르면 한글로 출력되게 된다.
5. 생성한 서브 계정으로 로그인 한다.
- csv나 메일 내용은 보면 Login link url이 있을 것이다. 이 url로 접속하면 IAM 로그인 화면이 나오게 된다.
- 계정 12자리는 이메일을 통해 온 url에 적힌 숫자 부분이다.
- 암호는 다운한 csv에 적혀있다. 관리자는 다른 사용자에게 알려주면 되고, 그대로 복붙하면 된다.
6. IAM 계정 비밀번호를 설정해준다.
- 비밀번호 설정해줬으면 무사히 로그인에 성공하게 된다.
- 루트 계정에서 했던것 처럼 2단계 OTP 인증을 수행해준다.
IAM 계정 결제 대시보드 권한 주기
방금 생성한 IAM 계정으로 접속후, 결제 대시보드에 들어가보자
루트 계정과는 달리 결제 대시보드 화면을 볼수가 없다.
분명 IAM 계정을 생성할때 권한 정책을 루트와 비슷한 AdministratorAcess 정책을 주었는 데도 말이다.
이 부분은 AWS 기본 설정으로, AdministratorAcess 정책을 줘도 기본적으로 모든 IAM 계정은 결제 대시보드 창에 엑세스 할수 없게 구성이 되어있다. 따라서 루트 계정으로 다시 접속한뒤 IAM 계정에게 결제 창 엑세스 권한을 직접 설정해줘야 한다.
1. 루트 계정으로 로그인 하고 '계정' 탭에 들어간다
- 밑으로 쭉 내여 보면, 결제 정보에 대한 IAM 사용자 엑세스 탭이 나오게 된다
2. 편집을 눌러 IAM 엑세스 활성화를 체크한다
IAM 역할(Role) 생성하기
사용자에게 역할(Role) 부여하기
리소스에 역할(Role) 부여하기
AWS 서비스용 역할 생성하기
IAM 역할을 사용하는 EC2 인스턴스 생성하기
EC2 인스턴스 전용 IAM 역할은 EC2 인스턴스를 생성할 때 설정해줘야 한다.
이미 만들어진 EC2 인스턴스에는 IAM 역할을 설정할 수 없다.
EC2 인스턴스 메뉴에 가서 인스턴스 생성을 하고 AMI와 인스턴스 타입을 설정해준다.
인스턴스 세부 정보 구성 메뉴에 오면 중앙 하단에 IAM 역할을 정할수 있는 항목이 보일 것이다.
IAM role을 설정해주고 인스턴스를 생성해주게 되면, 이제 생성한 이 EC2 인스턴스는 S3에 엑세스 할수있는 권한을 얻게되어, 콘솔로 EC2 인스턴스에 접속한뒤 S3 콘솔 명령어를 치게 되면 S3 버킷을 조회할수 있게 된다.
$ aws s3 ls s3://testminhobucket
# Reference
https://www.youtube.com/watch?v=lcly_aIq1KI
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.