개요
- 기존 IDC 에서 SFTP 서버를 운용하고 있었는데, 클라우드로 넘어오면서 안정적이고 클라우드환경에 적합한 SFTP 환경 구성을 위해 작업을 한 내용을 포스팅 하였다.
Architecture
제약 사항
- 해당 아키텍처는 내부망에서만 사용이 가능하도록 구현이 되었다. (Client 와 VPC 가 DX를 통해 연결된 상태)
- Secrets Manager 의 경우 Cloudformation 을 사용하지 않았다.
- API Gateway 의 경우 Private 하게 생성하지 못하였다.
- 사용한 템플릿 : AWS Secrets Manager 스택 템플릿 <- 해당 템플릿을 수정하여 구성
- AWS 에 문의를 하니 아래와 같은 답변을 받았다. "currently it is not possible to use a private API Gateway for authentication. Since DNS/HTTP traffic to API Gateway endpoints are initiated by Transfer service, if your API Gateway is created as a private endpoint, the AWS Transfer service will not be able to reach the API gateway"
- 관련 내용 : Amazon API Gateway를 ID 제공자 통합에 사용
순서
- 클라이언트가 SFTP 전송을 시작한다.
- 사용자 지정 자격 증명 공급자를 사용하도록 구성된 SFTP용 AWS Transfer Family 는 AWS API 게이트웨이에 요청을 보낸다.
- AWS API Gateway는 사용자 지정 AWS Lambda 함수를 호출한다.
- AWS Lambda는 AWS Secrets Manager에 대한 인증 정보를 확인한다.
- 인증 정보가 올바른 경우 지정된 S3 에서 파일에 접근한다.
먼저, Cloudformation 의 경우 코드가 길어 가독성이 떨어지기에 따로 Github 에 추가를 하였고, 수동으로 바꿔야 할 내용들이 있다.
65, 71, 75, 77, 122, 124, 125, 413, 414 Line 에서 자신의 환경에 맞게 수정을 하면 될 것이다. 나머지는 코드 정독 후 커스텀하게 수정하여 사용하자!
Secrets Manager
{"Password":"test123!@#","Role":"arn:aws:iam::<Account>:role/TransferS3Role","HomeDirectory":"/<S3_Name>/test"}
먼저 새 보안 암호를 생성하며, 유형은 다른 유형의 보안 암호, 키/값 페어에는 위와 같이 Json 형식으로 작성 후 저장을 하자.
또한, 보안 암호 이름에는 SFTP/ 가 무조건 있어야 하며, 해당 이름이 SFTP ID 가 될 것이다.
S3
테스트를 위해 생성한 S3 의 test 경로에는 PNG 파일을 업로드 하였고, EC2 에서 SFTP 접근하여 확인할 파일이다.
결과
서버에서 EC2 접속 후 아래와 같은 명령어를 통해 정상적으로 접근이 되는 것으로 확인을 하였으며, Secrets Manager 에서 지정된 Role 을 통해 S3 에 접근하여 파일도 확인을 하였다.
sftp user_Name@Endpoint or IP
Transfer Family 엔드포인트와 IP는 VPC 엔드포인트에서 확인을 하거나 생성된 Transfer Family 에서 확인이 가능하다.