# AWS S3 配置指南

## 1. 创建 S3 Bucket

1. 登录 AWS 控制台
2. 进入 S3 服务
3. 点击"创建存储桶"
4. 输入存储桶名称（如：`my-audio-recordings`）
5. 选择区域（建议选择离用户最近的区域）
6. 保持默认设置，点击"创建存储桶"

## 2. 配置 Bucket 权限（重要！）

### 必须配置公开读取权限

**当前问题：浏览器无法直接访问 S3 文件，需要配置公开读取权限**

1. 进入你的 S3 Bucket
2. 点击"权限"标签
3. **取消勾选"阻止公有访问"**：

   - 取消勾选"阻止公有访问"
   - 点击"保存更改"
   - 在确认对话框中输入 "confirm"

4. **添加存储桶策略**：
   - 在"存储桶策略"部分点击"编辑"
   - 添加以下策略：

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
```

**注意：**

- 将 `your-bucket-name` 替换为你的实际 Bucket 名称
- 这个策略允许任何人读取 Bucket 中的文件
- 如果需要更严格的权限控制，可以考虑使用 CloudFront CDN

## 3. 配置 CORS（重要！）

**必须配置 CORS 才能解决上传问题：**

1. 进入你的 S3 Bucket
2. 点击"权限"标签
3. 找到"CORS"部分，点击"编辑"
4. 添加以下 CORS 配置：

```json
[
  {
    "AllowedHeaders": ["*"],
    "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
    "AllowedOrigins": ["http://localhost:3000", "https://your-domain.com"],
    "ExposeHeaders": ["ETag"],
    "MaxAgeSeconds": 3000
  }
]
```

**注意：**

- 将 `your-domain.com` 替换为你的实际域名
- 开发环境保留 `http://localhost:3000`
- 生产环境添加你的实际域名

## 4. 创建 IAM 用户

1. 进入 IAM 服务
2. 点击"用户" → "创建用户"
3. 输入用户名（如：`audio-recorder-app`）
4. 选择"程序化访问"
5. 点击"下一步：权限"
6. 选择"直接附加策略"
7. 搜索并选择 `AmazonS3FullAccess`（或创建自定义策略）
8. 完成创建

## 5. 获取访问密钥

1. 点击创建的用户
2. 点击"安全凭据"标签
3. 点击"创建访问密钥"
4. 选择"应用程序运行在 AWS 外部"
5. 下载 CSV 文件或复制 Access Key ID 和 Secret Access Key

## 6. 配置环境变量

复制 `env.example` 为 `.env.local`，并填入你的配置：

```bash
# AWS S3 Configuration
AWS_ACCESS_KEY_ID="your-access-key-id"
AWS_SECRET_ACCESS_KEY="your-secret-access-key"
AWS_REGION="us-east-1"  # 替换为你的区域
AWS_S3_BUCKET="your-bucket-name"
```

## 7. 自定义 IAM 策略（可选）

为了安全，建议创建自定义策略，只允许特定操作：

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::your-bucket-name/recordings/*"
    }
  ]
}
```

## 8. 测试配置

1. 启动开发服务器：`npm run dev`
2. 尝试录制并上传音频
3. 检查 S3 Bucket 中是否出现文件
4. 验证音频播放功能

## 注意事项

- 确保 S3 Bucket 名称全局唯一
- **重要：必须配置公开读取权限才能播放音频**
- **重要：必须配置 CORS 才能解决上传问题**
- 定期轮换访问密钥
- 监控 S3 使用量和费用
- 考虑设置生命周期策略自动清理旧文件
- 生产环境建议使用 CDN 加速音频播放
