约 10 分钟

如何在 Aktar 中使用 Amazon S3

Amazon S3 是对象存储的鼻祖,可通过 Aktar 的 Amazon S3 预设使用。唯一需要注意的是公开访问:S3 默认会阻止公开访问,因此你需要添加允许公开读取的存储桶策略,或在存储桶前面加一层 CloudFront。

准备工作

  • 一个 AWS 账号
  • 创建 S3 存储桶和 IAM 用户的权限
  • 已在 Mac 上安装 Aktar

操作步骤

  1. 1

    创建存储桶

    在 S3 控制台中点击 Create bucket,选择一个全局唯一的名称和离你最近的区域,例如 eu-central-1。对象所有权可以保持默认的“Bucket owner enforced”:Aktar 不使用 ACL。

  2. 2

    允许公开读取

    方案 A,存储桶策略:在存储桶的 Permissions 选项卡中,关闭阻止公开存储桶策略的“Block public access”设置,然后添加以下存储桶策略(将 YOUR-BUCKET 替换为你的存储桶名称):

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Sid": "PublicRead",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR-BUCKET/*"
      }]
    }

    方案 B,CloudFront:保持存储桶私有,创建一个以该存储桶为源站的 CloudFront 分配(使用 Origin Access Control)。这样可以在自定义域名上启用 HTTPS 并获得缓存。

  3. 3

    为 Aktar 创建 IAM 用户

    在 IAM 中创建一个用户,并附加一个仅允许 Aktar 在该存储桶上执行必要操作的策略:

    {
      "Version": "2012-10-17",
      "Statement": [
        { "Effect": "Allow", "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::YOUR-BUCKET" },
        { "Effect": "Allow",
          "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
          "Resource": "arn:aws:s3:::YOUR-BUCKET/*" }
      ]
    }

    然后为该用户创建一个 access key,复制 Access Key ID 和 Secret Access Key。

  4. 4

    在 Aktar 中添加上传目标

    在 Settings → Destinations → Add Destination 中选择 Amazon S3,填写下表中的值。端点和区域必须与存储桶所在区域一致。

  5. 5

    测试并保存

    点击 Test Connection,确认存储桶可写且公开 URL 能正常提供文件,然后点击 Save。

Aktar 中的设置

在 Settings → Destinations → Add Destination 中填写以下值。字段名称与应用内保持一致。

字段示例值
ProviderAmazon S3
Endpointhttps://s3.eu-central-1.amazonaws.com使用存储桶所在的区域。
Regioneu-central-1
Access Key IDAKIA…来自 IAM 用户。
Secret Access Key••••••••
Bucketyour-bucket
Public Base URLyour-bucket.s3.eu-central-1.amazonaws.com或你的 CloudFront 域名。

小技巧

  • 如果要公开分享链接,推荐使用 CloudFront 加自定义域名:既能获得缓存,又能让存储桶本身保持私有。
  • 将 IAM 策略限定在单个存储桶上。Aktar 从不需要整个账号级别的权限。
  • 选择离你近的区域可以加快上传;如果不使用 CDN,也要兼顾离访问者近。

故障排查

Test Connection 报告区域错误或重定向错误

端点和区域必须与创建存储桶时选择的区域一致,例如 https://s3.eu-central-1.amazonaws.com 搭配 eu-central-1。

上传失败,提示 Access Denied

IAM 用户需要对 YOUR-BUCKET/* 拥有 s3:PutObject 权限,并对存储桶本身拥有 s3:ListBucket 权限。

链接返回 403

缺少存储桶策略,或策略仍被“Block public access”阻止,又或者 CloudFront 无法读取存储桶。参见 Access Denied 错误。

仍然遇到问题?浏览常见问题,或在 GitHub 上提问。