SES 生成的 AWS S3 MimeMessage 文件在被 java SDK 访问时导致 403
AWS S3 MimeMessage files generated by SES cause 403 when accessed by java SDK
所以我整天都在处理这个问题,但我似乎找不到这个问题的原因。
我在 SES 中有一个操作,可以将特定子域中的所有电子邮件转发到特定存储桶。这些消息可以很好地下载并包含在控制台中交互时的所有必要信息,但无法使用 Java SDK 中的 getObject() 检索。
我可以确认 SDK 凭据正常工作,因为我可以从同一个存储桶下载其他文件,即使通过我的代码使用相同的密钥前缀也是如此。
这证明我的存储桶策略设置正确。处理 getObject 权限的条目如下所示:
{
"Sid": "EmailsAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:DeleteObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::foo-bucket-foo/foo-prefix-foo/*"
}
我确定问题的根本原因与所有者有关,因为在 SES 生成的每个文件中都将其定义为 "aws-ses+publishing.us-east-1.prod"。为什么这会导致我的代码出现 403?有什么办法可以更改文件的所有者,或者有更优雅的解决方案吗?
我发现问题在于 SDK 中使用的帐户与存储桶所有者不同,并且没有查看这些特定消息的权限。
遵循 this guide 可以解决问题,但我们决定走另一条路,并尝试使用存储桶所有者帐户登录。
所以我整天都在处理这个问题,但我似乎找不到这个问题的原因。
我在 SES 中有一个操作,可以将特定子域中的所有电子邮件转发到特定存储桶。这些消息可以很好地下载并包含在控制台中交互时的所有必要信息,但无法使用 Java SDK 中的 getObject() 检索。
我可以确认 SDK 凭据正常工作,因为我可以从同一个存储桶下载其他文件,即使通过我的代码使用相同的密钥前缀也是如此。
这证明我的存储桶策略设置正确。处理 getObject 权限的条目如下所示:
{
"Sid": "EmailsAccess",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:DeleteObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::foo-bucket-foo/foo-prefix-foo/*"
}
我确定问题的根本原因与所有者有关,因为在 SES 生成的每个文件中都将其定义为 "aws-ses+publishing.us-east-1.prod"。为什么这会导致我的代码出现 403?有什么办法可以更改文件的所有者,或者有更优雅的解决方案吗?
我发现问题在于 SDK 中使用的帐户与存储桶所有者不同,并且没有查看这些特定消息的权限。
遵循 this guide 可以解决问题,但我们决定走另一条路,并尝试使用存储桶所有者帐户登录。