FTP 서버는 액티브 모드와 패시브 모드를 지원합니다. 패시브 모드는 클라이언트가 서버에 연결할 때 방화벽 및 NAT(Network Address Translation) 환경에서의 문제를 줄이기 위해 사용됩니다. 이 블로그 포스트에서는 패시브 모드를 설정하고, 일반적인 문제를 해결하는 방법을 안내합니다.
패시브 모드란?
패시브 모드는 클라이언트가 서버에 연결할 때, 서버가 클라이언트에게 데이터 전송을 위한 포트 정보를 제공하는 방식입니다. 액티브 모드와 달리, 패시브 모드에서는 클라이언트가 데이터 연결을 설정하므로 방화벽과 NAT 환경에서의 문제를 줄일 수 있습니다.
패시브 모드 설정 방법
1. vsftpd.conf 파일 설정
패시브 모드를 활성화하려면 /etc/vsftpd/vsftpd.conf 파일에서 적절한 설정을 추가해야 합니다.
패시브 모드 활성화
패시브 모드를 활성화하려면 다음 설정을 추가합니다:
pasv_enable=YES
포트 범위 지정
패시브 모드에서는 서버가 클라이언트에 사용할 포트 범위를 알려줘야 합니다. 다음 설정을 통해 포트 범위를 지정합니다:
pasv_min_port=12000
pasv_max_port=12100
EC2 인스턴스에서 포트 방화벽 설정
AWS EC2에서는 보안 그룹(Security Groups)과 네트워크 ACLs(Network Access Control Lists)를 사용하여 인스턴스의 네트워크 트래픽을 제어합니다. 패시브 모드 포트를 열어주려면 다음 단계를 따르세요.
FTP 서버를 설정할 때, 여러 가지 문제에 직면할 수 있습니다. 특히 포트 21번과 22번에서의 디렉토리 접근 문제는 자주 발생하는 이슈 중 하나입니다. 이 포스트에서는 포트 21번에서 디렉토리 접근이 제대로 되지 않는 문제를 해결하기 위한 단계별 가이드를 제공합니다.
문제 설명
FTP 서버를 설정한 후, 포트 22번에서는 홈 디렉토리 접근이 잘 되지만 포트 21번에서는 디렉토리 접근이 제대로 되지 않는 경우가 있습니다. 특히, uploaduser라는 계정의 홈 디렉토리가 기본 디렉토리가 아닌 /home/upload로 설정된 경우, 포트 22번에서는 정상적으로 접근되지만, 포트 21번에서는 루트 디렉토리(/)만 보이는 문제가 발생할 수 있습니다.
문제 원인
포트 21번의 문제는 chroot 설정과 관련이 있습니다. chroot는 사용자가 자신의 홈 디렉토리 외부로 접근하지 못하도록 제한하는 기능입니다. chroot가 적용되면, 사용자는 홈 디렉토리의 루트(/)를 볼 수 있게 됩니다.
문제 해결 방법
1. vsftpd.conf 파일 수정
chroot_local_user 설정 확인: vsftpd.conf 파일에서 chroot_local_user와 관련된 설정을 확인합니다.
sudo vi /etc/vsftpd/vsftpd.conf
chroot_local_user=YES가 설정되어 있으면, 모든 로컬 사용자가 자신의 홈 디렉토리로 제한됩니다.
allow_writeable_chroot=YES는 홈 디렉토리에서 쓰기 권한을 허용합니다.
chroot_local_user=YES
allow_writeable_chroot=YES
특정 사용자에 대한 예외 설정: rankingfiles와 같은 특정 사용자에게 예외를 설정할 수 있습니다.
Dockerfile을 작성할 때 Amazon Linux 2 이미지를 사용하려면, 보통 Docker Hub에서 다음과 같은 명령어를 사용해 가져옵니다:
FROM amazonlinux:2
이 명령어는 Docker Hub에서 Amazon Linux 2 이미지를 다운로드합니다. 하지만 이미지 요청 수 제한으로 인해 에러가 발생할 수 있습니다.
요청 수 제한 문제
Docker Hub는 익명 사용자와 무료 계정 사용자의 이미지 풀 요청 수에 제한을 두고 있습니다. 이에 따라 다음과 같은 에러 메시지를 볼 수 있습니다:
toomanyrequests: too many requests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit
익명 사용자는 6시간 동안 100개의 요청 제한, 무료 계정 사용자는 6시간 동안 200개의 요청 제한을 받습니다.
해결 방법: AWS ECR Public Gallery 사용
이 문제를 해결하는 한 가지 방법은 Docker Hub 대신 AWS ECR Public Gallery에서 이미지를 가져오는 것입니다. AWS ECR은 이미지에 대한 요청 제한이 없으며, 특히 Amazon Linux 이미지를 제공하는 신뢰할 수 있는 리포지토리입니다. 다음과 같이 Dockerfile을 수정하여 AWS ECR에서 이미지를 가져올 수 있습니다:
Elastic Beanstalk은 AWS에서 제공하는 관리형 서비스로, 웹 애플리케이션과 서비스를 쉽게 배포하고 관리할 수 있게 해줍니다. 개발자는 인프라 관리에 신경 쓰지 않고 코드를 업로드하기만 하면, Elastic Beanstalk이 자동으로 인프라를 프로비저닝하고 애플리케이션을 배포해줍니다.
IAM 역할과 정책의 중요성
Elastic Beanstalk은 다양한 AWS 서비스와 상호작용하기 때문에, 필요한 권한을 관리하기 위해 IAM(Identity and Access Management) 역할과 정책이 중요합니다. 올바른 IAM 역할과 정책을 설정하면 애플리케이션이 안전하게 운영되며, 불필요한 권한으로 인한 보안 리스크를 줄일 수 있습니다.
1. Elastic Beanstalk을 위한 IAM 역할 및 정책 이해
IAM 역할(Role)과 정책(Policy) 개요
IAM 역할(Role)은 특정 AWS 리소스에 접근할 수 있는 권한을 가진 엔터티입니다. 사용자는 역할을 통해 AWS 서비스와 상호작용할 수 있으며, 역할에는 정책(Policy)이 연결되어 있어, 허용된 액션과 리소스를 정의합니다.
Elastic Beanstalk에서의 IAM 역할 사용 사례
Elastic Beanstalk에서 IAM 역할은 애플리케이션이 다른 AWS 서비스 (예: S3, DynamoDB, RDS)와 상호작용할 수 있도록 하는 중요한 구성 요소입니다. 예를 들어, 애플리케이션이 S3에서 파일을 읽거나 쓰기 위해서는 적절한 권한이 있는 IAM 역할이 필요합니다.
2. Elastic Beanstalk을 위한 IAM 역할 생성
필요한 권한 식별
Elastic Beanstalk에는 기본적으로 EC2 인스턴스, Auto Scaling, Load Balancer 등의 서비스에 대한 권한이 필요합니다. 하지만, 애플리케이션에 따라 추가적으로 S3, CloudWatch, RDS 등 다른 AWS 서비스에 접근해야 할 수도 있습니다.
IAM 역할 생성 단계별 가이드
서비스 정책 생성 : 아래 JSON을 복사하여 " AWSElasticBeanstalkService" 이름으로 IAM 정책을 생성합니다.
설명: 이 섹션은 Elastic Beanstalk 환경에서 애플리케이션을 운영하는 데 필요한 다양한 AWS 서비스에 대한 권한을 광범위하게 허용합니다.
주요 권한: Auto Scaling, EC2, ECS, Elastic Beanstalk, ELB, IAM, CloudWatch, RDS, S3, SNS, SQS, CodeBuild 등 여러 서비스에 대한 권한.
적용 대상 리소스: 모든 리소스(*).
이 정책은 Elastic Beanstalk 환경에서의 인프라와 애플리케이션 관리를 위한 매우 광범위한 권한을 포함하고 있으며, Elastic Beanstalk에 필요한 거의 모든 작업을 수행할 수 있도록 설계되었습니다. 각 권한은 특정 리소스에 제한을 두거나 특정 조건 하에서만 허용되도록 구성되어 있어, 보안성을 유지하면서도 필요한 작업을 수행할 수 있게 합니다.
서비스 역할 생성:"aws-elasticbeanstalk-service-role" 이름으로 elastic beanstalk 역할 생성
AWSElasticBeanstalkService 정책에aws-elasticbeanstalk-service-role역할 연결