--- title: Amazon S3 createTime: 2025/11/09 00:26:55 permalink: /storage/s3 --- # Amazon S3 配置指南 详细的 Amazon S3 配置步骤和最佳实践。 ## 概述 Amazon S3(Simple Storage Service)是业界标准的对象存储服务,具有以下优势: - 🏢 企业级服务 - 🔐 最高的安全性 - 📊 功能最完整 - 🌍 全球可用 - 📈 自动扩展 ## 账户设置 ### 1. 创建 AWS 账户 访问 [AWS 官网](https://aws.amazon.com/) 创建账户。新用户享受 12 个月免费套餐。 ### 2. 访问 S3 控制台 1. 登录 AWS 管理控制台 2. 搜索 "S3" 3. 进入 S3 服务 ## 创建存储桶 ### 1. 创建新桶 1. 点击 "创建存储桶" 2. 输入存储桶名称(例如 `my-cloud-storage`) - 名称必须全局唯一 - 只能包含小写字母、数字、连字符和点 3. 选择区域(例如 `ap-northeast-1` 东京) 4. **ACL** - 保持默认(禁用) 5. **阻止公有访问设置** - 根据需求配置(见下一步) 6. 点击 "创建存储桶" ### 2. 配置公开访问(可选) 若要让文件可以公开访问: 1. 进入存储桶 → "权限" 2. 找到 "阻止公有访问" 部分 3. 点击 "编辑" 4. **取消勾选** "阻止所有公有访问" 5. 点击 "保存" ### 3. 启用 ACL(仅在需要时) 1. 进入存储桶 → "权限" 2. 找到 "对象所有权" 部分 3. 点击 "编辑" 4. 选择 "ACL 已启用" 5. 点击 "保存" ## 创建 IAM 用户和凭证 ### 1. 创建 IAM 用户 使用 IAM 用户而不是根账户更安全: 1. 进入 IAM 控制台 2. 左侧菜单 → "用户" 3. 点击 "创建用户" 4. 输入用户名(例如 `Cloud Index-user`) 5. 点击 "创建用户" ### 2. 配置权限 #### 方式 A:使用托管策略(推荐) 1. 进入用户详情 2. 点击 "添加权限" → "直接附加现有策略" 3. 搜索 "AmazonS3FullAccess" 4. 勾选并点击 "下一步" 5. 点击 "添加权限" #### 方式 B:使用自定义策略(更安全) 1. 进入用户详情 2. 点击 "添加权限" → "创建内联策略" 3. 选择 JSON 4. 粘贴以下策略: ```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/*" } ] } ``` 5. 点击 "创建策略" ### 3. 创建访问密钥 1. 进入用户详情 2. 点击 "安全凭证" 选项卡 3. 向下滚动到 "访问密钥" 4. 点击 "创建访问密钥" 5. 选择 "其他" 6. 点击 "下一步" 7. 复制 **Access Key ID** 和 **Secret Access Key** 8. 保存到安全位置 **⚠️ 重要**: 密钥只显示一次,请立即保存! ## 配置环境变量 编辑 `.env` 文件: ```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 ```env S3_PUBLIC_URL=https://bucket-name.s3.region.amazonaws.com ``` ### 方式 B:使用 CloudFront CDN 1. 进入 CloudFront 控制台 2. 点击 "创建分配" 3. 源域名:选择你的 S3 存储桶 4. 其他设置保持默认 5. 点击 "创建分配" 6. 等待部署(约 15-20 分钟) 7. 复制分配域名 配置环境变量: ```env S3_PUBLIC_URL=https://d123abc456.cloudfront.net ``` ### 方式 C:使用自定义域名 1. 使用 Route 53 或其他 DNS 服务 2. 创建 CNAME 记录指向 S3 或 CloudFront 3. 配置 SSL 证书 ```env S3_PUBLIC_URL=https://assets.example.com ``` ## 启用 CORS(如需跨域请求) 1. 进入存储桶 2. 点击 "权限" 3. 向下滚动到 "CORS" 4. 点击 "编辑" 5. 粘贴以下配置: ```json [ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"], "AllowedOrigins": ["*"], "ExposeHeaders": ["ETag"] } ] ``` 6. 点击 "保存更改" ## 启用版本控制(可选) 1. 进入存储桶 2. 点击 "属性" 3. 找到 "版本控制" 4. 点击 "编辑" 5. 选择 "启用" 6. 点击 "保存更改" ## 启用生命周期规则(自动清理) 自动删除过期文件以节省成本: 1. 进入存储桶 2. 点击 "管理" 3. 点击 "创建生命周期规则" 4. 输入规则名称(例如 `delete-old-cache`) 5. 配置规则: - **前缀**:可选(如 `cache/`) - **对象年龄**:30 天后删除 - **过期对象删除标记**:勾选 6. 点击 "创建规则" ## 获取帮助 - 📖 [AWS S3 官方文档](https://docs.aws.amazon.com/s3/) - 📖 [AWS SDK for Python 文档](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) - 🐛 [提交 Issue](https://github.com/RhenCloud/Cloud-Index/issues>) - 💬 [讨论区](https://github.com/RhenCloud/Cloud-Index/discussions) ## 下一步 - 🚀 [快速开始](../guide/quickstart.md) - 开始使用应用 - 📖 [存储后端对比](./overview.md) - 对比其他服务 - 💾 [Cloudflare R2 配置](./r2.md) - R2 配置指南