You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在EC2实例上配置FTP服务器以直接将文件上传至S3?

搭建EC2 FTP服务器自动同步至S3的方案

一、前期准备

  • 拥有AWS账户,已创建目标S3桶(桶名需全局唯一,按需开启版本控制)
  • 启动一台EC2实例:轻量需求可选t3.micro(符合免费额度),大文件集中上传时可临时升级规格,完成后降配节省成本
  • 配置EC2安全组:开放FTP控制端口21,被动模式需额外开放端口范围(如1024-1048);确保EC2出站规则允许访问S3

二、配置EC2的IAM权限

通过IAM角色给EC2授权,避免硬编码密钥,遵循最小权限原则:

  1. 进入IAM控制台,创建新角色,选择EC2作为信任实体
  2. 创建自定义权限策略(替换your-bucket-name为你的桶名):
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::your-bucket-name",
                    "arn:aws:s3:::your-bucket-name/*"
                ]
            }
        ]
    }
    
  3. 将策略附加到新建角色,再把角色关联到目标EC2实例

三、挂载S3桶到EC2本地目录

使用s3fs将S3桶挂载为本地文件系统,实现FTP上传文件直接同步至S3:

  1. 安装依赖(以Amazon Linux 2为例):
    sudo yum install gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel openssl-devel git -y
    
  2. 编译安装s3fs:
    git clone https://github.com/s3fs-fuse/s3fs-fuse.git
    cd s3fs-fuse
    ./autogen.sh
    ./configure --prefix=/usr --with-openssl
    make
    sudo make install
    
  3. 创建挂载目录:
    sudo mkdir /mnt/s3-ftp-bucket
    
  4. 挂载S3桶:
    sudo s3fs your-bucket-name /mnt/s3-ftp-bucket -o iam_role=auto -o allow_other
    
    • iam_role=auto:自动调用EC2绑定的IAM角色权限
    • allow_other:允许FTP用户访问挂载目录
  5. 设置开机自动挂载:
    编辑/etc/fstab,添加以下内容:
    your-bucket-name /mnt/s3-ftp-bucket fuse.s3fs iam_role=auto,allow_other 0 0
    
    测试挂载:sudo mount -a

四、安装并配置FTP服务器(以vsftpd为例)

  1. 安装vsftpd:
    sudo yum install vsftpd -y
    
  2. 编辑/etc/vsftpd/vsftpd.conf,修改关键配置:
    # 禁止匿名访问
    anonymous_enable=NO
    # 允许本地用户登录
    local_enable=YES
    # 开启写入权限
    write_enable=YES
    # 限制用户仅能访问指定目录(chroot监狱)
    chroot_local_user=YES
    allow_writeable_chroot=YES
    # 设置被动模式端口范围
    pasv_min_port=1024
    pasv_max_port=1048
    # 指定FTP用户默认目录为S3挂载目录
    local_root=/mnt/s3-ftp-bucket
    
  3. 创建FTP专用用户(禁止SSH登录):
    sudo useradd ftp-user
    sudo passwd ftp-user
    sudo usermod -s /sbin/nologin ftp-user
    
  4. 调整挂载目录权限:
    sudo chown ftp-user:ftp-user /mnt/s3-ftp-bucket
    
  5. 启动并设置开机自启:
    sudo systemctl start vsftpd
    sudo systemctl enable vsftpd
    

五、大文件上传优化与成本控制

大文件处理

  • s3fs默认自动分段上传大文件(默认100MB/段),无需额外配置即可保证上传稳定性
  • 临时升级EC2实例规格:大文件集中上传时切换至t3.small或更高规格,完成后降回低规格
  • 强制使用FTP被动模式:避免客户端防火墙阻断大文件传输连接

成本优化

  • 选择低成本S3存储类:上传完成后,将文件转移至S3 Standard-Infrequent Access或S3 Glacier Flexible Retrieval,根据访问频率选择
  • 配置S3生命周期规则:自动将超过指定天数的文件从标准存储转移至低成本存储类,或过期删除冗余文件
  • 利用EC2免费额度:t3.micro实例每月有750小时免费时长,轻量场景可完全覆盖
  • 同区域部署:确保EC2与S3桶在同一AWS区域,避免跨区域数据传输费用

六、测试验证

使用FTP客户端(如FileZilla)连接EC2公网IP,用创建的ftp-user账号登录,上传大文件后检查S3桶是否成功接收,确认流程正常。

内容的提问来源于stack exchange,提问作者Saksham Paliwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:55:03