mirror of
https://github.com/RhenCloud/Cloud-Index.git
synced 2025-12-06 15:26:10 +08:00
10 KiB
10 KiB
title, createTime, permalink
| title | createTime | permalink |
|---|---|---|
| Amazon S3 | 2025/11/09 00:26:55 | /storage/s3 |
Amazon S3 配置指南
详细的 Amazon S3 配置步骤和最佳实践。
概述
Amazon S3(Simple Storage Service)是业界标准的对象存储服务,具有以下优势:
- 🏢 企业级服务
- 🔐 最高的安全性
- 📊 功能最完整
- 🌍 全球可用
- 📈 自动扩展
账户设置
1. 创建 AWS 账户
访问 AWS 官网 创建账户。新用户享受 12 个月免费套餐。
2. 访问 S3 控制台
- 登录 AWS 管理控制台
- 搜索 "S3"
- 进入 S3 服务
创建存储桶
1. 创建新桶
- 点击 "创建存储桶"
- 输入存储桶名称(例如
my-cloud-storage)- 名称必须全局唯一
- 只能包含小写字母、数字、连字符和点
- 选择区域(例如
ap-northeast-1东京) - ACL - 保持默认(禁用)
- 阻止公有访问设置 - 根据需求配置(见下一步)
- 点击 "创建存储桶"
2. 配置公开访问(可选)
若要让文件可以公开访问:
- 进入存储桶 → "权限"
- 找到 "阻止公有访问" 部分
- 点击 "编辑"
- 取消勾选 "阻止所有公有访问"
- 点击 "保存"
3. 启用 ACL(仅在需要时)
- 进入存储桶 → "权限"
- 找到 "对象所有权" 部分
- 点击 "编辑"
- 选择 "ACL 已启用"
- 点击 "保存"
创建 IAM 用户和凭证
1. 创建 IAM 用户
使用 IAM 用户而不是根账户更安全:
- 进入 IAM 控制台
- 左侧菜单 → "用户"
- 点击 "创建用户"
- 输入用户名(例如
Cloud Index-user) - 点击 "创建用户"
2. 配置权限
方式 A:使用托管策略(推荐)
- 进入用户详情
- 点击 "添加权限" → "直接附加现有策略"
- 搜索 "AmazonS3FullAccess"
- 勾选并点击 "下一步"
- 点击 "添加权限"
方式 B:使用自定义策略(更安全)
- 进入用户详情
- 点击 "添加权限" → "创建内联策略"
- 选择 JSON
- 粘贴以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObjectVersion",
"s3:ListBucketVersions"
],
"Resource": "arn:aws:s3:::my-cloud-storage"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::my-cloud-storage/*"
}
]
}
- 点击 "创建策略"
3. 创建访问密钥
- 进入用户详情
- 点击 "安全凭证" 选项卡
- 向下滚动到 "访问密钥"
- 点击 "创建访问密钥"
- 选择 "其他"
- 点击 "下一步"
- 复制 Access Key ID 和 Secret Access Key
- 保存到安全位置
⚠️ 重要: 密钥只显示一次,请立即保存!
配置环境变量
编辑 .env 文件:
# 存储类型
STORAGE_TYPE=s3
# AWS 凭证
ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# S3 配置
S3_BUCKET_NAME=my-cloud-storage
S3_REGION=ap-northeast-1
# 可选:公开访问配置
S3_PUBLIC_URL=https://my-cloud-storage.s3.ap-northeast-1.amazonaws.com
# 可选:预签名 URL 过期时间(秒,默认 3600)
S3_PRESIGN_EXPIRES=3600
常用 AWS 区域
选择离你最近的区域以获得最佳性能:
| 区域代码 | 位置 | 说明 |
|---|---|---|
us-east-1 |
美国东部(N. Virginia) | 美国 |
us-west-2 |
美国西部(Oregon) | 美国西海岸 |
eu-west-1 |
欧洲(Ireland) | 欧洲 |
ap-northeast-1 |
亚太(Tokyo) | 日本、韩国 |
ap-southeast-1 |
亚太(Singapore) | 东南亚 |
cn-north-1 |
中国(北京) | 中国 |
配置公开访问 URL
方式 A:使用 S3 默认 URL
S3_PUBLIC_URL=https://bucket-name.s3.region.amazonaws.com
方式 B:使用 CloudFront CDN
- 进入 CloudFront 控制台
- 点击 "创建分配"
- 源域名:选择你的 S3 存储桶
- 其他设置保持默认
- 点击 "创建分配"
- 等待部署(约 15-20 分钟)
- 复制分配域名
配置环境变量:
S3_PUBLIC_URL=https://d123abc456.cloudfront.net
方式 C:使用自定义域名
- 使用 Route 53 或其他 DNS 服务
- 创建 CNAME 记录指向 S3 或 CloudFront
- 配置 SSL 证书
S3_PUBLIC_URL=https://assets.example.com
启用 CORS(如需跨域请求)
- 进入存储桶
- 点击 "权限"
- 向下滚动到 "CORS"
- 点击 "编辑"
- 粘贴以下配置:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
"AllowedOrigins": ["*"],
"ExposeHeaders": ["ETag"]
}
]
- 点击 "保存更改"
启用版本控制(可选)
- 进入存储桶
- 点击 "属性"
- 找到 "版本控制"
- 点击 "编辑"
- 选择 "启用"
- 点击 "保存更改"
启用生命周期规则(自动清理)
自动删除过期文件以节省成本:
- 进入存储桶
- 点击 "管理"
- 点击 "创建生命周期规则"
- 输入规则名称(例如
delete-old-cache) - 配置规则:
- 前缀:可选(如
cache/) - 对象年龄:30 天后删除
- 过期对象删除标记:勾选
- 前缀:可选(如
- 点击 "创建规则"
测试连接
方式一:启动应用测试
python app.py
访问 http://localhost:5000,查看是否能正常显示文件列表。
方式二:使用 AWS CLI 测试
# 安装 aws cli
pip install awscli
# 配置凭证
aws configure
# 输入以下信息:
# AWS Access Key ID: AKIAIOSFODNN7EXAMPLE
# AWS Secret Access Key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# Default region: ap-northeast-1
# Default output format: json
# 测试连接
aws s3 ls s3://my-cloud-storage
方式三:Python 测试
import boto3
s3 = boto3.client(
's3',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
region_name='ap-northeast-1'
)
# 列出所有对象
response = s3.list_objects_v2(Bucket='my-cloud-storage')
for obj in response.get('Contents', []):
print(obj['Key'])
成本优化建议
1. 选择合适的存储类型
S3 提供多种存储类别:
| 类别 | 适用场景 | 成本 |
|---|---|---|
| S3 标准 | 经常访问的数据 | 💛 中等 |
| S3 智能分层 | 访问模式不确定 | 自动优化 |
| S3 标准-IA | 不经常访问 | 💚 低 |
| Glacier | 归档数据 | 🔥 极低 |
默认使用 S3 标准即可。
2. 启用生命周期规则
自动将旧文件迁移到更便宜的存储类:
{
"Transitions": [
{
"Days": 90,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 180
}
}
3. 定期清理
- 定期检查存储桶大小
- 删除不需要的文件
- 删除过期的版本
4. 监控成本
- 进入 AWS 成本管理器
- 设置成本告警
- 定期审查费用
监控和管理
查看存储使用情况
- 进入存储桶
- 点击 "指标"
- 可以看到:
- 存储桶大小
- 对象数量
- 请求统计
启用访问日志
- 进入存储桶 → "属性"
- 找到 "服务器访问日志"
- 点击 "编辑"
- 启用日志
- 指定目标存储桶和前缀
- 点击 "保存更改"
最佳实践
1. 安全性
- ✅ 使用 IAM 用户而非根账户
- ✅ 使用最小权限原则
- ✅ 定期轮换访问密钥
- ✅ 启用 MFA(多因素认证)
- ✅ 启用 CloudTrail 审计
- ✅ 不要在代码中提交凭证
2. 性能
- ✅ 使用 CloudFront CDN
- ✅ 启用传输加速(可选)
- ✅ 选择适当的区域
- ✅ 使用多部分上传(应用自动处理)
3. 可靠性
- ✅ 启用版本控制
- ✅ 启用 MFA 删除保护
- ✅ 启用服务器端加密
- ✅ 定期备份
4. 成本控制
- ✅ 使用生命周期规则
- ✅ 监控使用成本
- ✅ 定期清理过期数据
- ✅ 使用合适的存储类别
常见问题
Q: 新用户有免费额度吗?
A: 是的!AWS 12 个月免费套餐包括:
- 5GB S3 存储
- 20,000 GET 请求
- 2,000 PUT 请求
之后按使用量计费。
Q: 月费大概多少?
A: 取决于使用量。示例:
- 存储 100GB:~$2.30
- 请求 1M:~$0.50
- 流量 100GB:~$0.92
- 总计:~$3.72/月
Q: 如何降低成本?
A:
- 使用 S3 标准-IA(便宜 50%)
- 启用生命周期规则
- 压缩文件
- 使用 CloudFront CDN(减少 S3 请求)
Q: 如何处理大文件上传?
A: S3 支持:
- 单个对象最大 5TB
- 应用自动使用多部分上传
- 没有大小限制
故障排除
连接失败
检查:
- Access Key 和 Secret Key 是否正确
- 区域代码是否正确
- 存储桶名称是否正确
- IAM 用户是否有 S3 权限
- 网络连接是否正常
上传失败
检查:
- IAM 用户是否有
s3:PutObject权限 - 存储桶是否存在
- 文件名是否有效
- 磁盘空间是否充足
公开文件无法访问
检查:
- 是否启用了公开访问
- 是否配置了正确的 URL
- 是否启用了 CORS
- CloudFront 是否正常工作
获取帮助
- 📖 AWS S3 官方文档
- 📖 AWS SDK for Python 文档
- 🐛 提交 Issue
- 💬 讨论区
下一步
- 🚀 快速开始 - 开始使用应用
- 📖 存储后端对比 - 对比其他服务
- 💾 Cloudflare R2 配置 - R2 配置指南