# AWS S3 上传 - 无法在未设置凭据的情况下签名请求

**URL:** https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266
**Category:** Support
**Created:** [2024年十二月13日 11:49 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266 "2024-12-13T11:49:41Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![Wurzelseppi](https://avatars.discourse-cdn.com/v4/letter/w/eada6e/32.png) [@Wurzelseppi](https://meta.discourse.org/u/Wurzelseppi)
#### Post date: [2024年十二月13日 11:49 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/1 "2024-12-13T11:49:41Z")

</div>

大家好，

我正在使用 3.4.0.beta3-dev，并且在尝试将图片上传到主题时遇到了提到的错误（仅在 UI 中，日志中没有）。

我的配置如下：

```plaintext
["s3_upload_bucket", "<bucketname>/discourse-uploads"],
["s3_backup_bucket", "<bucketname>/discourse-backups"],
["s3_region", "eu-central-1"],
["s3_use_acls", "f"],
["enable_direct_s3_uploads", "f"],
["enable_s3_uploads", "t"],
["s3_access_key_id", ""],
["s3_secret_access_key", ""]]

```

我正在使用 ec2 实例配置文件并覆盖凭据。

 ![image](https://global.discourse-cdn.com/meta/original/4X/c/7/f/c7f1f8cd268729b0f418ebf500e8d5e324a341ee.png)

我在 UI 中收到错误：

 ![image](https://global.discourse-cdn.com/meta/original/4X/b/c/8/bc84760a6df42cdf346d2e73e6a8e6ae253e9aaa.png)

但日志显示一切正常：

```plaintext
Started POST "/uploads.json?client_id=bb1ab05dbb9d4d1f9930d05f28b17f94" for 10.x.x.x at 2024-12-13 11:46:35 +0000
Processing by UploadsController#create as JSON
  Parameters: {"upload_type"=>"composer", "pasted"=>"true", "name"=>"image.png", "type"=>"image/png", "sha1_checksum"=>"a0f0fe1abd27ce137e0e1b2a28cd9348a08112ff", "file"=>#<ActionDispatch::Http::UploadedFile:0x00007f50b8b01db8 @tempfile=#<Tempfile:/tmp/RackMultipart20241213-386-i7xkqa.png>, @content_type="image/png", @original_filename="image.png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"image.png\"\r\nContent-Type: image/png\r\n">, "client_id"=>"bb1ab05dbb9d4d1f9930d05f28b17f94"}
Completed 200 OK in 36ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
Completed 418 in 23ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.4ms)

```

之后存储桶是空的（我刚用一个新存储桶设置好）。

有什么建议吗？

谢谢，

WS

---

<div class="post-metadata">

### Author: ![MihirR](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mihirr/32/475158_2.png) [@MihirR](https://meta.discourse.org/u/MihirR)
#### Post date: [2024年十二月13日 14:39 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/2 "2024-12-13T14:39:24Z")

</div>

确保您的 EC2 实例具有上传到 S3 的正确权限，例如 `s3:PutObject` 和 `s3:GetObject`。仔细检查您的 S3 存储桶的区域和访问设置。如果需要，您可能还想尝试启用 `s3_use_acls: true`。您也可以尝试使用 AWS CLI 直接上传来排除权限问题。如果您不使用直接上传，请将 `enable_direct_s3_uploads: f` 保持原样。应该有助于解决问题！

---

<div class="post-metadata">

### Author: ![Wurzelseppi](https://avatars.discourse-cdn.com/v4/letter/w/eada6e/32.png) [@Wurzelseppi](https://meta.discourse.org/u/Wurzelseppi)
#### Post date: [2024年十二月13日 17:04 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/3 "2024-12-13T17:04:39Z")

</div>

嗯……

我的 EC2 实例角色策略看起来是这样的：

```json
[
    {
    "Action": [
        "s3:PutObject",
        "s3:AbortMultipartUpload",
        "s3:PutLifecycleConfiguration",
        "s3:PutObjectVersionAcl",
        "s3:PutBucketCORS",
        "s3:DeleteObject",
        "s3:PutObjectAcl",
        "s3:Get*",
        "s3:List*"
    ],
    "Resource": [
        "arn:aws:s3:::<data-bucket>",
        "arn:aws:s3:::<data-bucket>/*",
        "arn:aws:s3:::<backup-bucket>",
        "arn:aws:s3:::<backup-bucket>/*"
    ],
    "Effect": "Allow"
}
]

```

存储桶权限看起来是这样的，但安全中心已经对我大喊大叫，说它太开放了 ☹

 ![图片是亚马逊网络服务（AWS）中一个存储桶的公共访问设置配置页面的截图。(由人工智能标注)](https://global.discourse-cdn.com/meta/original/4X/0/e/4/0e4272ed3af2bf10b92f2296a6218053d50e7ffa.png)

我可以通过 CLI 从 EC2 实例上传文件而没有问题（在这种情况下，实例配置文件可以正常工作）。

更新：注意到上传进度达到 100%，之后我才收到错误（不得不快速使用 Greenshot 捕捉到这个 😃 ）

 ![图片是论坛或讨论板界面的截图，其中包含文本编辑器和一个显示图像上传过程的进度条。(由人工智能标注)](https://global.discourse-cdn.com/meta/original/4X/c/b/3/cb309205ebe9be1c4b138d19658e29dd44b35d37.png)

嗯……似乎它成功上传了分段，但之后未能完成该过程。

---

<div class="post-metadata">

### Author: ![Wurzelseppi](https://avatars.discourse-cdn.com/v4/letter/w/eada6e/32.png) [@Wurzelseppi](https://meta.discourse.org/u/Wurzelseppi)
#### Post date: [2024年十二月13日 19:50 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/4 "2024-12-13T19:50:17Z")

</div>

现在已尝试设置具有凭证的 IAM 用户，并授予其 s3:\* 权限，现在上传可以正常工作，但 Discourse 之后无法显示它：

 ![图像加载失败，导致出现黑色屏幕并显示文本“无法加载图像”。(由 AI 添加说明)](https://global.discourse-cdn.com/meta/original/4X/a/8/f/a8fe1bc547ba85d8e369c281e86323715d8d8d11.png)

由于我在一家公司工作，并且我们的账户中启用了 SCP（服务控制策略），因此似乎公共访问通常被阻止

 ![图像显示了一个设置页面，其中一个 Amazon S3 存储桶的公共访问被阻止。(由 AI 添加说明)](https://global.discourse-cdn.com/meta/original/4X/5/d/c/5dc96f9163c028db9855ab0802c5382f41d01c53.png)

对我（以及所有在账户中有相同限制的人）来说，似乎没有 S3 了

我现在放弃了…… ☹

---

<div class="post-metadata">

### Author: ![MihirR](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mihirr/32/475158_2.png) [@MihirR](https://meta.discourse.org/u/MihirR)
#### Post date: [2024年十二月17日 10:42 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/5 "2024-12-17T10:42:05Z")

</div>

> [@Wurzelseppi](#):
>
> 公共访问

希望这能帮到你：[https://www.youtube.com/watch?v=qjebh5AOZ8E](https://www.youtube.com/watch?v=qjebh5AOZ8E) 。如果贵公司没有明确阻止，这应该对你有用。

---

<div class="post-metadata">

### Author: ![Evan\_Mallory1](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/evan_mallory1/32/473921_2.png) [@Evan\_Mallory1](https://meta.discourse.org/u/Evan_Mallory1)
#### Post date: [2024年十二月17日 16:33 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/6 "2024-12-17T16:33:59Z")

</div>

我在这里遇到了与原始发帖人相同的错误消息，配置也类似。我已验证，尽管 Discourse 无法做到，但我可以从我的 EC2 实例使用 AWS CLI 获取和放置 S3 对象。

我创建了一个新的 IAM 用户，其权限策略与我的 EC2 实例角色相同，并使用了访问密钥而不是 EC2 实例配置文件，现在上传工作正常。

所以，在我的例子中，这不是更改权限的问题，这让我认为实例配置文件身份验证可能存在 bug。有什么方法可以让我获取有关此失败原因的更多信息吗？

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2025年一月16日 16:34 UTC](https://meta.discourse.org/t/aws-s3-upload-unable-to-sign-request-without-credentials-set/342266/7 "2025-01-16T16:34:35Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
