프리 프로젝트 막바지에 배포를 위한 방법으로 다음과 같은 방법을 채택하기로 했다.
1. React 프로젝트 (클라이언트) : 정적 파일로 빌드하여 S3에 올리기
2. Spring Boot 프로젝트 (서버) : EC2 + RDS로 서버 및 데이터베이스 구성하기
위의 배포 방식은 수동배포뿐만 아니라 향후 유지보수 및 개선을 위한 방법으로, Github 액션 및 CI/CD 구현을 위해 경험해보기 좋은 케이스라 생각되어 채택했다.
분명 코드스테이츠 코스에서 EC2와 S3를 간략하게 경험했기 때문에 상대적으로 빌드와 구성에 있어서 용이할거라 착각했다.
하지만 생각보다 익숙하지 않은 AWS의 인터페이스와 수많은 권한/정책으로 인해 상당한 시간을 이를 이해하는데 할애하게 됐다.
(사실 아직도 이해했다고 생각되지는 않는다. 그냥, 팀원과 함께 하나의 프로젝트를 배포가능한 환경을 만들어보는 경험을 해봤다는 수준일 것이다.)
** 유의점!
* 글을 작성한 뒤에 발견한 것!! : AWS에서는 리전이 굉장히 중요한데, 본인은 포스팅에서 리전을 아시아(서울)로 해놓지 않고 글로벌로 해놓은 뒤에 예시를 들어버렸다.(바보..)ㅠㅠ 이를 감안해주시길...
AWS는 익숙하지 않으면서, 많은 기업에서 사용하기에 꼭 한번 해봐야겠다는 압박감과 동시에 자칫하면 상당한 비용이 청구될 수 있다는 불안감으로 인해 접근하기가 쉽지 않은 영역이다. 본인 또한 이 포스팅을 작성하면서 AWS를 충분히 이해하고 작성했다고 생각하지 않는다.
다만 불안해하기만 하면 이 영역은 실무에 가서 더 큰 시간과 노력을 들여야지만 겨우 접할 수 있는 영역이다.
(기본적으로 신입 개발자에게 배포환경의 구성과 조직 구성을 맡길 것이라 생각되지는 않기 때문에...)
그래서, 아직은 "안전장치가 그나마 있는 상태"로... "최소한의 권한과 기능을 사용하자"는 마음으로 "시작한다" 라는 관점에서 본문을 정리해봤다.
그럴리는 없겠으나,, 혹시나 찾아오신 분들이 계시다면,,, 모든 단계와 설정, 개념에 대해 스스로 학습하고 아래의 전개를 참고만! 하셨으면 좋겠다.
AWS 사용자 종류
AWS는 누구나 접속가능한 가상 컴퓨터를 대여해서 해당 컴퓨터에 프로젝트 파일을 업로드하는 서비스다.
이 때 "누구나"라는 단어는 잘못하면 누구나 프로젝트와 서비스에 접근해서 사용자 정보 및 소스 코드를 조작하거나 탈취할 수 있다는 의미이기도 하다. 이를 위해 AWS는 수많은 권한 및 접근 설정에 관한 정책들을 마련해놓고 있다.
참조 블로그 : https://velog.io/@chan9708/AWS-Certified-Solutions-Architect-Associate-2-AWS-IAM-CLI
AWS의 사용자는 크게 2가지 계정으로 나뉜다.
1. 루트 사용자 : 루트 사용자는 AWS 클라우드 계정을 활용한 모든 접근 및 통제에 대해 무제한의 권한을 갖는 유일한 사용자이다. 루트 사용자를 이용해서 매일 프로젝트 및 배포를 위한 접근은 극히 위험한 활동이며, 이에 AWS는 루트 사용자를 묶어서 새로운 조직을 구성하는데 많은 조건과 정책을 걸고 있다. 따라서 소규모 프로젝트를 위한 팀 내에서 각각 루트 사용자를 활용한 접근은 권장되지 않은 방법이다.
2. IAM 사용자 : IAM 사용자는 루트 사용자에게 권한을 부여받아 제한된 권한 안에서 각 프로젝트 및 AWS 서비스를 이용할 수 있는 사용자를 말한다. AWS에서는 루트 사용자에 속한 여러 IAM 사용자가 최대한 제한된 권한을 갖고 필요한 작업에 접근할 수 있도록 제한하고 있다.
참조 공식문서 : https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html
처음 AWS의 방대한 자료 앞에 막막한 마음으로 섰을 때, 정말 초심자에게 잘 정리된 레퍼런스와 설명을 제공한다고 생각한 사이트는 W3School의 AWS 클라우드 튜토리얼이다. 아래에 링크를 첨부한다.
W3School AWS 클라우드 튜토리얼 : https://www.w3schools.com/aws/index.php
대규모 프로젝트를 경험해본 적도 없고, 앞으로 얼마나 빌드 및 배포를 할 수 있는 기회가 있을지 모르겠지만, 현재 상황에서 루트 사용자 내부에 본인을 포함한 IAM 사용자 계정을 생성하고 이에 대해 필요한 권한을 부여하는 것이 적절한 방법이라 생각하고 이를 바탕으로 AWS 환경 구성에 접근하고자 했다.
IAM 사용자 생성
루트 계정을 생성했다면, 이제 각 사용자들에게 전달한 IAM 계정을 생성해야 한다.
먼저 루트 계정으로 로그인하면 다음과 같은 화면이 보일 것이다.
(처음에 루트 사용자로 로그인한다면, 최근 활동 내역이 담긴 대시보드에 아무것도 안 보일 것이다.)
본인은 뭐가 뭔지 모르겠으면 일반적으로 1)구글링 , 2)Chat GPT , 3)공식문서 , 4)해당 사이트에 냅다 검색해보기 순으로 찾아본 뒤 시도해보는 편이다. 위의 사용자 개념과 권한 설정의 개념까지 찾아봤고, 공식문서도 대충 훓었으니 냅다 검색창에 IAM을 검색했고 클릭했다.!!!
이후에는 다음과 같은 순서로 작업을 진행했다.
1. 사용자 그룹 생성 : 동일한 권한을 동시에 부여한다.
2. 권한 설정 : 이번 프로젝트에서는 모든 팀원이 동일하게 모든 팀원이 동일하게 모든 기능에 접근이 가능해야 한다고 생각했기 때문에, 이에 맞춘 권한을 설정했다.
3. 사용자 생성 : 프로젝트를 함께할 팀원들에게 제공할 IAM 사용자를 생성한다. (상황에 따라 한 루트 사용자가 모든 IAM 계정을 생성하는 것이 아닌 필요에 따라 다양하게 구성할 수 있을 것이다.)
사실 IAM 계정을 먼저 생성해도 되고, 사용자 그룹을 먼저 생성해도 된다.
어차피 사용자 그룹을 먼저 생성하면 IAM 계정 생성 단계에서 그룹에 추가만 해주면 되고,
IAM 계정을 먼저 생성하면, 사용자 그룹 생성 단계에서 추가해주면 되고,
모두 끝난 뒤에 사용자와 권한을 추가/제거/수정을 할 수 있기 때문에 순서는 상관이 없다.
하지만, 본인은 정말정말 아무것도 모르는 상태로 처음 접했기에 가장 눈에 먼저 들어오는 순서대로 환경을 설정했다.
사용자 그룹명을 정하고 하단으로 스크롤하면 권한 설정에 관한 내용이 나온다.
권한 설정
아래의 사진에서도 볼 수 있다시피, AWS에서는 이미 800개가 넘는 권한들을 제공하고 있다.
하지만 이 외에도 본인이 권한 정책에 대한 충분한 이해가 있다면, JSON 파일로 된 권한 정책을 직접 작성할 수도 있다.
본인은 짧은 기간 AWS를 활용한 배포를 시도해야 했기 때문에 기존에 있는 권한들을 활용했으며, 팀원 분들께 많이 의존할 수 밖에 없는 상황이었기 때문에 프로젝트에 필요한 EC2(서버), S3(클라이언트), RDS(데이터베이스)에 대한 모든 권한을 드리는 것으로 시작했다.
이를 위해 "속성 또는 정책 이름을 기준으로 정책을 필터링 하고..." 라고 placeholder가 되어있는 input창에 다음과 같이 검색했다.
먼저, S3를 검색해봤다.
위와 같이 검색하면, AWS에서 제공하는 수많은 권한들이 나열되는데 이 중 AmazonS3FullAccess 권한을 부여했다.
이후, RDS / EC2도 동일한 형식으로 진행했다.
< 일의 진행 순서와 조금 별개이지만, 이 3개의 권한을 부여했음에도 추가적인 접근권한을 요구하는 서비스들이 있었다. 이로 인해 배포 작업이 1-2시간 가량 지연되었는데, 처음에는 구글링을 통해 전체 접근 권한을 설정하는 부분을 JSON으로 작성했으나, 해당 정책에 해당하는 메뉴를 찾아서 뒤늦게 추가했다. ( 동료분들께 죄송 + 감사 ㅠㅠ ) ===> 해당 권한의 이름은 AdministratorAccess 이다.>
만약 사용자 그룹이 생성된 이후에 새로운 권한을 추가하고자 한다면 그룹을 클릭한 다음에 다음과 같은 사진에서
권한추가 => 정책연결 (AWS에서 제공하는 정책) / 인라인 정책 생성 (사용자 정의 정책, JSON 혹은 콘솔 선택 방식) => 원하는 권한 체크까지하면 별도의 저장 절차 없이 바로 적용이 된다.
인라인 정책 생성과 같은 사용자 정의 정책도 궁금하긴 했으나, 임박한 과제가 산적했기에,,, 이번 기회는 패쓰하기로 했다!
IAM 계정 생성
이제 루트 계정에 딸린 IAM 사용자 계정을 생성해야 한다.
좌측 nav에 있는 액세스 관리 카테고리의 사용자 메뉴를 선택해보면 다음과 같은 창이 보인다.
이후에는 다음과 같은 창이 뜬다!
화면에는 보이지 않지만, 아래로 스크롤하면 다음버튼이 보일 것이다. 다음으로 넘어가보자.
위의 옵션에도 볼 수 있다시피, 3가지 선택지가 주어진다. 원하는 것을 선택하면 되지만, 본인은 아직 그룹을 중심으로 권한을 나누고 관리하는게 익숙하기에 그룹 중심으로 권한을 설정했다.
✅ 이미 권한이 모두 설정된 사용자 그룹에 추가하는 방법
2. 루트 사용자에 묶인 모든 계정에 동일하게 할당된 권한을 할당하는 방법
3. 사용자 정의로 커스터마이징된 권한을 따로 해당 사용자에게 추가하는 방법
이후에, 생성된 IAM 계정 생성 정보를 한번 쓱 체크해주고, 사용자 생성 버튼을 누르면 아래와 같이 사용자가 생성된다.
로그인 세부 정보에는 총 3가지의 정보가 보인다.
1. 콘솔 로그인 URL : https://{12자리의 IAM id}.signin.aws.amazon.com/console
2. 사용자 이름
3. 콘솔 암호
위의 3가지 정보는 매우 중요한 보안 정보에 해당하고, 실제 IAM 사용자는 12자리의 IAM id, 사용자 이름, 콘솔 암호를 가지고 IAM 계정에 로그인을 하게 된다. 따라서, 이 정보는 반드시 보안이 확보된 수단에 저장되어야 한다.
본인은 .csv파일로 저장한 뒤, 엑셀 파일로 열고 나서 해당 파일에 비밀번호를 설정하고 나중에 팀원분들께 공유드렸다. 가장 무식한 방법이지만, 본인이 생각하기에 가장 안전한 방법이라고 여겨져서 그와 같이 조치했다.
사용자 계정 생성 뒤에도 다시 이 창을 볼 수 있는지는 잘 모르겠다.
이후 본인은 임의의 테스트 인스턴스를 생성한 뒤에 팀원 분들께 IAM 계정을 공유드리면서, 해당 인스턴스가 잘 실행되는지 여부를 확인해달라 부탁드리면서 이 과정을 마쳤다. (늦은 시간에 귀찮고 피곤하실텐데,,, 감사 ㅠㅠ)
이후 본인은 S3를 맡았었기에, 빌드와 S3 정적 파일 업로드까지 포스팅하고 싶지만,,,, 이번 프로젝트에서 배우고 생각한 점들이 많아 과연 이 부분까지 정리할 수 있을지는 잘 모르겠다...ㅎㅎ
'빌드·배포 > AWS' 카테고리의 다른 글
AWS(아마존 웹 서비스) (0) | 2023.03.31 |
---|