Acesso FTP / SFTP a um Amazon S3 Bucket [fechado]

146

Existe uma maneira de conectar-se a um bucket do Amazon S3 com FTP ou SFTP, em vez da interface integrada de transferência de arquivos da Amazon no console da AWS? Parece estranho que essa não seja uma opção prontamente disponível.

zgall1
fonte
2
A AWS lançou em novembro de 2018 o Serviço SFTP totalmente gerenciado que permite a transferência de arquivos diretamente para dentro e fora do Amazon S3. AWS Transfer for SFTP
mitaka

Respostas:

100

Existem três 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).
  • Ou você pode simplesmente usar um cliente (GUI) que ofereça suporte nativo ao protocolo S3 (gratuito).

Serviço SFTP gerenciado

  • No seu Amazon AWS Console, 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

Basta montar o bucket usando s3fso sistema de arquivos (ou similar) em um servidor Linux (por exemplo, Amazon EC2) e usar o servidor SFTP interno do servidor para acessar o bucket.

  • Instale o s3fs
  • Adicione suas credenciais de segurança em um formulário access-key-id:secret-access-keypara/etc/passwd-s3fs
  • Adicione uma entrada de montagem de balde a 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 .

O WinSCP possui até scripts e interface .NET / PowerShell , se você precisar automatizar as transferências.

Martin Prikryl
fonte
2
Montar o balde como causa problemas de roottransferência posteriores permission deniedao conectar ec2-uservia SFTP. /mnt/<bucket>A pasta pertence roote também tem o grupo root.
Elvismdev
1
@elvismdev / others - Monte como usuário ftp (usando as opções uid / gid) e verifique se ele está montado com allow_other(ou -o allow_otherse estiver montando a partir da linha de comando s3fs) .. funciona para mim. Também é uma boa ideia gravar os arquivos como permissões somente leitura (-o default_acl = public-read) no meu caso (em um bucket privado).
bshea
66

Atualizar

O S3 agora oferece um serviço de gateway SFTP totalmente gerenciado para o S3, que se integra ao IAM e pode ser administrado usando o aws-cli.


Existem razões teóricas e práticas para essa não ser uma solução perfeita, mas funciona ...

Você pode instalar um serviço FTP / SFTP (como proftpd) em um servidor linux, no EC2 ou em seu próprio data center ... e montar um bucket no sistema de arquivos em que o servidor ftp está configurado para chroot, usando s3fs .

Eu tenho um cliente que serve conteúdo fora do S3, e o conteúdo é fornecido a eles por terceiros que apenas suportam pushs FTP ... então, com alguma hesitação (devido à incompatibilidade de impedância entre o S3 e um sistema de arquivos real), mas faltando Na hora de escrever um pacote de software de servidor de gateway FTP / S3 adequado (que ainda pretendo fazer um dia desses), propus e implantei essa solução para eles há vários meses e eles não relataram nenhum problema com o sistema.

Como um bônus, como o proftpd pode fazer o chroot de cada usuário em seu próprio diretório inicial e "fingir" (até onde o usuário sabe) que os arquivos pertencentes ao usuário proftpd são realmente de propriedade do usuário logado, isso separa cada usuário ftp em um "subdiretório" do bucket e torna os arquivos dos outros usuários inacessíveis.


Há um problema com a configuração padrão, no entanto.

Depois que você começar a obter algumas dezenas ou centenas de arquivos, o problema se manifestará quando você abrir uma lista de diretórios, porque o ProFTPd tentará ler os .ftpaccessarquivos repetidamente e novamente e para cada arquivo no diretório, .ftpaccessestá marcado para ver se o usuário deve poder vê-lo.

Você pode desativar esse comportamento no ProFTPd, mas eu sugiro que a configuração mais correta seja configurar opções adicionais -o enable_noobj_cache -o stat_cache_expire=30no s3fs:

-o stat_cache_expire (o padrão é não expirar)

especifique o tempo de expiração (segundos) para entradas no cache de estatísticas

Sem essa opção, você fará menos solicitações ao S3, mas nem sempre descobrirá com segurança as alterações feitas nos objetos se processos externos ou outras instâncias do s3fs também estiverem modificando os objetos no bucket. O valor "30" no meu sistema foi selecionado de forma arbitrária.

-o enable_noobj_cache (o padrão é desativar)

habilitar entradas de cache para o objeto que não existe. O s3fs sempre precisa verificar se o arquivo (ou subdiretório) existe no objeto (caminho) quando o s3fs executa algum comando, pois o s3fs reconheceu um diretório que não existe e possui arquivos ou subdiretórios. Aumenta a solicitação ListBucket e prejudica o desempenho. Você pode especificar esta opção para desempenho, o s3fs memoriza no cache de estatísticas que o objeto (arquivo ou diretório) não existe.

Esta opção permite que o s3fs se lembre de que .ftpaccessnão estava lá.


Independentemente dos problemas de desempenho que podem surgir com o ProFTPd, resolvidos pelas alterações acima, você também precisa habilitar -o enable_content_md5no s3fs.

-o enable_content_md5 (o padrão é desativar)

verificação de dados enviados sem multipartes pelo cabeçalho content-md5. Ative o envio do cabeçalho "Content-MD5" ao fazer upload de um objeto sem postagem de várias partes. Se essa opção estiver ativada, ela terá alguma influência no desempenho do s3fs ao fazer upload de objetos pequenos. Como o s3fs sempre verifica o MD5 ao fazer upload de objetos grandes, essa opção não afeta o objeto grande.

Essa é uma opção que nunca deveria ter sido uma opção - deve sempre estar ativada, porque não fazer isso ignora uma verificação crítica de integridade, apenas para um benefício insignificante de desempenho. Quando um objeto é carregado no S3 com um Content-MD5:cabeçalho, o S3 validará a soma de verificação e rejeitará o objeto se ele estiver corrompido em trânsito. Por mais improvável que seja, parece míope desativar essa verificação de segurança.

As cotações são da página de manual do s3fs. Erros gramaticais estão no texto original.

Michael - sqlbot
fonte
4
você poderia explicar as razões pelas quais essa solução não é ideal?
fernio
2
@MarcoMarsala as correções para diretórios grandes foram adicionadas à resposta.
Michael - sqlbot
1
@ Michael-sqlbot você tentou usar a diretiva "AllowOverride off" na configuração do ProFTPd para parar de tentar ler completamente os arquivos ".ftpaccess"?
Greg Dubicki
1
Eu tentei de tudo e só posso definir usuário: grupo / permissões no nível da pasta em que o balde S3 está montado. Em seguida, essas permissões se propagam para todas as pastas no S3. Eu tentei muitas coisas, incluindo muitas variações desse comando do 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- não posso alterar nenhuma permissão nas pastas na pasta Mounted S3, uma vez criado.
T. Brian Jones
1
@ Sverre Eu ainda uso esta solução na produção. Isso não me dá nenhum problema.
Michael - sqlbot
24

Resposta de 2014 para as pessoas que estão com voto negativo:

Bem, o S3 não é FTP. Existem muitos clientes que suportam o S3, no entanto.

Praticamente todos os notáveis ​​clientes de FTP no OS X têm suporte, incluindo Transmit e Cyberduck .

Se você estiver no Windows, dê uma olhada no Cyberduck ou CloudBerry .

Resposta atualizada para 2019:

A AWS lançou recentemente o serviço AWS Transfer for SFTP , que pode fazer o que você está procurando.

Ryan Parman
fonte
2
O Cyberduck funciona incrivelmente fácil se você é um novato em servidores como eu. Basta clicar em Abrir conexão, selecionar S3 no menu suspenso e inserir minhas credenciais. Muito mais fácil do que algumas das opções mencionadas acima!
Marquizzo
7

Ou gire a instância do Linux para o SFTP Gateway em sua infraestrutura da AWS que salva os arquivos carregados no seu bucket do Amazon S3.

Apoiado por Thorntech

mitaka
fonte
2
Estamos usando o SFTP Gateway na produção de grandes projetos há vários anos. Descobrimos que ele seja mais confiável do que s3fs
Jeff
3

O Filezilla acaba de lançar uma versão Pro do seu cliente FTP. Ele se conecta aos buckets S3 em uma experiência otimizada de FTP. Eu mesmo uso (sem nenhuma afiliação) e funciona muito bem.

petezurich
fonte
3

WinSCp agora suporta protocolo S3

Primeiro, verifique se o usuário da AWS com permissões de acesso S3 possui um "ID da chave de acesso" criado. Você também precisa conhecer a "Chave de acesso secreta". As chaves de acesso são criadas e gerenciadas na página Usuários do IAM Management Console.

Verifique se Novo nó do site está selecionado.

No nó Novo site, selecione protocolo Amazon S3.

Digite o ID da chave de acesso do usuário da AWS e a chave de acesso secreta

Salve as configurações do site usando o botão Salvar.

Faça o login usando o botão Login.

Subrata Fouzdar
fonte
2

A Amazon lançou serviços SFTP para S3, mas eles apenas fazem SFTP (não FTP ou FTPES) e podem ser proibitivos em termos de custos, dependendo das circunstâncias.

Sou o fundador do DocEvent.io e fornecemos gateways FTP / S para o seu bucket S3 sem precisar ativar servidores ou se preocupar com a infraestrutura.

Também existem outras empresas que fornecem um servidor FTP independente que você paga por mês que pode se conectar a um bucket S3 por meio da configuração do software, por exemplo, brickftp.com .

Por fim, também existem alguns aplicativos do AWS Marketplace que podem ajudar. Aqui está um link de pesquisa . Muitas dessas instâncias de spin-up em sua própria infraestrutura - isso significa que você precisará gerenciar e atualizar as instâncias, o que pode ser difícil de manter e configurar ao longo do tempo.

Mariusz
fonte
DocEvents parece boa, mas têm muito restrições ao plano gratuito ... eu não poderia mesmo experimentar o serviço ...
D.Dimitrioglo
1

Como outros pôsteres apontaram, existem algumas limitações no serviço AWS Transfer for SFTP. Você precisa alinhar estreitamente os requisitos. Por exemplo, não há cotas, listas de permissões / listas negras, limites de tipo de arquivo e acesso não baseado em chave requerem serviços externos. Há também uma certa sobrecarga relacionada ao gerenciamento de usuários e ao IAM, que pode ser um grande problema.

Estamos executando um Gateway Proxy SFTP S3 há cerca de 5 anos para nossos clientes. A solução principal é agrupada em uma coleção de serviços do Docker e implantada em qualquer contexto necessário, mesmo em servidores de desenvolvimento locais ou locais. O caso de uso para nós é um pouco diferente, pois nossa solução é o processamento de dados e os pipelines versus o compartilhamento de arquivos. Em um exemplo do Salesforce, um cliente usará o SFTP como o método de transporte para enviar email, comprar ... dados para um ponto SFTP / S3. É mapeada uma chave de objeto no S3. Na chegada, os dados são coletados, processados, roteados e carregados em um armazém. Também temos requisitos de auditoria bastante significativos para cada transferência, algo que os logs do Cloudwatch para a AWS não fornecem diretamente.

Como outros já mencionaram, rodar o seu próprio também é uma opção. Usando o AWS Lightsail, você pode configurar um cluster, digamos 4, de instâncias de US $ 10 de 2 GB usando o Route 53 ou um ELB.

Em geral, é ótimo ver a AWS oferecer esse serviço e espero que ele amadureça com o tempo. No entanto, dependendo do seu caso de uso, soluções alternativas podem ser mais adequadas.

Thomas Spicer
fonte