[aws] #1. AWS 기본기능 - IAM
aws 에서는 클라우드 서비스의 수십가지 기능들을 제공한다. 해당 시리즈의 포스팅에서는 Data Analytics Enginner 로서 알아야 하고, 쓸 줄 알아야 하는 aws 생태계의 기본적인 기능들을 다루고 이를 증명할 수 있는 자격증을 취득하는 과정을 기록하려고 한다. 본 시리즈는 감사하게도 강의를 협찬해주신 udemy 의 이 코스를 기반으로 작성했으며, 배운 내용들을 정리하고, 실습한 내용들을 잊지 않으려고 적어두는 포스팅이다.
IAM 은 한마디로 요약하자면
AWS 상에서 어떤 활동을 하려는 사용자에게 권한을 부여하고 관리하는 도구!
보안과 유저 행동을 관리할 수 있는 가장 기본적인 서비스!
0. Intro
먼저 AWS 에서가장 먼저 알고 넘어가야 하는 기능은 바로 IAM 이다. 근데 IAM 에 대해 제대로 다루기 전에 AWS 의 기본 생태계 개념인 region 을 짚고 넘어가자. aws의 리전(region) 이라는 개념은, 쉽게 말해 어떤 지역에 국한되어 서비스를 할 수 있는지, 그렇지 않고 글로벌한 서비스가 가능한지를 구분하는 것이다.
AWS 는 전 세계에서 서비스를 하는 만큼 데이터 센터도 전 세계에 깔려있는데, 지역별로 이를 설정할 수 있는 서비스들이 있고, 그에 국한되지 않고 사용할 수 있는 서비스들이 있다.

우리가 주로 사용할 것은 한국 서비스인 asia-apcific-northeast-2 인데, aws 콘솔 창의 상단 부분에서 이 서비스가 글로벌 서비스인지, 리전 선택 서비스인지를 확인할 수 있다.

2. IAM 사용자/그룹
IAM 은 사용할 때 사용자를 지정할 수 있게 하는 프로그램이다. 우리가 조직 내 어떤 서비스를 만들고 사용할 때 어떤 user 가 어떤 group 에서 어떤 역할을 할지 부여해주는? 정도로 이해하자. 그런데 이때 그룹에 아예 안 들어가있는 유저도 존재할 수 있고, 한 사람이 두개 그룹에 들어가게 설정할 수도 있다!

그룹을 만들고 관리하는 이유는 당연히 특정 유저나 그룹에 대한 권한을 관리하기 위함이다. AWS 는 사용자가 당연히 모든 것에 접근하게 하지 않는다. 보안을 강화하기 위해 최소 권한 원칙을 사용하는데, 쉽게 말해 꼭 필요한 권한만 유저와 그룹에게 할당한다고 보면 되겠다.
자 바로 콘솔에서 IAM 그룹을 만들어 보도록 하자
IAM > user > create user 로 넘어와 유저를 하나 생성해 주자. 처음에 만든 계정은 루트 계정이라 모든 권한이 사실 다 들어있는 상태다. IAM 실습을 위해 권한을 조금 가진 유저를 만들어주는 것이다

이렇게 유저를 하나 생성했다. 지금은 이 설정으로 유저를 만들어주자. 비밀번호도 하나 생성함

그리고 나면 유저를 그룹에 할당하거나 할 수 있게 된다.

예시로 admin 이라는 그룹을 만들고 AdministratorAccess 라는 하나의 권한만 준 채로 유저를 이 그룹에 추가해보자

이렇게 유저를 만들어서 추가해주고 돌아가면 admin 그룹에 유저 한명이 있다. 이 창에서 유저가 할 수 있는 권한을 확인할 수 있는데, 우리는 지금 그룹을 만들어 유저를 추가했기 때문에 그룹에 허용된 권한을 모두 상속받게 된다.

여기서 대시보드 창으로 넘어가면 AWS account 창에서 별칭을 지정할 수도 있다. 더 빠르게 로그인하는 방법이라고 함. 아니면 그냥 다른 브라우저로 저 링크를 열기만 하면 방금 만든 그 유저 계정으로 로그인을 할 수 있는거다.

이때! 별칭 만든걸로 로그인하려면 로그인 창에서 Root user 가 아니라 IAM user 를 골라주면 된다.
만들어둔 다른 user 로 로그인한 화면이다. 이때 화면에서 보이는 이름에 @ 기준으로 앞에 있는게 별칭, 뒤에 있는게 유저명이다 ㅋㅋ!!

이렇게 실습을 통해 두 가지 유형의 계정을 만들어봤다
Root 계정 - 서비스 내 모든 권한 접근 가능
IAM 계정 - root 에서 부여된 권한만 접근 가능
나는 AWS 자격증을 위한 코스에서 추천하는 방법으로 이후부터는 IAM 계정으로 실습을 진행하겠다
*하나의 브라우저에서 두 개 id 로 접속 불가!
3. IAM 정책 Policy
IAM 에서 정책 (policy) 는 그냥 유저나 그룹이 부여받는 권한같은거다. 만약에 어떤 유저가 A 그룹과 B 그룹에 동시에 속해있다면 A 그룹의 권한과 B 그룹의 권한을 둘 다 부여받게 된다. 이때 이 policy 는 이런 json 파일로 받게 되는데, 각각 권한에 대한 정보를 나타낸다. 각각 정보들이 담고있는 내용들은 다음과 같다
Version: Policy 언어 버젼
Id : Policy 의 구분키
Statement: 하단에 이어지는 권한들 리스트? 정도로 생각하자
sid: statement 의 구분키
Effect : allow 하거나 deny 하는걸 나타냄
Principal: 어떤 root 계정에 상속되는지
Action: allow 하거나 deny 되는 행위들
Resource: 적용될 action 리소스의 목록
Condition: 이 statement 가 언제 적용되는지 나타냄

지금은 아까 만든 그 유저에게 이 권한 한개만 부여한 상태이기 때문에 json 파일이 다음과 같이 뜰것이다. user 에게 그룹별로 여러가지 권한을 부여하거나, direct 하게 해당 유저에게만 부여할 수 있다. r그러면 이 창에서 유저의 permission 이 바뀌는걸 확인할 수 있다!
4. IAM MFA
IAM 의 MFA 는 비밀번호 정책이다. 보안 문제와 직결되어 설정할 수 있는 요소들인데, 비밀번호 변경 주기라던가, 조합이라던가, 이런걸 설정할 수 있고, 혹은 2단계 인증 절차를 추가할 수 있다.
특히 root 계정은 모든 권한을 관장하는 만큼 잘 보호해야하고, MFA 로 2단계 인증을 꼭 추가하길 권장한다고 한다. MFA 는 여러 대의 기기를 하나의 계정에 연결할 수 있다.
흔히 쓰는 google authenticator 같은걸 쓰던지 아니면 하드웨어에 비밀번호 장치를 넣고 다니는 (Hardware key 어쩌구 저쩌구) 그런 방법들도 있다고 한다. (굉장히 귀찮을 것 같음)
이 내용은 IAM > Security credentials 에서 설정할 수 있다. 실습은 지금은 넘어가도록 하겠다
5. CLI 에서 AWS 쓰기
커멘드 라인에서 AWS 를 쓰면 자동화, 접근 등이 용이하다. AWS 도 역시 CLI 로 접근할 수 있는데, Window, Linux, Mac 모두 설정이 다르다. 구글에 "installing aws cli" 로 검색하면 나오는 공식 문서들로 다운받고 문서에서 시키는대로 설치를 해주자 ^_^
나는 실습을 위해 ver2 를 사용했다
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
Install or update the latest version of the AWS CLI - AWS Command Line Interface
When updating from a previous version, the unzip command prompts to overwrite existing files. To skip these prompts, such as with script automation, use the -u update flag for unzip. This flag automatically updates existing files and creates new ones as ne
docs.aws.amazon.com
터미널에 아래 명령어를 입력해 설치가 잘 되었는지 확인하자

설치가 잘 되었다.
그 다음으로 access key 를 발급받아야 하는데 Iam user 탭에서 발급받을 수 있다. 당연히 키는 어디에 노출하면 절대 안되구요..

키도 여러가지 설정에 따라 부여받을 수 있는데, 앱을 배포하는건지, 로컬에서 쓰는건지 등등에 따라 다르다고 한다. 지금은 실습을 위해 cli 용으로 키를 만들어줬다

발급받은 키는 어딘가에 노출하지 않게 조심!
다시 콘솔 창에 돌아가서 아래 명령어를 입력한 뒤, 로그인에 필요한 것들을 입력해주면 콘솔 내부에서 해당 계정으로 접속할 수 있게 된다. 지역은 가장 가까운 곳으로 해주면 됨
aws configure

접속이 완료되었으면 간단한 명령어로 콘솔에서 할 수 있는 것과 동일하게 user list 를 보여주게 해봤다
aws iam list-users

이렇게 유저 리스트를 볼 수 있는 권한이 있는건 아까 그룹에서 이 유저에게 해당 권한을 부여했기 때문이다. 만약 명령어를 입력했는데 아무것도 안된다면 그건 권한이 없어서 거부가 된 것 !
그리고 aws 상에는 내장된 CLI 로서 Cloudshell 이라는게 있다. 그냥 클라우드쉘 검색하고 똑같은 명령어를 치면 윈도우 명령 프롬프트에 치는거랑 아주 똑같기 때문에 ㅋㅋ 쪼금 더 편리한 것 같고 무려 화면 분할 기능,, 다운로드 기능 ㄷ같은것도 제공한다.

6. IAM 은 그래서 언제 쓰는거냐!!
지금까지 둘러본 IAM 은 한마디로 요약하자면 AWS 상에서 어떤 활동을 하려는 사용자에게 권한을 부여하고 관리하는 내장된 도구 ~ 정도로 생각하면 되겠다.
AWS 는 최소 권한 원칙 (least previlige) 을 쓰기 때문에 기본적으로 처음 등록한 사용자는 아무런 권한이 없는 상태로 등록되어있고, 이에 따라 부여할 수 있는 권한 (role) 도 엄청 세분화되어있어 대박 많다.. 그러니 AWS 서비스가 뭐뭐뭐를 할 수 있는지 알고 있어야 적합한 권한도 부여할 수 있고, 보안 문제를 잘 지키면서 사용자에게 권한을 분배할 수 있게 된다