web-dev-qa-db-pt.com

Acesso FTP / SFTP a um bucket do Amazon S3

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

125
zgall1

Existem três opções.

  • Você pode usar um serviço SFTP gerenciado nativo adicionado recentemente 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 lhe dá maior controle).
  • Ou você pode simplesmente usar um cliente (GUI) que suporte nativamente o protocolo S3 (o que é gratuito).

Serviço SFTP Gerenciado

  • No seu Amazon AWS Console, vá para AWS Transfer for SFTP e crie um novo servidor.

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

    • As permissões dos usuários são governadas por uma função da AWS associada 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 para transfer.amazonaws.com.

Para detalhes, consulte meu guia Configurando um acesso SFTP ao Amazon S .


Balde de Montagem para o Servidor Linux

Basta montar o bucket usando o sistema de arquivos s3fs (ou similar) em um servidor Linux (por exemplo, o 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-key para /etc/passwd-s3fs
  • Adicione uma entrada de montagem de bucket a fstab:

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

Para detalhes, consulte meu guia Configurando um acesso SFTP ao Amazon S .


Use o cliente S3

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

WinSCP tem mesmo scripting e .net / interface do PowerShell , se você precisar automatizar as transferências.

74
Martin Prikryl

Atualizar

O S3 agora oferece um Serviço de Gateway SFTP totalmente gerenciado para S que se integra com o IAM e pode ser administrado usando o aws-cli.


Existem razões teóricas e práticas porque esta não é uma solução perfeita, mas funciona ...

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

Eu tenho um cliente que serve conteúdo do S3, e o conteúdo é fornecido a eles por um terceiro que só suporta ftp push ... assim, com alguma hesitação (devido à incompatibilidade de impedância entre o S3 e um sistema de arquivos real), mas faltando o tempo para escrever um pacote de software de servidor de gateway FTP/S3 adequado (que eu ainda pretendo fazer em um desses dias), eu propus e implementei essa solução para eles há vários meses e eles não relataram nenhum problema com o sistema.

Como bônus, como o proftpd pode chroot cada usuário em seu próprio diretório home e "fingir" (até onde o usuário pode dizer) 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 bloco e torna os arquivos dos outros usuários inacessíveis.


No entanto, existe um problema com a configuração padrão

Assim que você começar a obter algumas dezenas ou centenas de arquivos, o problema se manifestará quando você puxar uma listagem de diretórios, porque o ProFTPd tentará ler os arquivos .ftpaccess por cima, por cima e de novo, e para cada arquivo no diretório , .ftpaccess é verificado para ver se o usuário deve ter permissão para visualizá-lo.

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

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

especifica 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á de maneira confiável as alterações feitas nos objetos se processos externos ou outras instâncias de s3fs também estiverem modificando os objetos no bloco. O valor "30" no meu sistema foi selecionado arbitrariamente.

-o enable_noobj_cache (o padrão é desabilitado)

habilitar entradas de cache para o objeto que não existe. O s3fs sempre tem que verificar se o arquivo (ou subdiretório) existe sob o objeto (path) quando o s3fs faz algum comando, já que o s3fs reconheceu um diretório que não existe e possui arquivos ou subdiretórios. Aumenta o pedido ListBucket e torna o desempenho incorreto. Você pode especificar essa opção para o desempenho, s3fs memoriza no cache de estatísticas que o objeto (arquivo ou diretório) não existe.

Esta opção permite ao s3fs lembrar que .ftpaccess não estava lá.


Não relacionado aos problemas de desempenho que podem surgir com o ProFTPd, que são resolvidos pelas alterações acima, você também precisa habilitar -o enable_content_md5 em s3fs.

-o enable_content_md5 (o padrão é desabilitado)

verificando dados enviados sem multipartes pelo cabeçalho content-md5. Habilite para enviar o cabeçalho "Content-MD5" ao fazer o upload de um objeto sem postagem multipartes. Se esta opção estiver ativada, ela terá algumas influências em um desempenho de s3fs ao carregar um objeto pequeno. Como o s3fs sempre verifica o MD5 ao fazer o upload de um objeto grande, essa opção não afeta o objeto grande.

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

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

61
Michael - sqlbot

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

Praticamente todo cliente FTP notável no OS X tem suporte, incluindo Transmit e Cyberduck .

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

20
Ryan Parman

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

Suportado por Thorntech

7
mitaka

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

3
petezurich

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

Temos executado um SFTP S3 Proxy Gateway por cerca de 5 anos agora para nossos clientes. A solução principal é agrupada em uma coleção de serviços do Docker e implantada em qualquer contexto que seja necessário, mesmo em servidores locais ou de desenvolvimento local. O caso de uso para nós é um pouco diferente, pois a nossa solução é o processamento de dados e pipelines concentrados versus um compartilhamento de arquivos. Em um exemplo do Salesforce, um cliente usará SFTP como o método de transporte enviando email, comprando ... dados para um ponto de acesso SFTP/S3. Isso é mapeado uma chave de objeto no S3. Na chegada, os dados são coletados, processados, roteados e carregados em um depósito. Também temos requisitos de auditoria bastante significativos para cada transferência, algo que os registros do Cloudwatch para AWS não fornecem diretamente.

Como outros já mencionaram, a sua própria 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.

1
Thomas Spicer

o WinSCp agora suporta o protocolo S

Primeiro, verifique se o usuário da AWS com permissões de acesso ao S3 tem uma "ID de chave de acesso" criada. Você também precisa conhecer a "chave de acesso secreto". As chaves de acesso são criadas e gerenciadas na página Usuários do Console de Gerenciamento do IAM.

Certifique-se de que o nó Novo site esteja selecionado.

No nó Novo site, selecione o protocolo do Amazon S3.

Insira sua ID de chave de acesso do usuário da AWS e chave de acesso secreta

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

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

1
Subrata Fouzdar

A Amazon lançou serviços SFTP para o S3, mas eles só fazem SFTP (não FTP ou FTPES) e podem ter custos proibitivos, dependendo de suas circunstâncias.

Eu sou o fundador do DocEvent.io , e nós fornecemos os gateways FTP/S para o seu bucket S3 sem ter que girar os servidores ou se preocupar com a infraestrutura.

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

Por último, há também alguns aplicativos do AWS Marketplace que podem ajudar, aqui está um link de pesquisa . Muitas dessas instâncias de expansão em sua própria infraestrutura - isso significa que você terá que gerenciar e atualizar as instâncias por conta própria, o que pode ser difícil de manter e configurar com o tempo.

0
Mariusz