Eks Config
고객사 시스템 구축
- 협업해서 개발하고 프로젝트님은 빠지고 데브옵스팀은 남는다
- 메일 형식으로
- CC는 누구까지 달아야 할까
- 주간업무 수준
클라우드 환경 구성
- 쿠버네티스 기반의 Elastic Kubernetes Service를 운영하기 전, AWS 클라우드 환경을 구축합니다.
- 하나의 VPC에 이중화된 subnet을 구성한 후 Bastion host를 생성합니다.
- AWS IAM 계정 생성과 MFA 설정
- VPC 구축
- Bastion host와 NAT instance 생성과 security group 설정
AWS IAM User 생성과 MFA 설정
IAM User 생성
- Identify and Access Management - 권한부여 설정
- 루트 사용자가 IAM 사용자 생성, 권한 설정
- AWS 액세스 유형 선택
- AWS Management Console 액세스 선택 체크
- 권한 설정
- 그룹 생성
- AdminstratorAccess 선택
- 그룹 생성
멀티 팩터 인증(MFA) 사용하기
- Multi-Factor Authentication - 비번 이외 보안을 강화할 다른 수단(예: OTP와 비슷한 Google Authenticator 등)
- MFA 관리
- 멀티팩터 인증(MFA)
- 가상 MFA 디바이스
- 스마트폰에서 Google OTP 앱 다운로드 후 QR코드 스캔
- MFA 코드 2개가 몇 초 간격 제시됨
- 멀티팩터 인증(MFA)
VPC 구축
- VPC CIDR: 10.0.0.0/16
- Subnet
public subnet A 10.0.0.0/24
public subnet B 10.0.1.0/24
private subnet A 10.0.2.0/24
private subnet B 10.0.3.0/24
- AWS VPC(Virtual Private Cloud)
- AWS 계정 전용 가상 네트워크(논리적으로 격리된 공간을 프로비저닝)
- VPC를 만들고 가용 영역에 서브넷 추가 가능
- VPC IPv4 주소의 범위를 CIDR(Classless Inter-Domain Routing) 블록 형태로 지정(예: 10.0.0.0/16)
- 사설망 대역 : 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
- CIDR 블록 - IP 범위를 지정하는 방식(VPC 내 자원들은 VPC의 CIDR 범위 내에서 ip를 할당받음)
- 라우터 테이블의 기본 규칙이 VPC CIDR 블록에서 찾기 때문에 사설망이 아닌 CIDR을 사용하면 인터넷과 연결돼 라우트 규칙을 정의하더라도 통신 불가
- 각 서브넷은 단일 가용 영역 내 존재해서 다른 가용 영역 장애 격리 가능
- VPC IPv4 주소의 범위를 CIDR(Classless Inter-Domain Routing) 블록 형태로 지정(예: 10.0.0.0/16)
- Public Subnet & Private Subnet
- 퍼블릭 - Nat 인스턴스를 통해 Private Subnet의 인스턴스가 인터넷 가능하도록 만듦
- 프라이빗 - 외부와 차단 인터넷 inbound/outbound 불가능, 다른 서브넷과 연결만 가능
subnet 생성
- VPC를 CIDR 블록을 가지는 단위로 나누어 더 많은 네트워크 망을 만들 수 있음
- 실제 리소스가 생성되는 물리적인 공간
- VPC CIDR 블록 범위 안에서 지정 가능
- 인터넷과 연결되면 Public subnet 아니면 Private subnet
- 멀티 AZ 사용 이유
- 멀티AZ란 하나 이상의 Availability Zone에 유사한 리소스를 동시에 배치하는 기능. AZ는 물리적 공간으로 분리돼 있기 때문에 이중화 구성해 하나의 AZ에 장애가 발생하더라도 서비스에 문제 없으면 추가비용도 없음
- subnet 생성
- Subnet과 가용존
- Public subnet A : 10.0.0.0/24
- ap-northeast-2a
- Public subnet B : 10.0.1.0/24
- ap-northeast-2c
- Private subnet A : 10.0.2.0/24
- ap-northeast-2a
- Private subnet B : 10.0.3.0/24
- ap-northeast-2c
- Public subnet A : 10.0.0.0/24
- Subnet과 가용존
- VPC : 앞에서 만든 VPC 사용
Route Table
- Route Table
- Router - 목적지
- Route Table - 목적지의 이정표
- 데이터 요청 -> 라우터 -> 라우트 테이블에서 정의한 범위 내에서 목적지 찾음
- External-rt : Public subnet의 라우트 테이블
- Internal-rt : Private subnet의 라우트 테이블
- Route Table - Public subnet의 Route Table
- 라우팅 테이블 생성
- 이름: External-rt
- VPC : 앞에서 만든 VPC 사용
- 서브넷연결 : Public subnet A, B 추가
- Route Table - Private subnet의 Route Table
- 라우팅 테이블 생성
- 이름: Internal-rt
- VPC : 앞에서 만든 VPC 사용
- 서브넷연결 : Private subnet A, B 추가
Internet Gateway
- VPC는 격리된 네트워크 환경이기 때문에 VPC에서 생성된 리소스들은 인터넷 사용 불가
- VPC와 인터넷을 연결해주는 관문
- 목적지의 주소가 10.0.0.0/16에 매칭되는지 확인 후 없으면 인터넷 게이트웨이로 보냄
- 인터넷 게이트웨이 생성
- VPC에 연결 - 앞에서 만든 VPC 사용
- Route Table(External-rt)에 인터넷 게이트웨이 추가
- 대상: 0.0.0.0/0, 생성한 인터넷 게이트웨이
Nat Gateway
- Private Subnet이 인터넷과 통신하기 위한 아웃바운드 인스턴스
- Private Subnet은 외부에서 요청하는 인바운드는 차단하더라도 아웃바운드 트래픽 허용 필요- Private Subnet에서 외부로 요청하는 아웃바운드 트래픽을 받아 Internet Gateway와 연결
Bastion host와 NAT instance 생성
- Bastion Host
- 내부와 외부 네트워크 사이에서 게이트 역할을 하는 Host
- 외부에서 접근 가능하도록 Public IP 부여
- NAT instance
- NAT Gateway 유료(1시간 0.059$ -> 1달 43.896$)이므로 Nat Instance로 대체
- 비용문제로 Nat instance를 Bastion Host로 사용
- VPC 퍼블릭 서브넷에 있는 네트워크 주소 변환(NAT) 인스턴스를 사용
- 프라이빗 서브넷의 인스턴스가 인터넷 가능
- NAT는 IPv6 트래픽 지원 불가(외부 전용 인터넷 게이트웨이 사용)
- EC2 - 인스턴스 시작 - 커뮤니티 AMI 탭- nat 검색
- 커뮤니티 AMI는 AWS 개발자 커뮤니티 회원 업로드(무료)
- 마켓플레이스는 유료
Nat 인스턴스 생성
- AMI 선택 > 커뮤니티 AMI > NAT 검색(맨 위의 AMI 사용)
- AMI : amzn-ami-vpc-nat-hvm-2017.09.1-testlongids.20180307-x86_64-ebs - ami-0185fd13b4270de70
- 인스턴스 타입 : t2.micro(free-tier)
- 네트워크 : mission-vpc
- 서브넷 : mission-public-subnet
- 두 번쨰 페이지
- 스토리지 추가 : 8GB, gp2
- 태그 : 미설정
- 보안 그룹 :
-
유형 프로토콜 포트범위 소스 -
SSH TCP 22 MyIP -
All Traffic ALL 0-65535 VPC CIDR - 검토 및 시작
- 키 페어 선택 > 인스턴스 시작
- My IP에 고정 아이피 할당
- VPC의 Route Table(Internal-rt)에 추가
- 대상 0.0.0.0/0, Nat instance
- 네트워킹 > 소스/대상 확인 변경
OS 계정 생성과 비밀번호 로그인 허용
- 보안상 운영 서버에서 ec2-user 사용 금지
- 개인 계정 ex)admin을 생성한 후 비밀번호를 설정하여 로그인할 때 id와 pw를 통해 접속 (1인 1계정 사용 이유: log가 남기 때문에 장애 발생시 책임의 소재를 명확히 할 수 있다.)
- ssh 접속시 비밀번호 로그인 허용 설정
# ec2 접속
$ ssh -i keyname ec2-user@탄력IP주소
# 루트로 계정 변경
$ sudo -i
# 계정 생성
$ useradd admin
# 비밀번호 입력
$ passwd admin
# 생성된 계정 확인
$ cat /etc/passwd
- sudo 권한 부여
# 루트로 계정 변경
$ sudo -i
# ec2-user와 동일한 권한 부여
$ vi /etc/sudoers.d/cloud-init
# 파일 저장
$ admin ALL=(ALL) NOPASSWD:ALL
- 비밀번호 로그인 설정
- 키 방식 로그인 차단, 비밀번호 로그인 허용
# 루트로 계정 변경
$ vi /etc/ssh/sshd_config
PasswordAuthentication yes # 이 부분 주석 해제
# PasswordAuthentication no # 이 부분 주석 설정
# sshd 데몬 재시작
$ service sshd restart