[ AWS ] 보안그룹-인바운드 규칙 편집, 개별 인스턴스 설정
인바운드 규칙 설정한 것들 다 SSH 22번 포트를 열어주었다. (세팅 용으로 각 인스턴스에 접근하기 위함)
22번 열고 접속한 다음 각 우분투 상에서 다른 포트 번호를 사용하도록 변경해주면 된다.
그런 다음 다시 보안 그룹 가서 열어준 SSH 20번 포트를 인바운드 규칙에서 지워주면
임의로 설정한 51228 포트로 SSH 연결 접속하게 된다.
Ubuntu SSH 포트 변경 방법 (링크)
어제 한 것들 : 서브넷 등 구조 설정, 보안 그룹 설정
오늘 할 것 : Public, Private 서브넷에 있는 인스턴스들 설정
인스턴스 설정
Public 서브넷 안의 인스턴스는 마찬가지로 Public이며, 인터넷 게이트웨이를 통해 외부 이용자가 접속 가능하도록 허용한다.
우선적으로는 우분투 셋팅을 위해 포트번호 22를 열어주었는데, 인스턴스 접속 후 22를 51228로 변경해주어야 보안상으로 이점이 있다.
ssh -i "KDT_Project2.pem" ubuntu@3.34.143.6
접속은 인스턴스 클릭-작업(연결)클릭 하면 접속을 위한 SSH 연결 구문을 확인할 수 있다.
혹시 모르니 update 한 번 해주고 SSH 포트 설정을 해주자.
직접 실험해보기 귀찮아서 GPT 한테 물어보니 복제해도 별 문제가 없다고는 한다.
혹시 모르니 가용영역 A, B의 퍼블릭에만 개별 설정 해주고 나머지 Private 인스턴스들은 하나 설정하고 복제해서 사용했다.
설정을 위해서 각 인스턴스들로 접속해줘야 하는데, Private 인스턴스들은 외부 접속 가능한 Public IP가 없으므로
Public 인스턴스로 SSH 접속해서 설정해줬다. 어짜피 복제할거니까 하나만 접속해줘도 된다.
키 파일도 옮겨야하는데 그냥 .pem파일 내용 복사해서 nano로 만들어줬다.
접속하려고 하면 too open이라고 하는데 chmod로 400권한을 부여해주거나 아님 그냥 내부 IP로 진입해도 된다
(생각해보니까 내부 IP 진입이 걍 여러모로 편할듯.. 왜그랬지)
요약하자면,
1. AWS에서 생성한 키 페어의 내용을 메모장으로 열고,
접속하고자 하는 가용 영역의 Public 인스턴스에 해당 .pem 파일의 내용을 nano(혹은 vi) 에디터로 생성해준다.
2. `chmod 400 "키 페어 이름.pem"`으로 권한을 수정해준다.
3. ssh 클라이언트 연결 구문(예시 : ssh -i "키페어명.pem" ubuntu@아이피주소)을 이용하여 SSH 접속한다.
Public 인스턴스 설정
# Jenkins를 한꺼번에 설치해주는 쉘스트립트 파일
nano install_docker_jenkins.sh
## 쉘스크립트 파일 입력 내용
#!/bin/bash
# 도커 설치
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 자바 설치
sudo apt update
sudo apt install -y openjdk-17-jdk
# 젠킨스 설치
sudo apt update
# Jenkins 공식 키 가져오기
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
# Jenkins 레포지토리 추가
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt update
sudo apt install -y jenkins
# Jenkins 서비스를 시작하고 부팅 시 자동으로 시작하도록 설정
sudo systemctl start jenkins
sudo systemctl enable jenkins
echo "Docker와 Jenkins 설치가 완료되었습니다."
## 파일 설정 후 권한 처리
chmod +x install_docker_jenkins.sh
## 실행
./install_docker_jenkins.sh
팀원이 쉘스크립트로 자동 설치되도록 만들어주었다 짱..
sudo apt update
sudo apt install openjdk-17-jdk
# 혹시 모르니 한번 더
sudo apt update
헉근데 생각해보니까 다른 인스턴스에는 젠킨스까지 설치할 필요 없으니까 따로 설치해줘야한다 (귀찮다 ... ..)
인스턴스들의 SSH 포트 수정
SSH의 Well-known 포트는 22번인데, 이를 그대로 사용하면 위 영상처럼 여러 보안상의 문제가 생길 수 있으므로 바꿔주자.
과정은 다음과 같다 :
1. SSH 설정 파일을 에디터로 열어준다 (vi, nano, vim 상관X)
2. `port 포트번호`를 입력해준다.
3. SSH 서비스를 재실행해준다.
4. ssh 사용자명@서버주소 -p 포트번호 로 접속해준다. (키 파일 필요할 경우 AWS-연결 탭에서 확인 가능)
순서대로 따라해보자
원래 강경 vi파 였었는데 요즘 nano가 너무너무너무 편해서 요즘엔 nano 쓴다.....
sudo nano /etc/ssh/sshd_config
port 51228 # 22를 51228로 변경했다
sudo systemctl restart ssh
# 외부 터미널 창(ex: Windows PowerShell)에서
ssh -i "키페어.pem" -p 포트번호 사용자명@IP주소
동일한 포트번호에 IP주소를 두 개 설정해줬는데, 이러면 Connetction Time out 접속 오류가 뜨는 것 같다 . .
그래서 그냥 51228의 소스를 any(0.0.0.0/0)으로 바꿔줬다. . . 나중에 세팅 다 하고 데탑 IP로 변경하는 걸로
(Elastic IP가 변경되는데 그거 확인 안 하고 구 IP로 접속해서 그랬던 것 같다)
앞선 설정에서 부여한 Elastic IP는 프라이빗 서버넷의 인스턴스들이 인터넷에 접근하기 위해 사용되는 NAT 게이트웨이에 할당됨
타임아웃 오류는 22를 닫은 상태에서 접속하려고 해서 그랬고(왜그랫지?,,)
22로 접속한 다음 내부에서 51228포트를 열고 보안그룹에서 22를 지워주면 된다
변경해준 다음에는 다시 AWS의 보안그룹으로 돌아가서 인바운드 규칙에 있는 Port 22를 제거해주자
인스턴스 중지 - 보안 그룹 변경(SSH 22 제거) - 인스턴스 시작 후 powershell로 재접속
그리고 private의 보안 그룹 설정에서는 본인 컴퓨터/노트북의 IP를 적는 게 아니라
예시를 들면 가용영역A의 퍼블릭 인스턴스로 접속하는 것이기 때문에 source에다가 퍼블릭 인스턴스의 private IP를 적어주면 무사히 접속 된다
(이것 때문에 왜 접속 안 되는지 계속 고민함.....으휴)
나는 SSH 접속 포트(51228)의 소스를 내 데스크탑의 IP로 설정해두고 원격접속해서 이용하고 있었는데,
현재는 와이파이가 연결된 노트북으로 하고 있어서 소스를 추가해주었다.
자신의 IP 주소를 확인하는 방법은 여러가지가 있는데 그냥 이 사이트(findIP.kr)에 들어가서 확인하면 편하다.
이제부터는 각 인스턴스에 접속하려면 `ssh -i "키 페어명.pem" -p 포트번호 계정명@퍼블릭 IP주소`로 Port 번호 옵션을 주어 접속해야 한다.
이렇게 해서 로그인하면 `ubuntu@ip-주소`로 표시되는데, 나중가면 퍼블릭 인스턴스만 쓸 거라 상관없지만
프라이빗들도 설정해줄때 다 비슷비슷해서 좀 화난다
추가 : 웹 애플리케이션이 작동하고 있는 인스턴스는 80도 열 필요는 없고 8080만 열어주면 된다고 한다.
웹 애플리케이션 : 8080, SSH / 웹 페이지 접속하는 인스턴스에서는 80(HTTP), SSH
호스트 네임을 변경해주자 ◠ ◠
# 호스트명 확인 : ubuntu@호스트네임
hostname
# 호스트명 변경
sudo hostnamectl set-hostname 변경하고 싶은 내용
# 호스트명이 시스템 재부팅 후에도 유지되도록 /etc/hosts 파일 수정
sudo nano /etc/hosts
# 127.0.0.1 hostname으로 되어있을텐데, 이를 원하는 이름으로 수정해주자.
127.0.0.1 원하는 이름
ubuntu 상에서 exit로 나갔다가 재접속해보면 성공정으로 호스트명이 바뀌어있다.
가용영역 A, B의 Jenkins 설정
이제 가용영역 A, B의 Public Subnet에 위치한 Public 인스턴스들의 `공개IP:8080`으로 접속하면 젠킨스 화면이 나온다.
Administrator password를 입력해줘야 하는데, `cat /var/lib/jenkins/secrets/initialAdminPassword`로 확인할 수 있다.
왼쪽의 Install suggested plugins로 설치해주자.
이후 프라이빗과 연결 가능한 SSH를 만들어주어야 한다.
흠.. 근데 젠킨스 두 개를 한번에 관리할 인스턴스가 있어야하지 않나?
지피티한테 물어보니까 1개씩 해도 되고 둘다 관리하도록 해도 되는데 각자 장단점이 있음(그야그렇겠지..)
근데 새로 하나 만들기 귀찮으니까 그냥 이대로 하자...
이후의 설정은 저번에 써 뒀던 이 글 따라 진행함.
# SSH 키 발급
ssh-keygen -t rsa -f ~/.ssh/id_rsa
# 해당 위치에서 개인키, 공개키를 확인 가능
cat /home/ubuntu/.ssh/id_rsa
cat /home/ubuntu/.ssh/id_rsa.pub
# Jenkins의 관리-Plugins-Available plugins에서 publish over SSH 설치
# worker 인스턴스에 퍼블릭 인스턴스의 공개key 저장하기
nano ~/.ssh/authorized_keys
# 권한 적절히 수정
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# worker 연결 위해 Jenkins관리-System 이동 후 Key와 worker들 추가
젠킨스를 worker랑 연결할 떄 고급 버튼 열어서 포트 22로 되어있던거 임의로 설정한 51228로 변경해주기 !
아래 Use password authentication, or use a different Key를 꼭 체크해주고, Key 부분에 AWS에서 발행한 키 페어를 집어넣는다.
인스턴스 추가 생성
이제 AWS에서 worker인스턴스를 이미지화해서 DB 인스턴스, 다른 가용 영역에도 만들어보자.
Jenkins를 통한 Build
아무생각없이 Jenkins에서 빌드 했는데 접속 안되어서 뭐지?! 했더니만
알고보니 Nginx를 설치 안했음 ㄱ-
# 필요한 패키지 설치
sudo apt-get update
sudo apt-get install -y curl gnupg2 ca-certificates lsb-release
# ubuntu-keyring 패키지 설치
sudo apt-get install -y ubuntu-keyring
# nginx.list 파일 생성 : 공식 저장소에서 서명 키 가져오기
curl -s https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# 다운로드한 키가 올바른지 확인
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
# 저장소 설정 (Stable version)
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu lsb_release -cs nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
# 저장소 업데이트
sudo apt-get update
# nginx 설치
sudo apt-get install -y nginx
# nginx 버전 확인
nginx -v
# nginx 가동 시작
sudo systemctl start nginx
업데이트 한 번 해주고 nginx 설치해주자.
앞서 작성했던 글의 Nginx 설치하기 부분 참고하면 된다.