Ubuntu에서 S3로의 접근

Hi·2024년 1월 8일
0

전시로그

목록 보기
3/4

우리 프로젝트에서는 이미지 파일을 다루기 위해 AWS의 S3를 사용하기로 했다.

전시회 이미지 포스터, 포토 캘린더에 저장한 이미지, 유저의 프로필 이미지를 S3에 저장하여 관리했다.

배포 환경에서 S3를 사용하는 과정에 대한 이야기이다.


로컬에서?

개발을 하며 당연히 로컬에서 먼저 테스트를 했다.
S3로의 이미지 업로드가 잘되었기에..
우리는 배포를 하고 역시나 다시 테스트를 했다.
안된다.
여태까지 배포를 하며 문제는 없었기에.. 안심했었지만, 연말에 위기가 찾아 온 것이다.




Ubuntu ufw

분명 EC2의 인바운드 규칙을 잘 설정해놨는데도 permission denied 에러가 발생했다.
어쨌든 이를 토대로 찾아봤다.


다음과 같은 내용이 있었다

A. 보안 그룹의 인바운드 규칙으로 허용 포트를 지정했음에도 불구하고 EC2 인스턴스 내에서 별도의 포트 번호 과정을 가져야 하는 이유는 크게 두 가지로 나눠볼 수 있다.

① 보안 그룹은 AWS 네트워크 수준에서 작동하는 가상 방화벽이며, EC2 인스턴스 내부에 있는 실제 응용 프로그램 또는 OS 수준의 방화벽은 관리하지 않는다.
따라서 EC2 인스턴스 내부에서 특정 포트나 서비스를 사용하려면 해당 포트를 개방하고 응용 프로그램이나 서비스를 설정해야 한다. 보안 그룹보다는 인스턴스 내의 소프트웨어 설정과 관련된 부분인 것이다.

② EC2 인스턴스 내부에는 로컬 방화벽이 존재할 수 있다. 로컬 방화벽은 트래픽을 제어하고 특정 포트를 차단하거나 허용하기 위해 사용된다. 보안 그룹의 규칙과 로컬 방화벽 설정이 충돌할 수 있으므로, EC2 인스턴스 내의 로컬 방화벽 설정을 확인하여 포트가 제대로 열려 있는지 확인할 필요가 있다.

보안 그룹은 AWS의 네트워크 계층에서 작동하며 트래픽을 제어하는 역할을 하지만, EC2 인스턴스 내부의 실제 응용 프로그램 또는 방화벽 설정은 개별적으로 관리되어야 한다.


오키 인바운드 규칙 이외에도 로컬(여기선 배포 환경) 방화벽이 필요하다는 것이구나
Ubuntu의 방화벽인 UFW를 사용하기로 했다.

sudo apt update
sudo apt install ufw
sudo ufw allow 443
sudo ufw enable

위와 같은 명령어를 실행했더니..

API 호출에서 Timeout 에러가 발생하고,
EC2로의 접속이 안된다..!

아.. 가끔 이럴 때가 있지.. AWS는 접속이 잘 안되는 시간이 있다고 듣기도 한 것 같고.. 다른 날보다 EC2를 많이 건드린 날이기도 헀기에 조금 기다려보기로 했다.


UFW와 SSH

몇 시간 후에 다시 시도했는데, 역시나 실패했다.
위기임을 느끼고 급히 서치를 해보았다.

결론은 방화벽을 설치하고, SSH를 열어두지 않아서 접속이 되지 않는 것이었다.
위의 UFW 명령어를 살펴보면 443(s3를 위한)만을 열어두고 실행했다.
따라서 ssh로 ec2에 접속할 수 없던 것이었다...

해결

아니 근데.. 일단 접속을 해야 명령어로 ssh를 열든, ufw를 끄든 할 텐데.. 접속이 안되니 참 난감했다.

방법은 두 가지가 있었다

  1. 새로운 인스턴스 생성 후 볼륨 분리를 통한 이동

    • 딱봐도 까딱하면 모든 것이 날아갈 것 같아서 다른 방법을 간절히 모색했다.
  2. 사용자 데이터 편집

    • 이거다!

EC2에서 사용자 데이터 편집이라는 곳으로 이동하자

이렇게 직접 넣어줄 수 있는데,
ufw disable을 넣어, ufw를 비활성화 하였다.

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
ufw disable
iptables -L
iptables -F
--//

내가 넣어준 데이터이다..




방화벽 껐는데 왜 될까?

S3는 443(https)을 사용한다고 한다.
방화벽으로 443 allow를 하고, disable로 껐는데 왜 될까?

알아본 바로는 처음에는 443이 막혀있었기에 접근이 안됐고, ufw로 443을 열어둔 후에 방화벽을 비활성화만 시킨 것이므로 443이 열린 채 방화벽이 꺼진 것이다.

이렇게 문제 해결 완료..




찝찝함..

위의 방법은 SSH를 안열고 ufw를 enable 했을 때, ec2에 접근하는 용도로만 사용하자.
접근했다면, ufw에서 필요한 포트(443, 22 등..)을 열어주고, 다시 사용자 데이터 편집에 넣은 데이터들은 빼주어서 사용하는게 좋겠다.

왜냐하면.. 배포할 때마다 permission denied가 발생하는 것을 확인했고, 그럴 때마다 사용자 데이터 편집에 넣은 데이터들을 다시 똑같이 넣어서 해결했는데, 이는 일시적인 해결일 뿐이라는 생각이 들었다.
영구적으로 해결하기 위해서는 방화벽 설정을 올바르게 해주자.

0개의 댓글

관련 채용 정보