프로젝트/장기 프로젝트

Hustle #5. (1부) AWS 인프라 초기 셋팅 - AWS 계정, IAM 계정, 예상 결제 요금 알림

Chipmunks 2023. 7. 10. 00:42
728x90

안녕하세요, 다람쥐입니다.

이번 포스팅에선 AWS 인프라 초기 셋팅을 해보려고 합니다.

 

계획

대략적인 개요는 다음과 같습니다.

 

1. 구글 계정을 만들고 AWS 계정을 만듭니다.

계정 정보는 모두 노션에 기록하며 비밀번호는 보안이 강한 규칙으로 생성합니다.

 

2. 결제 알림을 설정합니다. 인보이스 전송과 프리티어 알림을 설정하고 CloudWatch 결제 알림을 설정합니다. 예상 월 요금이 상한선을 초과하면 이메일로 알림이 오도록 설정합니다.

 

3. AWS IAM 을 설정합니다. 루트 계정에 MFA 를 설정합니다. 또한 팀원 계정을 만들고 공지합니다. 책임자 계정, 팀원(백엔드 / 프론트엔드) 계정, PM 계정 으로 사용자 그룹을 나눠 공통 권한을 설정합니다.

 

4. 서버에 필요한 리소스를 생성합니다. AWS EC2 인스턴스와 RDS 데이터베이스 인스턴스 등을 생성합니다. AWS Route53 에서 가비아에서 구매한 도메인과 연동합니다.

 

1~3번은 1부에서 서술합니다. 4번은 2부에서 서술할 예정입니다.

 

1. 계정 만들기

1.1. 구글 계정 만들기

AWS 계정을 만드려면 루트 계정을 구글 이메일로 만들어야 합니다.

구글 계정 회원가입 절차도 간편합니다.

구글 로그인 화면에서 계정 만들기 버튼을 클릭합니다.

개인용으로 만든 다음 성과 이름을 아무거나 만들고 넘어갑니다.

구글 계정 만들기 화면 들어가기

 

생년월일과 성별을 입력합니다. 생년월일과 성별도 무작위로 작성이 가능합니다.

내 Gmail 주소 만들기로 새로 만들 계정 이메일을 입력합니다.

다음으로 비밀번호를 기재합니다.

계정 이메일과 비밀번호 생성

 

계정은 팀 노션에 한 꺼번에 정리하고자 합니다.

인프라 셋팅을 위한 계정 정보와 작업 시 공유되어야 하는 암호화 키 등을 정리합니다.

계정 및 보안 페이지가 노출되지 않도록 주의사항 문구를 문서 상단에 작성합니다.

비밀번호 입력을 마치면 복구 이메일을 추가합니다.

공유되는 계정 특성상 팀원들의 접근 메일 알람이 수시로 옵니다.

계정을 잃어버린 경우 복구를 위해 다른 이메일을 추가할 수 있습니다.

 

전화번호 추가는 건너뜁니다.

팀원들이 접근 시 여기서 등록한 복구 이메일 또는 추가한 전화번호로 인증을 하라는 메시지가 뜰 수도 있습니다.

이 경우 번거로울 수가 있기 때문에 불필요하다 느낄 시 건너뛰기합니다.

마지막으로 개인 정보 약관을 동의한 후 계정 생성을 마칩니다.

구글 회원가입 마지막 

계정을 만드는 데 성공했으면 지메일 화면으로 이동합니다.

AWS 계정을 만들 때 이메일 인증이 필요하기에, 지메일 화면을 미리 켜둡니다.

 

1.2. AWS 계정 만들기

AWS 계정을 만들러 AWS 콘솔에 접속합니다.

 

https://console.aws.amazon.com/console/home

 

console.aws.amazon.com

 

AWS 계정을 새로 만듭니다.

로그인 화면에서 'AWS 계정 새로 만들기' 버튼을 누릅니다.

루트 유저 이메일 주소를 입력과 AWS 계정 이름을 입력합니다.

기존 이메일로 인증을 하기에, 앞서 만든 구글 계정을 입력합니다.

이메일로 온 인증코드를 입력한 후 비밀번호를 설정합니다.

AWS 회원가입 (1)

 

계정 생성이 끝나면 연락처와 해외 결제가 되는 마스터 / 비자 카드 정보를 입력합니다.

AWS 회원가입 (2)

이후 카드인증을 위한 창으로 이동합니다. 카드 비밀번호 / 생년월일을 입력한 후 인증을 시작합니다.

본인 계좌에 100원이 빠져나가면서 인증을 성공합니다.

인증 성공 후 100원은 다시 철회됩니다.

마지막으로 SMS 또는 Voice Call 으로 인증합니다.

인증 성공 후 서포트 플랜을 선택합니다.

무료로 이용 가능한 베이직 서포트로 선택합니다.

AWS 회원 가입을 마칩니다.

 

2. 결제 알림 설정

2.1. 청구서 기본 설정

우측 상단 계정 > 결제 대시보드 > 기본 설정 > 청구서 설정 페이지에 들어갑니다.

인보이스 전송 기본 설정과 알림 기본 설정에서 편집 버튼을 눌러 활성화 시킵니다.

청구서 기본 설정

예상 요금 모니터링을 활성화를 마친 후

Cloudwatch 결제 알람 경보를 생성합니다.

Cloudwatch 서비스에서 버지니아 북부 리전으로 변경합니다.

경보 > 모든 경보 페이지로 들어가 '경보 생성' 버튼을 누릅니다.

Cloudwatch 경보 페이지

 

지표 선택 버튼을 누릅니다.

아래 찾아보기에서 결제 > 예상 요금 합계 > USD 를 체크합니다.

팝업 창 하단에 있는 지표 선택 버튼을 누릅니다.

예상 결제 요금 지표 선택

예상 요금이 1달러보다 많이 나오면 경보를 울리도록 설정합니다.

예상 결제 요금 지표 설정

다음으로 알림을 설정합니다.

경보 상태일 때 이메일로 알림이 가도록 설정합니다.

새 SNS 주제를 생성합니다.

주제 이름을 입력하고 알림을 수신할 이메일 계정을 입력합니다.

여러 개면 쉼표로 구분합니다.

주제 생성 버튼을 누르면 두 번째 사진처럼 기존 SNS 주제 선택으로 옵션이 변경되며

SNS 주제가 만든 SNS 주제로 선택되어 있습니다.

설정한 이메일도 그 아래에서 확인이 가능합니다.

다음 버튼을 누릅니다.

 

경보 이름과 경보 설명을 입력합니다.

경보 설명은 선택 사항으로 마크다운 형식으로 작성 가능합니다.

최종으로 작성한 정보를 확인한 후 경보를 생성합니다.

경보 이름 및 설명 추가

 

CloudWatch 에서 경보가 생성된걸 확인할 수 있습니다.

예상 결제 요금 1달러 이상 알람 경보 생성

시간이 지나 데이터가 생성되면 아래처럼 상태가 '정상' 으로 변경됩니다.

정상 상태인 예상 결제 요금 1달러 이상 알람 경보

작업 영역을 보면 '경고' 표시가 나타나있습니다.

해당 SNS 주제를 구독하는 이메일이 아직 확인 대기 중이라는데요.

AWS SNS 서비스에서 해당 주제 상세 페이지로 들어가면 아래와 같습니다.

아래 구독 목록에 '확인 대기 중' 이라고 나타나있는 걸 확인할 수 있습니다.

 

메일함으로 들어가면 아래처럼 'AWS Notification - Subscription Confirmation' 제목의 메일이 날라옵니다.

만약 없다면 스팸메일함을 확인합니다.

지메일의 경우 스팸메일함으로 넘어가는 경우가 있습니다.

 

Confirm subscription 링크를 누릅니다.

아래와 같이 구독에 성공헀다는 메시지가 나타납니다.

만약 이메일 구독을 끊고 싶다면 click here to unsubscribe 링크를 누르면 해제됩니다.

 

SNS 주제 구독 성공 메시지

AWS SNS 주제를 구독한 이메일에서 메일이 오지 않는다면 위와 같은 설정이 되어 있는지 확인 바랍니다.

AWS SNS 주제 이메일 구독 신청 메일이 오지 않는다면 스팸메일함에 있지 않은지 확인 바랍니다.

모두 이메일 구독을 허용하면, 아래와 같이 '확인됨' 상태로 변경된 걸 확인할 수 있습니다.

AWS SNS 주제 구독 상태 확인됨

다시 CloudWatch 경보 목록으로 돌아오면 작업 칸에 있는 '경고' 가 사라진 걸 확인할 수 있습니다.

경고를 해결한 CloudWatch 경보

3. AWS IAM 으로 팀원 계정 만들기

3.1. AWS IAM 이란?

AWS IAM 은 AWS Identity and Access Management 으로, AWS 리소스 액세스를 안전하게 제어할 수 있는 서비스입니다.

사용자가 액세스할 수 있는 AWS 리소스 제어 권한을 중앙에서 관리할 수 있습니다.

IAM 으로 AWS 리소스 제어 권한을 가진 새로운 계정을 만들 수 있으며, 여러 사용자가 로그인할 수 있습니다.

실제 사람이 사용하는 계정 뿐 아니라, 외부에서 프로그래밍적으로 제한된 리소스만을 사용할 수 있게끔 구성할 수 있습니다.

멀티 팩터 인증 (Multi Factor Authentication) 을 지원합니다. MFA 는 인증할 때 추가로 디바이스의 코드도 제공해야 합니다.

 

3.2. 루트 계정 AWS MFA 설정

루트 계정은 모든 권한을 가지며, 결제 청구서를 볼 수 있는 계정입니다.

해당 계정의 보안을 위해 MFA 인증으로 추가 디바이스 코드 인증을 추가합니다.

우측 상단 계정 클릭 후 '보안 자격 증명' 을 클릭합니다.

계정 상세 메뉴

 

또는 AWS IAM 에서 루트 사용자가 MFA 인증이 되어 있지 않으면, 아래처럼 대시보드에서 경고가 나타납니다.

MFA 추가 버튼을 클릭하면, 보안 자격 증명 페이지로 이동합니다.

AWS IAM MFA 설정 경고

아래로 내리다보면 멀티 팩터 인증(MFA)을 선택하는 항목이 있습니다.

MFA 디바이스 할당 버튼을 누릅니다.

멀티 팩터 인증(MFA) 설정

디바이스 이름을 입력하고 '인증 관리자 앱' 을 선택합니다.

디바이스 이름은 디바이스를 식별할 수 있는 이름으로 합니다.

여기선 (이름)-(휴대폰 기종) 형식으로 지었습니다.

띄어쓰기는 안됩니다.

MFA 디바이스 선택 화면

 

다음으로 디바이스를 설정합니다.

디바이스로 활용할 모바일 기기에 Google Authenticator 앱을 설치합니다.

아래 다운로드 링크를 참고해주세요.

Android Play Store : https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=en_US 

 

Google Authenticator - Apps on Google Play

Enable 2-step verification to protect your account from hijacking.

play.google.com

AppStore : https://apps.apple.com/us/app/google-authenticator/id388497605

 

‎Google Authenticator

‎Google Authenticator adds an extra layer of security to your online accounts by adding a second step of verification when you sign in. This means that in addition to your password, you'll also need to enter a code that is generated by the Google Authent

apps.apple.com

 

모바일 기기에서 아래처럼 구글 계정 로그인 후 '코드 추가' 버튼을 누릅니다.

'QR 코드 스캔' 버튼을 눌러 QR 코드를 스캔할 준비를 합니다.

 

디바이스 설정에서 QR 코드를 표시합니다.

모바일 기기에서 해당 QR 코드를 추가합니다.

이후에 아래처럼 MFA 디바이스에 표시된 코드 두개를 입력합니다.

첫 번째 숫자가 나타난 뒤, 얼마의 시간이 지나서 두 번째 숫자가 나타납니다.

띄어쓰기 무시하고 입력해야 합니다.

예를 들어 아래처럼 첫 번째로 나온 '082 341' 을 '082341' 으로 MFA 코드 1에 입력해야 합니다.

얼마의 시간이 지나 두 번째로 나온 '725 705' 을 '725705' 으로 MFA 코드 2이 입력해야 합니다.

 

MFA 코드 입력을 마치면, 아래와 같이 멀티 팩터 인증에 추가된 걸 확인할 수 있습니다.

추가된 멀티 팩터 인증(MFA)

 

이제 루트 계정에 로그인하면 MFA 인증을 하게 됩니다.

디바이스의 Google Authenticator 앱에서 확인할 수 있습니다.

마찬가지로 띄어쓰기 없이 입력합니다.

 

3.3. IAM 팀원 계정 생성

AWS IAM 으로 팀원 계정을 생성할 수 있습니다.

AWS IAM 은 사용자에 따라 권한을 설정할 수 있을 뿐 아니라, 사용자 그룹별로 공통된 권한을 설정할 수 있습니다.

리소스 삭제 같은 권한은 위험할 수 있으므로 미리 제거합니다.

불필요한 서비스 사용을 막기 위해 필요한 서비스 사용만 지원하도록 권한을 설정합니다.

 

우선 사용자 그룹을 만듭니다. 사용자 그룹으로 역할

AWS IAM 페이지에서 액세스 관리 > 사용자 그룹 페이지로 이동합니다.

그룹 생성 버튼을 클릭합니다.

사용자 그룹 페이지

 

우선 backend 그룹을 만듭니다.

사용자 그룹 이름을 입력합니다.

사용자 그룹 이름 지정

 

아래 권한 정책 연결에서 적절한 권한을 선택합니다.

저희 팀의 경우 백엔드 개발자는 FullAccess 또는 ReadOnly 로 필터링 한 뒤, 팀이 사용할 서비스만 선택했습니다.

프론트엔드, PM 의 경우 모든 리소스를 ReadOnly 만 가능하게끔 설정했습니다.

권한 정책 연결

다음으로 사용자 계정을 만듭니다.

IAM 액세스 관리 > 사용자에 들어갑니다.

사용자 추가 버튼을 누릅니다.

AWS IAM 사용자 페이지

 

사용자 이름을 입력합니다.

여기서 입력한 사용자 이름으로 로그인하므로

식별하기 쉬운 이름으로 입력합니다.

사용자 세부 정보 지정

AWS 콘솔에 접근이 가능해야하므로 'AWS Managerment Console에 대한 사용자 액세스 권한 제공' 옵션을 체크합니다.

'IAM 사용자를 생성하고 싶음' 유형으로 IAM 계정으로 AWS 콘솔에 접속하게끔 합니다.

콘솔 암호는 자동 생성된 암호로 제공되는데요.

'사용자는 다음 로그인 시 새 암호를 생성해야 합니다 - 권장' 옵션을 체크하면, 첫 로그인 시 필수적으로 비밀번호를 사용자가 변경해야 합니다.

AWS Management Console 접근 권한 설정

 

다음으로 권한을 설정합니다.

이전에 사용자 그룹을 생성했습니다.

'그룹에 사용자 추가' 권한 옵션으로 backend 그룹에 할당합니다.

권한 설정

다음을 누르면 검토 화면으로 넘어갑니다.

설정사항들이 올바른지 확인합니다.

처음 로그인하면 비밀번호를 변경해야 하는 옵션을 체크하면, 'IAMUserChangePassword' 권한이 자동으로 추가됩니다.

콘솔 암호 유형은 자동으로 암호가 생성되는 'Autogenerated' 이며, '암호 재설정 필요' 에도 '예' 가 나타난 걸 알 수 있습니다.

검토가 끝나면 사용자 생성 버튼을 누릅니다.

AWS IAM 계정 검토 및 생성

콘솔 로그인 URL 과 사용자 이름, 콘솔 암호가 나타납니다.

이제 생성된 IAM 계정은 콘솔 로그인 URL 에서 AWS 콘솔에 접속할 수 있게 됩니다.

자동 생성된 콘솔 암호는 우측 '표시' 버튼을 누르면 확인할 수 있습니다.

최종 IAM 계정 생성 화면

 

콘솔 URL 로 접근하면 아래와 같이 IAM 사용자로 로그인이 나타납니다.

그리고 계정 ID 는 루트 계정 ID 또는 계정 별칭이 나타납니다.

계정 별칭은 추후 설명할 예정입니다.

사용자 이름과 암호를 입력합니다.

AWS 콘솔 IAM 사용자로 로그인 화면 (좌) / 새 비밀번호 입력 (우)

다시 루트 사용자 계정으로 로그인하려면, 아래 '루트 사용자 이메일을 사용하여 로그인' 버튼을 누릅니다.

IAM 계정도 보안을 위해 MFA 를 설정하는 걸 권장합니다.

MFA 설정 방법은 위와 동일합니다.

 

루트 계정에서 팀원 IAM 계정을 새로 만들어서 자동 생성된 또는 임의로 만든 비밀번호를 전달하면 끝입니다.

팀원들은 임의로 만든 비밀번호로 처음 로그인한 뒤, 비밀번호를 변경합니다.

IAM 계정에서도 보안을 위해 MFA 인증을 설정하는 걸 권장합니다.

 

3.4. 루트 계정 별칭 생성

계정 ID 는 임의의 숫자로 이루어져 있으므로 외우기가 불편합니다.

계정 ID 대신 다른 별칭과 겹치지 않은 고유한 별칭을 할당할 수 있습니다.

루트 계정으로 로그인한 뒤 AWS IAM 대시보드에서 우측 AWS 계정 > 계정 별칭 > 생성 버튼을 누릅니다.

 

AWS IAM 대시보드 계정 별칭 생성

만약 별칭이 중복되면 위와 같이 오류 메시지가 나타납니다.

겹치지 않는 다른 별칭을 사용해야 합니다.

계정 별칭 중복 생성 (좌) 계정 별칭 성공적으로 생성 (우)

IAM 사용자를 위한 로그인 URL 도 계정 ID(숫자) 에서 별칭으로 변경된 걸 확인할 수 있습니다.

 

마무리

이번 포스팅에선 인프라 셋팅을 위한 계정 생성 단계를 알아봤습니다.

보안을 위한 멀티 팩터 기능을 사용해보고 IAM 계정도 팀원과 그룹별로 구분을 지어봤습니다.

예상 결제 요금 알람 경보를 만들어 혹시 모를 과금을 미연에 방지했습니다.

 

다음 포스팅에서는 EC2 인스턴스와 RDS 인스턴스 등을 생성해보고 여건이 된다면 가비아에서 구입한 도메인과 연결해보고자 합니다.

긴 글 읽어주셔서 감사합니다.