Amazon s3 通过表单POST将文件直接上载到S3时发生AWS策略错误-简单条件无效

Amazon s3 通过表单POST将文件直接上载到S3时发生AWS策略错误-简单条件无效,amazon-s3,amazon-iam,Amazon S3,Amazon Iam,在尝试使用aws sdk中的预验证令牌将文件从浏览器直接发布到S3时,我遇到以下错误 无效策略:无效的简单条件:简单条件必须具有 只指定了一个属性 我有一个angular应用程序,我希望用户直接将文件上传到S3,而不需要我的服务器进行处理。我用这个作为指导 我正在使用aws sdk生成凭证,并最终得到如下内容,我将其附加到formData并发布到s3 Key: "e1ace7-d3c-9846-87b9-48beed3768" Policy: "eyJleHUsoi

在尝试使用aws sdk中的预验证令牌将文件从浏览器直接发布到S3时,我遇到以下错误

无效策略:无效的简单条件:简单条件必须具有 只指定了一个属性

我有一个angular应用程序,我希望用户直接将文件上传到S3,而不需要我的服务器进行处理。我用这个作为指导

我正在使用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/
接收以下错误:(

无效策略:无效的简单条件:简单条件必须具有 只指定了一个属性

根据此政策,我的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策略即可遵守,但我不确定如何执行?web用户应该能够将任何文件直接上载到相关S3存储桶


我在IAM文档中找不到任何关于此错误的确切含义或如何指定一个属性或位置的信息。我确定这是一个小补丁,我不确定在哪里。任何从简单条件开始的猜测都必须有一个属性?

结果我非常接近,我必须在po中指定密钥licy生成本身在aws javascript sdk中,而在我之前,我是从html post端将其添加到表单中的

  const client = new AWS.S3(options);
  const form = await client.createPresignedPost(
  {
    Bucket: bucketname,
    Fields: {
      key: guid,
    },
  });
  const client = new AWS.S3(options);
  const form = await client.createPresignedPost(
  {
    Bucket: bucketname,
    Fields: {
      key: guid,
    },
  });