尝试使用 aws sdk 中的预先身份验证 token 将文件从浏览器直接 POST 到 S3 时,出现以下错误
Invalid Policy: Invalid Simple-Condition: Simple-Conditions must have exactly one property specified.
我有一个 Angular 应用程序,我希望用户直接将文件上传到 S3,而不需要由我的服务器处理。我用这个作为指南 https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html
我使用 aws sdk 生成凭证并最终得到如下所示的内容,我将其附加到我的 formData 并发布到 s3
Key: "e1ace7-d3c-9846-87b9-48beed3768"
Policy: "eyJleHUsoiF0aW9uIjoiMjAyMC0wNy0yOFQxNTozMzoxMFoiLCJjb25kaXRpb25zIjpbeyJLZXkiOiJlMTcxYWNlNy1kM2NjLTQ4NTgtOiOS00OGJlZWQifSx7ImJ1Y2tldCI6Imxvd3kudGVt12cG9yYXJ5LnVwbG9hEFVtcWEifSx7IlgtQW16LUFsZ29yaXRobSI6IkFXE1BQy1TSEEyNTYddifSx7IlgtEG16LUNyZc4WRlbnRWwiOiJBS0lBUlFMSFlHU01XM1QyVlJNVC8yMDIwMDcyOC91cy1lYXbN0LTEvczMvYXdzNF9yZXF1ZXN0In0seyJYLUFtIjoiMjAyMDA3MjhaeUMTQzMzEwWiJ9XX0="
X-Amz-Algorithm: "AWS4-HMAC-SHA256"
X-Amz-Credential: "AKIOWEI78EVR/20200728/us-east-2/s3/aws4_request"
X-Amz-Date: "20200228T112310Z"
X-Amz-Signature: "25069f754c94b5f62fd1d2e632459asd1e62a3a8430b3ef952dde64d9cb8"
bucket: "mybucketname"
然后将其发布到 https://mybucketname.s3.amazonaws.com/
并收到以下错误:(
Invalid Policy: Invalid Simple-Condition: Simple-Conditions must have exactly one property specified.
我的 S3 存储桶根据此政策打开了 CORS
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>HEAD</AllowedMethod>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
我授权的 IAM 账户具有以下政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:Put*"
],
"Resource": [
"arn:aws:s3:::mybucketname/*"
]
}
]
}
基于简单条件必须指定一个属性的错误消息
我认为我只需要更改我的 iam 策略即可遵守,但我不确定如何操作? Web 用户应该能够将任何文件直接上传到相关的 S3 存储桶...
我无法在 IAM 文档中找到有关此错误的确切含义或如何指定一个属性或位置的任何内容。我确信这是一个小修复,我只是不确定在哪里。你猜我可以从哪里开始,简单条件必须只有一个属性?
最佳答案
结果我是如此接近,我必须在 aws javascript sdk 中的策略生成本身中指定 key ,而在我从 html post 端将其添加到表单之前
const client = new AWS.S3(options);
const form = await client.createPresignedPost(
{
Bucket: bucketname,
Fields: {
key: guid,
},
});
关于amazon-s3 - 通过表单 POST 将文件直接上传到 S3 时出现 AWS 策略错误 - 简单条件无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63156774/