大家好,
我正在使用 3.4.0.beta3-dev,并且在尝试将图片上传到主题时遇到了提到的错误(仅在 UI 中,日志中没有)。
我的配置如下:
["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 实例配置文件并覆盖凭据。
我在 UI 中收到错误:
但日志显示一切正常:
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
1 个赞
MihirR
(Mihir)
2
确保您的 EC2 实例具有上传到 S3 的正确权限,例如 s3:PutObject 和 s3:GetObject。仔细检查您的 S3 存储桶的区域和访问设置。如果需要,您可能还想尝试启用 s3_use_acls: true。您也可以尝试使用 AWS CLI 直接上传来排除权限问题。如果您不使用直接上传,请将 enable_direct_s3_uploads: f 保持原样。应该有助于解决问题!
1 个赞
嗯……
我的 EC2 实例角色策略看起来是这样的:
[
{
"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"
}
]
存储桶权限看起来是这样的,但安全中心已经对我大喊大叫,说它太开放了 
我可以通过 CLI 从 EC2 实例上传文件而没有问题(在这种情况下,实例配置文件可以正常工作)。
更新:注意到上传进度达到 100%,之后我才收到错误(不得不快速使用 Greenshot 捕捉到这个
)
嗯……似乎它成功上传了分段,但之后未能完成该过程。
现在已尝试设置具有凭证的 IAM 用户,并授予其 s3:* 权限,现在上传可以正常工作,但 Discourse 之后无法显示它:
由于我在一家公司工作,并且我们的账户中启用了 SCP(服务控制策略),因此似乎公共访问通常被阻止
对我(以及所有在账户中有相同限制的人)来说,似乎没有 S3 了
我现在放弃了…… 
MihirR
(Mihir)
5
希望这能帮到你:https://www.youtube.com/watch?v=qjebh5AOZ8E 。如果贵公司没有明确阻止,这应该对你有用。
我在这里遇到了与原始发帖人相同的错误消息,配置也类似。我已验证,尽管 Discourse 无法做到,但我可以从我的 EC2 实例使用 AWS CLI 获取和放置 S3 对象。
我创建了一个新的 IAM 用户,其权限策略与我的 EC2 实例角色相同,并使用了访问密钥而不是 EC2 实例配置文件,现在上传工作正常。
所以,在我的例子中,这不是更改权限的问题,这让我认为实例配置文件身份验证可能存在 bug。有什么方法可以让我获取有关此失败原因的更多信息吗?
system
(system)
关闭
7
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.