개요

AWS SAA를 준비하는 겸 AWS에서 제공하는 서비스들을 공부해보려고 한다.

IAM

IAM은 Identity and Access Management의 약자로 만약 호텔을 운영한다고 해보자.
호텔에서는 여러가지 일이 있을 것이다.
방 청소, 기계 정비, 음식 조리 등등…
이런 상황에서 모든 엑세스를 가지는 마스터키를 모든 직원에게 나누어줬다고 해보자.
이런 상황에서는 혹여나 문제가 발생하더라도 어디서 문제가 발생했는지 알기 어렵고 만약 키를 분실했다면 모든 보안이 뚫려버린다.

이런 걸 막기 위해 예를 들어 2층 객실 관리를 담당하는 직원에게는 2층 객실의 키만 주는 것이 맞고 기계 정비 직원에게는 기계 정비 키만 제공해야한다.

AWS에 회원가입한 계정은 말하자면 마스터키에 해당하고 담당하는 파트에 맞는 최소한의 엑세스만 주어지는 것을 IAM이라고 할 수 있다.

따라서 보안상의 이유로 루트 계정은 처음 계정을 생성할 때만 사용하고 그 이후로는 루트 계정을 사용하거나 공유하면 위험하다.

AWS에서는 글로벌 서비스와 지역 서비스가 존재하는데 IAM은 리전을 가리지 않는 글로벌 서비스에 해당한다.

그리고 이들을 묶어서 하나의 그룹으로도 관리할 수 있는데 예를 들어 하나의 조직에 5명이 있는데 그 중 A, B는 팀의 개발자고 C, D는 운영을 담당한다면 각각 Developers, Operations로 묶을 수 있는 것이다.

또한 한 유저는 여러 그룹에 속할 수 있다.
참고로 IAM 계정을 생성하는 것은 비용을 부과하지 않으니 생성하고 삭제하지 않고 두어도 상관이 없다.

IAM 실습

  1. AWS에 루트 계정으로 로그인한다.
  2. iam 콘솔에 들어간다.
  3. 새로운 유저 생성을 클릭한다.
  4. 유저 이름을 입력한다.

Image

Image

여기서 콘솔 엑세스 권한을 선택할 수 있는데 콘솔 엑세스를 허용하는 것은 사용자가 AWS 웹 콘솔에 로그인할 수 있도록 사용자를 생성하여 AWS 콘솔에서 리소스를 관리해야하는 관리자나 개발자에게 필요한 옵션이고
다른 방식은 프로그래밍 방식 엑세스로 서버, 애플리케이션, 자동화 스크립트에서 AWS 서비스를 호출할 때 사용한다.

엑세스 콘솔을 사용하는 경우도 옵션이 두 가지로 나뉘는데 후자가 더 생성하기 쉽다.

암호를 설정해야하는데 자동으로 암호를 생성하고 다음 접속 때 바꾸도록 해도 되고 이는 주로 누군가에게 계정을 생성해주고 관리하도록 할 때 사용하고 사용자 지정 암호는 직접 사용하는 경우 주로 사용한다.

그 다음 권한을 설정해주면 되는데 직접 추가하거나 그룹을 만들어도 된다.

Image

이번에는 그룹을 만들어 권한을 설정해본다.

그룹 만들기를 누르고 권한은 가장 처음 나오는 관리자 권한을 선택한다.

그런 다음 그룹에 사용자 추가 옵션을 선택하여 좀 전에 만든 그룹을 선택하면 된다.(태그도 사용이 가능하다.)

이렇게 유저를 생성하고 로그인 화면에서 IAM으로 로그인을 클릭하고 계정 정보를 올바르게 넣으면 된다.

권한 설정

IAM 권한 설정은 JSON 포멧으로 표현된다.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "AllowDescribe",
			"Effect": "Allow",
			"Action": [
				"ec2:Describe*"
			],
			"Resource": "*"
		}
  ]
}

Version은 정책 버전을 말한다.
Statement의 Sid는 Statement의 id를 말하고 Effect는 특정 API에 접근할지 거부할지 설정되어있는 부분이다.

이러한 형식을 익혀서 직접 작성해도 되고 권한 편집기능을 이용하여 자동완성되도록 설정할 수도 있다.

IAM MFA

사용자와 그룹을 보호하기 위해 2가지 전략을 사용할 수 있는데 첫 번째는 비밀번호를 설정하는 것이고 두 번째로는 MFA로 패스워드와 소지하고있는 기기(스마트폰 usb)등을 이용하는 것이다. 이렇게 하면 만약 비밀번호를 도난당하더라도 물리적인 장치를 가지고있지 않다면 로그인할 수 없게 된다.

이와 관련된 설정은 계정 설정에 들어가서 할 수 있다.
계정 설정 -> 암호 정책에 들어가서 편집을 클릭하면 IAM 기본값과 사용자 지정 둘 중에 하나를 선택할 수 있다. 기본은 암호 최소 8자, 대문자, 소문자, 숫자, 영숫자를 제외한 문자와 같이 설정되어있는데 이것을 예를 들어 16자로 바꾼다거나 할 수 있는 것이다.

또 다른 설정은 계정 이름을 클릭한 다음 보안 자격 증명을 클릭한다.
여기서 MFA 디바이스 할당을 클릭하여 선택하여 적용할 수 있다.
나는 핸드폰으로 QR코드를 찍어 로그인할 수 있도록 설정해두었다.

Access Key

지금까지는 웹 인터페이스를 통해 접근했지만 원격 환경에서 접근해야할 경우도 생긴다. 예를 들어 직접 구성한 웹 서버에서 S3 스토리지에 파일을 업로드해야할 경우 S3 엑세스 권한을 가진 IAM 정보를 포함해 요청을 전송한다던지 하는 작업이다.

우선 CLI에서 AWS와 통신해보자.
공식 문서

공식 문서를 보면 운영체제별로 어떤 명령어를 입력해야하는지 나와있다. 이대로 따라하면 된다.
설치하고 aws –version 명령어를 입력해봤을 때 정상적으로 버전이 출력되면 제대로 설치된 것이다.

이제 엑세스 키를 생성하여 CLI에서 AWS와 통신해보자.
사용 목적에 따른 옵션이 있지만 CLI로 선택한다.

이렇게 생성하면 엑세스 키와 시크릿 엑세스 키가 생성되는데 전자는 엑세스 키 아이디라고 부르고 후자는 시크릿 엑세스 키라고 부른다.

이제 로컬에서 콘솔을 열고 aws configure명령어를 입력해본다. 여기서 키들을 입력하고 설정을 완료한다.
그런 뒤 aws iam list-users 명령어를 입력하면 계정 내에 있는 iam 유저들의 정보가 나온다.

CloudShell

클라우드 쉘은 좀 전에 터미널에서 aws에 접속하였듯이 aws에서 제공하는 무료 터미널이다.
현재 클라우드 쉘을 사용할 수 있는 지역이 있고 없는 지역이 있는데 만약 해당되지 않는 지역이라면 기존에 쓰던 로컬 터미널을 사용해도 전혀 문제가 없다.

AWS에서 클라우드쉘을 검색하여 들어갈 수 있고 위에서 살펴봤던 작업들이 가능하다.

IAM Role

위에서 살펴본 것 처럼 IAM에 권한을 설정해줄 수 있는데 예를 들어 EC2에서 AWS에 무언가 작업을 해야할 수 있다. 그러기 위해선 EC2에 관련된 작업을 할 수 있는 권한을 부여해야한다.

왼쪽 메뉴를 보면 역할이 있다. 여기서 역할 생성을 누르면 AWS 서비스에 대한 작업 권한을 부여할 수 있다.
일단 EC2를 선택하고 별다른 옵션을 선택하지 않고 다음 버튼을 누르면 해당 서비스에 대한 권한을 부여할 수 있다. 이렇게 역할을 선택하면 커스텀 역할을 정할 수 있다 예를 들어 여러명의 작업자에게 IAM 계정을 제공하며 권한을 여러 개 설정할 때 이렇게 권한 묶음을 설정한 뒤 IAM 계정에 적용하면 된다.

IAM 보안도구

IAM 보안도구를 사용하면 해당 계정 레벨에서는 어떤 권한이 부여되어있는지 등을 볼 수 있고 관리자 레벨에서 적용하면 어떤 사용자가 어떤 서비스에 엑세스할 수 있는지와 언제 마지막으로 엑세스했는지 등을 볼 수 있다.

왼쪽 하단 메뉴를 보면 자격 증명 보고서라는 메뉴가 있다.

여기서 다운로드를 클릭하면 CSV 파일로 다운받아지는데 언제 패스워드가 사용되었고 언제 바뀌었는지 다양한 정보를 알 수 있다.
또 루트계정에서 IAM 유저를 클릭하고 하단에서 마지막 엑세스를 보면 어떤 서비스에 허용되어있고 언제 마지막으로 엑세스하였는지를 알 수 있다.

IAM 주의점

  1. AWS 계정을 설정할 때 말고는 루트계정을 사용하지 말아라. 대신 루트 계정과 관리 계정을 사용하라.
  2. 그룹을 적극 활용해라.
  3. MFA 인증을 적극 활용해라
  4. 엑세스 키를 함부러 공유하지 말아라