Como posso configurar um servidor SFTP suportado pelo S3 (ou similar)

8

Preciso configurar um servidor SFTP que, essencialmente, tenha capacidade muito grande. Preciso fornecer detalhes de login do SFTP de um de nossos parceiros para um servidor no qual eles farão upload de milhões de arquivos, totalizando algumas centenas de Terabytes. Serei então seletivo e, raramente, lendo alguns desses arquivos. Este é o único requisito real, qualquer opção de tecnologia está em disputa.

O que vem à mente como a maneira mais fácil é ter algum tipo de instância do EC2 executando o servidor SFTP de forma que qualquer coisa carregada seja enviada diretamente para o S3 ou algum tipo de processo descubra novos arquivos quando eles são carregados, copia-os para S3 e os exclui do disco.

É este o melhor caminho? Existe alguma outra maneira de obter um servidor que tenha essencialmente "espaço em disco infinito e magicamente crescente"?

Obrigado pela ajuda! Daniel

Daniel Magliola
fonte
3
100 TB de transferência de dados no S3 custam quase US $ 5.000. O valor da pornografia de seus "parceiros" provavelmente é muito menor que isso.
HopelessN00b
2
code.google.com/p/s3fs é provavelmente a sua melhor aposta. Além dos custos de transferência @ salienta HopelessN00b, esses mesmos 100 TB custarão US $ 3k / mês para armazenar.
precisa
2
Obrigado pelo seu comentário construtivo @ HopelessN00b. Para qualquer outra pessoa que possa ter sido dissuadida de responder a essa ideia ... Sim, fizemos as contas, transferir e reter essa quantidade de informações nos custará muito dinheiro. Ter os dados (definitivamente não pornô) vale esse custo para os nossos negócios.
precisa
1
Tudo bem, então sua pergunta é ...? Como instalar o SFTP em uma instância da AWS? Como escrever um script para excluir arquivos? O que? Não deve ser indelicado, mas você pensaria que uma empresa que deseja gastar dezenas de milhares de dólares por mês para essas "poucas centenas" de TB de dados estaria disposta a contratar um consultor por alguns milhares para configurar esse sistema para eles.
HopelessN00b
2
Você pode explicar o contexto do motivo pelo qual é impraticável que eles instalem algo para carregá-lo diretamente no S3 ou configurem algo como o AWS Storage Gateway? Se você estiver carregando centenas de Terabytes, certamente eles poderão gastar um pouco de tempo instalando um cliente S3 em um servidor com acesso direto ao seu armazenamento.
thexacre

Respostas:

10

Eu respondi a mesma pergunta no Stack Overflow .

O s3fs é de fato uma solução razoável e, no meu caso, associei-o ao proftpd com excelentes resultados, apesar dos problemas teóricos / potenciais.

Na época em que escrevi a resposta, eu havia configurado isso apenas para um de meus clientes de consultoria ... mas desde então também comecei a beber meu próprio kool-aid e o uso na produção em meu trabalho diário. Empresas com as quais trocamos dados com upload e download de arquivos o dia inteiro no meu servidor sftp, que armazena tudo diretamente no S3. Como bônus, meu sistema de exportação de relatórios - que grava planilhas do Excel diretamente no S3 - pode exportar relatórios "para o servidor FTP" simplesmente colocando-os diretamente no bucket do servidor ftp, com metadados apropriados para mostrar o uid, gid e modo de cada arquivo. (o s3fs usa os cabeçalhos x-amz-meta-uid, -gid e -mode para emular as permissões do sistema de arquivos). Quando o cliente faz logon no servidor, os arquivos de relatório estão apenas ... lá.

Eu acho que a solução ideal provavelmente seria um serviço de gateway sftp para S3, mas ainda não consegui projetar um, pois essa solução funciona muito bem ... com algumas ressalvas, é claro:

Nem todos os valores padrão para s3fs são sensatos. Você provavelmente desejará especificar estas opções:

-o enable_noobj_cache   # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5   # it's beyond me why this safety check is disabled by default

Provavelmente, é melhor usar uma região que não seja o padrão dos EUA, porque é a única região que não oferece consistência de leitura após gravação em novos objetos. (Ou, se você precisar usar o US-Standard, poderá usar o nome your-bucket.s3-external-1.amazonaws.comde host quase não documentado da região us-east-1 para impedir que seus pedidos sejam roteados geograficamente, o que pode melhorar a consistência.)

Eu tenho a versão de objeto ativada no bucket, da qual o s3fs não tem conhecimento. A vantagem disso é que, mesmo que um arquivo seja "pisoteado", sempre posso acessar a versão do bucket para recuperar o arquivo "substituído". A versão do objeto no S3 foi projetada de maneira brilhante, de forma que os clientes do S3 que não têm conhecimento de versão não sejam de modo algum desabilitados ou confusos, porque se você não fizer chamadas REST com reconhecimento de versão, as respostas retornadas pelo S3 serão compatíveis com os clientes que possuem nenhum conceito de versionamento.

Observe também que a transferência de dados para o S3 está livre de taxas de transferência de dados. Você paga apenas o preço por solicitação. A transferência de dados do S3 para o EC2 em uma região também está livre de taxas de transferência de dados. Somente quando você transfere o S3 para a Internet, para o Cloudfront ou para outra região da AWS é que paga as taxas de transferência. Se você deseja usar o armazenamento de redundância reduzida com preço mais baixo, o s3fs suporta isso com -o use_rrs.

Como uma parte divertida, você sempre terá uma sensação de aconchego ao ver os 256 terabytes de espaço livre (e 0 usados, uma vez que um cálculo real de tamanhos é impraticável devido ao fato de o S3 ser um armazenamento de objetos, não um sistema de arquivos )

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.4G  6.2G  18% /
s3fs            256T     0  256T   0% /srv/s3fs/example-bucket

Obviamente, você pode montar o balde em qualquer lugar. Acabei de tê-lo em / srv / s3fs.

Michael - sqlbot
fonte
Apesar de não responder à pergunta que foi realmente perguntou, se eu tivesse vários terabytes de dados que eu queria carregar em S3, o recentemente anunciado Export Snowball Amazon Import / seria o que eu lançar o cliente difícil para a carga inicial de dados . Uma SAN de 50 TB enviada para sua porta, carregue-a, compre-a de volta, a Amazon carrega os dados, a um preço muito menor que a largura de banda para transferir os dados.
Michael - sqlbot
Você tem alguma experiência executando uma GUI baseada na Web sobre essa configuração de FTP? Se sim, o que funcionou ou foi problemático?
9788
@ T.BrianJones Minha tendência é geralmente evitar GUIs, pois prefiro o comportamento claro e óbvio que os arquivos de configuração editáveis ​​manualmente geralmente oferecem. Para minhas configurações, tenho um script personalizado chamado setupftpuserque chama o ftpasswdutilitário ProFTPd para criar usuários, criar diretórios pessoais e definir permissões. Ele também faz backup do arquivo de senha antes de fazer alterações. Se for chamado um usuário existente, ele informa que o usuário já está provisionado e pergunta se você deseja alterar a senha. Uma interface gráfica do usuário que gerenciava essencialmente o mesmo processo e deve ser bom se estiver bem escrito.
Michael - sqlbot
5

Confira o Gateway SFTP no AWS Marketplace .

Como tivemos problemas de confiabilidade com o s3fs, desenvolvemos uma solução personalizada especificamente para esse fim. Nós o usamos em produção há vários anos sem problemas e o lançamos recentemente no AWS Marketplace.

Jeff
fonte
observe que isso é unidirecional (o upload para o sftp armazena o arquivo no s3, mas o arquivo não pode mais ser baixado do sftp). Além disso, a inserção de arquivos no s3 não os torna disponíveis através do sftp.
Vincent De Smet
Apenas para esclarecer ... O SFTP Gateway também possui um diretório "download" que sincroniza o S3 de volta ao servidor sftp. Ao manter os uploads e downloads separados, você como administrador tem controle total sobre o que as pessoas podem enviar e baixar.
23418 Jeff Jeff
esse é um recurso recém-adicionado? Certamente não existia quando este comentário foi postado praticamente um ano atrás
Vincent De Smet
Sim, foi um recurso adicionado após esta postagem original. Estamos mantendo-o ativamente e continuamos adicionando novos recursos, como suporte à criptografia no servidor e downloads compartilhados.
Jeff
1

Existem duas opções. Você pode usar um serviço SFTP gerenciado nativo recentemente adicionado pela Amazon (que é mais fácil de configurar). Ou você pode montar o bucket em um sistema de arquivos em um servidor Linux e acessar os arquivos usando o SFTP como qualquer outro arquivo no servidor (o que oferece maior controle).

Serviço SFTP gerenciado

  • No seu console da Amazon AWS, acesse AWS Transfer for SFTP e crie um novo servidor.

  • Na página do servidor SFTP, adicione um novo usuário (ou usuários) SFTP.

    • As permissões dos usuários são governadas por uma função associada da AWS no serviço IAM (para um início rápido, você pode usar a política AmazonS3FullAccess ).

    • A função deve ter uma relação de confiança transfer.amazonaws.com.

Para obter detalhes, consulte o meu guia Configurando um acesso SFTP ao Amazon S3 .

Bucket de montagem no servidor Linux

Como o @Michael já respondeu , basta montar o bucket usando o s3fssistema de arquivos (ou similar) em um servidor Linux (Amazon EC2) e usar o servidor SFTP interno do servidor para acessar o bucket.

Aqui estão as instruções básicas:

  • Instale o s3fs
  • Adicione suas credenciais de segurança em um formulário access-key-id:secret-access-keyao/etc/passwd-s3fs
  • Adicione uma entrada de montagem de balde ao fstab:

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

Para obter detalhes, consulte o meu guia Configurando um acesso SFTP ao Amazon S3 .

Usar cliente S3

Ou use qualquer "cliente FTP / SFTP" gratuito , que também seja um "cliente S3" , e você não configurou nada no lado do servidor. Por exemplo, meu WinSCP ou Cyberduck .

Martin Prikryl
fonte
0

A AWS agora fornece um serviço SFTP sobre S3 chamado AWS Transfer For SFTP . Possui os benefícios do S3 (armazenamento distribuído e altamente durável, disponível) combinado com o protocolo SFTP bem conhecido e estabelecido.

Por padrão, os usuários se autenticam usando pares de chaves públicas / privadas e, usando as políticas do IAM, você pode configurar permissões para usuários do SFTP nos buckets do S3. Você pode adicionar esquemas de autenticação implementando sua própria funcionalidade no AWS API Gateway e no AWS Lambda.

Reunimos o AWS Transfer for SFTP em um complemento Heroku chamado SFTP To Go, para fornecer esquemas de autenticação flexíveis e menor TCO (como um terminal em serviço tem um custo fixo na AWS, mas pode ser compartilhado por muitos usuários sem nenhuma segurança ou segurança). compromisso de desempenho.

SNeumann
fonte