Amazon S3 버킷에 대한 FTP / SFTP 액세스


146

AWS 콘솔의 내장 Amazon 파일 전송 인터페이스가 아닌 FTP 또는 SFTP를 사용하여 Amazon S3 버킷에 연결하는 방법이 있습니까? 이것이 쉽게 사용할 수있는 옵션이 아닌 것 같습니다.


2
2018 년 11 월에 릴리스 된 AWS 는 파일을 Amazon S3 안팎으로 직접 전송할 수있는 SFTP 서비스를 완전히 관리했습니다. SFTP 용 AWS 전송
mitaka

답변:


100

세 가지 옵션이 있습니다.

  • Amazon에서 최근에 추가 한 기본 관리 SFTP 서비스를 사용할 수 있습니다 (설정하기가 더 쉽습니다).
  • 또는 버킷을 Linux 서버의 파일 시스템에 마운트하고 SFTP를 서버의 다른 파일로 사용하여 파일에 액세스 할 수 있습니다.
  • 또는 S3 프로토콜 (무료)을 기본적으로 지원하는 (GUI) 클라이언트를 사용할 수 있습니다.

관리 SFTP 서비스

  • Amazon AWS 콘솔에서 SFTP 용 AWS 전송으로 이동 하여 새 서버를 생성하십시오.

  • SFTP 서버 페이지에서 새 SFTP 사용자를 추가하십시오.

    • 사용자 권한은 IAM 서비스의 관련 AWS 역할에 의해 관리됩니다 (빠른 시작을 위해 AmazonS3FullAccess 정책을 사용할 수 있음 ).

    • 역할은와 (과)의 신뢰 관계가 있어야합니다 transfer.amazonaws.com.

자세한 내용은 내 가이드 Amazon S3에 대한 SFTP 액세스 설정을 참조하십시오 .


Linux 서버에 버킷 마운트

s3fs파일 시스템 (또는 이와 유사한)을 사용하여 버킷을 Linux 서버 (예 : Amazon EC2)에 마운트하고 서버의 내장 SFTP 서버를 사용하여 버킷에 액세스하십시오.

  • 설치 s3fs
  • 양식 access-key-id:secret-access-key에 보안 자격 증명 추가/etc/passwd-s3fs
  • 버킷 마운팅 엔트리를 fstab다음에 추가하십시오 .

    <bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0
    

자세한 내용은 내 가이드 Amazon S3에 대한 SFTP 액세스 설정을 참조하십시오 .


S3 클라이언트 사용

또는 "S3 클라이언트" 인 무료 "FTP / SFTP 클라이언트" 를 사용하고 서버 측에 아무것도 설정하지 않았습니다. 예를 들어, WinSCP에 또는 Cyberduck .

WinSCP에는 전송을 자동화해야하는 경우 스크립팅.NET / PowerShell 인터페이스도 있습니다.


2
SFTP 를 통해 연결할 때 버킷을 마운트 root하면 나중에 전송 permission denied문제가 발생합니다 ec2-user. /mnt/<bucket>폴더는 소유 root하고 그룹 root도 가지고 있습니다.
elvismdev

1
@elvismdev / others-ftp 사용자로 마운트하고 (uid / gid 옵션 사용) 마운트되어 있는지 확인하십시오 allow_other(또는 -o allow_others3fs 명령 줄에서 마운트하는 경우). 필자의 경우 (개인 버킷에서) 파일을 읽기 전용 권한 (-o default_acl = public-read)으로 작성하는 것이 좋습니다.
bshea

66

최신 정보

S3는 이제 IAM과 통합되고 aws-cli를 사용하여 관리 할 수있는 S3 용 완전 관리 SFTP 게이트웨이 서비스를 제공합니다 .


이것이 완벽한 해결책이 아닌 이론적이고 실용적인 이유가 있지만 효과가 있습니다 ...

EC2 또는 자체 데이터 센터에서 Linux 서버에 FTP / SFTP 서비스 (예 : proftpd)를 설치 한 다음 s3fs를 사용하여 ftp 서버가 chroot로 구성된 파일 시스템에 버킷을 마운트하십시오 .

S3에서 콘텐츠를 제공하는 클라이언트가 있으며 ftp 푸시 만 지원하는 타사에서 콘텐츠를 제공합니다 ... S3과 실제 파일 시스템 간의 임피던스 불일치로 인해 약간의 망설임이 있지만 적절한 FTP / S3 게이트웨이 서버 소프트웨어 패키지를 작성하는 시간 (여전히이 중 하나를 수행 할 계획 임)은 몇 개월 전에이 솔루션을 제안하고 배포했으며 시스템에 아무런 문제도보고하지 않았습니다.

보너스로, proftpd는 각 사용자를 자신의 홈 디렉토리에 chroot 할 수 있고 proftpd 사용자가 소유 한 파일이 실제로 로그인 한 사용자가 소유하고 있다고 "척"할 수 있기 때문에 각 ftp 사용자를 버킷의 "하위 디렉토리"이며 다른 사용자의 파일에 액세스 할 수 없게합니다.


그러나 기본 구성에 문제가 있습니다.

수십 또는 수백 개의 파일을 얻기 시작하면 디렉토리 목록을 가져올 때 문제가 나타납니다. ProFTPd는 .ftpaccess디렉토리의 각 파일에 대해 반복 해서 파일 을 읽고 시도하기 때문에 , .ftpaccess사용자가 볼 수 있는지 확인합니다.

ProFTPd에서이 동작을 비활성화 할 수 있지만 가장 올바른 구성은 -o enable_noobj_cache -o stat_cache_expire=30s3fs에서 추가 옵션을 구성하는 것입니다 .

-o stat_cache_expire (기본값은 만료되지 않음)

통계 캐시의 항목에 만료 시간 (초)을 지정하십시오.

이 옵션을 사용하지 않으면 S3에 대한 요청이 줄어들지 만 외부 프로세스 또는 s3fs의 다른 인스턴스가 버킷의 객체를 수정하는 경우 객체에 대한 변경 사항을 항상 안정적으로 발견 할 수는 없습니다. 내 시스템에서 "30"값이 임의로 선택되었습니다.

-o enable_noobj_cache (기본값은 비활성화입니다)

존재하지 않는 오브젝트에 대해 캐시 항목을 사용 가능하게하십시오. s3fs가 존재하지 않는 디렉토리를 인식하고 파일 또는 서브 디렉토리 자체를 가지고 있기 때문에 s3fs가 일부 명령을 수행 할 때 s3fs는 항상 파일 (또는 서브 디렉토리)이 오브젝트 (경로) 아래에 있는지 확인해야합니다. ListBucket 요청이 증가하고 성능이 저하됩니다. 성능을 위해이 옵션을 지정할 수 있습니다. s3fs는 오브젝트 (파일 또는 디렉토리)가 존재하지 않는 통계 캐시에 기억합니다.

이 옵션은 s3fs가 .ftpaccess존재하지 않았 음을 기억하도록 합니다.


위의 변경 사항으로 해결되는 ProFTPd에서 발생할 수있는 성능 문제와 관련이없는 경우 s3fs에서도 활성화해야합니다 -o enable_content_md5.

-o enable_content_md5 (기본값은 비활성화입니다)

content-md5 헤더로 멀티 파트없이 업로드 된 데이터를 확인합니다. 멀티 파트 게시없이 객체를 업로드 할 때 "Content-MD5"헤더를 보낼 수 있습니다. 이 옵션을 사용하면 작은 객체를 업로드 할 때 s3fs의 성능에 영향을 미칩니다. s3fs는 큰 객체를 업로드 할 때 항상 MD5를 확인하기 때문에이 옵션은 큰 객체에 영향을 미치지 않습니다.

이 옵션은 절대 옵션이 아니어야했던 옵션입니다.이 옵션을 사용하지 않으면 성능에 대한 무시할만한 이점에 대한 중요 무결성 검사를 무시하므로 항상 활성화해야합니다. Content-MD5:헤더 를 사용하여 객체를 S3에 업로드하면 S3 는 체크섬의 유효성을 검사하고 전송 중에 손상된 객체를 거부합니다. 그러나 그렇지 않을 수도 있지만이 안전 점검을 비활성화하는 것은 근시안적인 것 같습니다.

인용문은 s3fs의 맨 페이지에서 제공됩니다. 문법 오류는 원문에 있습니다.


4
이 솔루션이 이상적인 이유에 대해 자세히 설명해 주시겠습니까?
fernio

2
@MarcoMarsala는 큰 디렉토리에 대한 수정 사항이 답변에 추가되었습니다.
Michael-sqlbot

1
@ Michael-sqlbot은 ".ftpaccess"파일을 완전히 읽지 않도록 ProFTPd 구성에서 "AllowOverride off"지시문을 사용하려고하십니까?
Greg Dubicki 2016 년

1
나는 모든 것을 시도했으며 S3 버킷이 마운트 된 폴더 수준에서만 user : group / permissions 만 설정할 수 있습니다. 그런 다음 해당 권한이 S3의 모든 폴더로 전파됩니다. 이 S3FS 명령에 대한 많은 변형을 포함하여 많은 것을 시도 sudo s3fs bucket-name /local-mount-folder-name/ -o iam_role=sftp-server -o allow_other -o umask=022 -o uid=501 -o gid=501했습니다. 일단 마운트 된 S3 폴더의 폴더에 대한 권한을 만든 후에는 권한을 변경할 수 없습니다.
T. Brian Jones

1
@Sverre 저는 여전히이 솔루션을 프로덕션 환경에서 사용합니다. 그것은 나에게 아무런 문제를주지 않습니다.
Michael-sqlbot

24

저에게 투표를 한 사람들에 대한 2014 년 답변 :

S3는 FTP가 아닙니다. 그러나 S3를 지원하는 많은 클라이언트가 있습니다.

OS X에서 주목할만한 FTP 클라이언트는 모두 TransmitCyberduck을 포함하여 지원 됩니다.

Windows를 사용하는 경우 Cyberduck 또는 CloudBerry를 살펴보십시오 .

2019 년 업데이트 된 답변 :

AWS는 최근 AWS Transfer for SFTP 서비스 출시했으며 원하는 서비스를 수행 할 수 있습니다.


2
Cyberduck은 나와 같은 서버 초보자라면 환상적으로 쉽게 작동합니다. 연결 열기를 클릭하고 드롭 다운에서 S3을 선택한 다음 자격 증명을 입력하십시오. 위에서 언급 한 일부 옵션보다 훨씬 쉽습니다!
Marquizzo

7

또는 업로드 된 파일을 Amazon S3 버킷에 저장하는 AWS 인프라에서 SFTP 게이트웨이 용 Linux 인스턴스를 스핀 하십시오.

Thorntech에서 지원


2
우리는 몇 년 동안 대규모 프로젝트의 프로덕션에서 SFTP 게이트웨이를 사용해 왔습니다. 우리는 그것이 s3fs보다 더 안정적인 것으로 나타났습니다
Jeff

3

Filezilla 는 FTP 클라이언트 의 Pro 버전 을 출시했습니다 . 경험과 같이 간소화 된 FTP로 S3 버킷에 연결합니다. 나는 그것을 직접 사용하고 (어쨌든 관계 없음) 훌륭하게 작동합니다.


3

WinSCp는 이제 S3 프로토콜을 지원합니다

먼저 S3 액세스 권한이있는 AWS 사용자에게 "액세스 키 ID"가 생성되어 있는지 확인하십시오. "비밀 액세스 키"도 알아야합니다. 액세스 키는 IAM 관리 콘솔의 사용자 페이지에서 생성 및 관리됩니다.

새 사이트 노드가 선택되어 있는지 확인하십시오.

새 사이트 노드에서 Amazon S3 프로토콜을 선택하십시오.

AWS 사용자 액세스 키 ID 및 비밀 액세스 키를 입력하십시오

저장 버튼을 사용하여 사이트 설정을 저장하십시오.

로그인 버튼을 사용하여 로그인하십시오.


2

Amazon은 S3 용 SFTP 서비스를 출시했지만 SFTP (FTP 또는 FTPES는 아님) 만 수행하며 상황에 따라 비용이 많이들 수 있습니다.

저는 DocEvent.io 의 창립자이며 서버를 가동 시키거나 인프라에 대해 걱정할 필요없이 S3 버킷에 FTP / S 게이트웨이를 제공합니다.

소프트웨어 구성을 통해 S3 버킷에 연결할 수있는 월별 지불 독립형 FTP 서버를 제공하는 다른 회사도 있습니다 (예 : brickftp.com) .

마지막으로 도움이 될 수있는 AWS Marketplace 앱도 있습니다 ( 여기 검색 링크 참조) . 자체 인프라에서 이러한 스핀 업 인스턴스의 대부분은 시간이 지남에 따라 유지 관리 및 구성이 어려운 인스턴스를 직접 관리하고 업그레이드해야 함을 의미합니다.


DocEvents는 좋아 보이지만 무료 플랜에 너무 많은 제한이 있습니다 ... 서비스를 시도조차 할 수 없었습니다 ...
D.Dimitrioglo

1

다른 포스터가 지적했듯이 AWS Transfer for SFTP 서비스에는 몇 가지 제한 사항이 있습니다. 요구 사항을 밀접하게 조정해야합니다. 예를 들어, 할당량, 화이트리스트 / 블랙리스트, 파일 유형 제한이 없으며 키 기반이 아닌 액세스에는 외부 서비스가 필요합니다. 사용자 관리 및 IAM과 관련하여 일정한 오버 헤드가 있으며, 이로 인해 규모가 커질 수 있습니다.

우리는 고객을 위해 약 5 년 동안 SFTP S3 프록시 게이트웨이운영해 왔습니다 . 핵심 솔루션은 Docker 서비스 모음에 싸여 있으며 온 프레미스 또는 로컬 개발 서버 등 필요한 모든 컨텍스트에 배포됩니다. 솔루션이 데이터 처리 및 파이프 라인과 파일 공유에 중점을 두므로 사용 사례는 약간 다릅니다. Salesforce 예제에서 고객은 SFTP를 사용하여 SFTP / S3 enpoint에 이메일, 구매 ... 데이터를 전송하는 전송 방법으로 사용합니다. 이것은 S3에서 객체 키로 매핑됩니다. 도착하자마자 데이터가 수집, 처리, 라우팅 및 창고로로드됩니다. 또한 AWS의 Cloudwatch 로그가 직접 제공하지 않는 각 전송마다 상당히 중요한 감사 요구 사항이 있습니다.

다른 사람들이 언급했듯이 자신의 롤링도 옵션입니다. AWS Lightsail을 사용하면 Route 53 또는 ELB를 사용하여 $ 10 2GB 인스턴스 4 개로 클러스터를 설정할 수 있습니다.

일반적으로 AWS가이 서비스를 제공하는 것이 좋으며 시간이지나면서 성숙해지기를 기대합니다. 그러나 사용 사례에 따라 대체 솔루션이 더 적합 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.