# 密钥安全与最小权限

## 用专用子账号，不要用主账号密钥

插件的 AccessKey 会写入数据库。如果用云厂商主账号（阿里云 RAM、腾讯云子账号体系之外）的密钥，一旦数据库泄露，攻击者就能操作你账号下的所有资源。正确做法是为插件建一个**只有目标桶权限**的子账号。

## 阿里云 OSS 策略示例

在 RAM 访问控制新建用户（如 `wpsss-mysite`），创建 AccessKey，然后挂一条自定义策略：

```
{
  "Version": "1",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "oss:PutObject", "oss:GetObject", "oss:DeleteObject",
      "oss:GetObjectMeta", "oss:HeadObject",
      "oss:ListObjects", "oss:ListObjectsV2",
      "oss:GetBucketInfo", "oss:GetBucketLocation"
    ],
    "Resource": [
      "acs:oss:*:<你的UID>:<你的桶名>",
      "acs:oss:*:<你的UID>:<你的桶名>/*"
    ]
  }]
}
```

这套权限覆盖插件全部功能：上传、下载、删除、分片上传、桶间复制、体检。不需要的权限一个都不给。

## ECS 服务器免密钥（仅阿里云）

如果 WordPress 跑在阿里云 ECS 上，可以不填 AccessKey，改用 RAM 角色：在高级设置的「凭证」下拉选「ECS 实例 RAM 角色」，并填「RAM 角色名」，插件通过 ECS 元数据接口取临时密钥。临时密钥每小时轮换，比长期密钥更安全。注意安全组要放行 `100.100.100.200`（元数据服务）。

## 密钥的日常管理

- 设置页里已保存的密钥显示为「已保存」，留空保存时保持不变——换密钥时填新值，不用重填旧的。
- 导出设置 JSON 不包含密钥；换站迁移时密钥要重新填。
- 怀疑泄露就立刻在云控制台禁用该 AccessKey，插件侧换新的。

---