AWS Transfer Family를 이용한 S3 SFTP 사용 (with Cloudformation)

신동수·2024년 6월 14일
0

AWS

목록 보기
15/26

개요

  • 기존 IDC 에서 SFTP 서버를 운용하고 있었는데, 클라우드로 넘어오면서 안정적이고 클라우드환경에 적합한 SFTP 환경 구성을 위해 작업을 한 내용을 포스팅 하였다.

Architecture

제약 사항

  1. 해당 아키텍처는 내부망에서만 사용이 가능하도록 구현이 되었다. (Client 와 VPC 가 DX를 통해 연결된 상태)
  2. Secrets Manager 의 경우 Cloudformation 을 사용하지 않았다.
  3. 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 제공자 통합에 사용

순서

  1. 클라이언트가 SFTP 전송을 시작한다.
  2. 사용자 지정 자격 증명 공급자를 사용하도록 구성된 SFTP용 AWS Transfer Family 는 AWS API 게이트웨이에 요청을 보낸다.
  3. AWS API Gateway는 사용자 지정 AWS Lambda 함수를 호출한다.
  4. AWS Lambda는 AWS Secrets Manager에 대한 인증 정보를 확인한다.
  5. 인증 정보가 올바른 경우 지정된 S3 에서 파일에 접근한다.

Cloudformation

먼저, 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 에서 확인이 가능하다.

profile
조금씩 성장하는 DevOps 엔지니어가 되겠습니다. 😄

0개의 댓글