Javascript 直接上传到S3时进入控制台的禁止错误403

Javascript 直接上传到S3时进入控制台的禁止错误403,javascript,django,amazon-web-services,amazon-s3,file-upload,Javascript,Django,Amazon Web Services,Amazon S3,File Upload,我是通过服务器上传图像到s3,但我想使用直接上传到s3,因为上传速度很快。 我使用了django-s3direct包直接上传。 我遵循了所有步骤,但仍然得到了这个错误 上载时,控制台中出现错误: POST https://s3-ap-south-1.amazonaws.com/collegestudentworld-assets/img/mainpost/amar.jpg?uploads 403 (Forbidden) initiate error: collegestudentworld-a

我是通过服务器上传图像到s3,但我想使用直接上传到s3,因为上传速度很快。 我使用了
django-s3direct
包直接上传。 我遵循了所有步骤,但仍然得到了这个错误

上载时,控制台中出现错误:

POST https://s3-ap-south-1.amazonaws.com/collegestudentworld-assets/img/mainpost/amar.jpg?uploads 403 (Forbidden)

initiate error: collegestudentworld-assets/img/mainpost/amar.jpg AWS Code: AccessDenied, Message:Access Deniedstatus:403
settings.py:

AWS_ACCESS_KEY_ID = os.environ.get('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = os.environ.get('AWS_SECRET_ACCESS_KEY')
AWS_STORAGE_BUCKET_NAME =os.environ.get('AWS_STORAGE_BUCKET_NAME')

AWS_S3_ENDPOINT_URL = 'https://s3-ap-south-1.amazonaws.com'
#'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/' #"https://collegestudentworld-assets.s3-website.ap-south-1.amazonaws.com/"
AWS_S3_REGION_NAME = 'ap-south-1'
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

STATIC_URL = 'http://' + AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/'
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
S3DIRECT_DESTINATIONS = {
    'primary_destination': {
        'key': 'uploads/',
        'allowed': ['image/jpg', 'image/jpeg', 'image/png', 'video/mp4'],
    },
    'mainpost':{
        'key':'img/mainpost/',
        'auth': lambda u:u.is_authenticated
    },
}
桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads",
                "s3:ListBucketVersions"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:*Object*",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        }
    ]
}
CORS配置:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>http://127.0.0.1:8000</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
    <AllowedOrigin>*.collegestudentworld.com</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <ExposeHeader>ETag</ExposeHeader>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
编辑:

当我将阻止公共访问(存储桶设置)设为**关闭时。然后一切正常**

但我有用户信息,这是私人的。我不想公开。
可以公开吗。。如果用户的IAM策略设置正确,您可以尝试以下建议。您可以尝试在bucket策略中添加值,而不是IAM策略。还要确保
阻止公共访问(帐户设置)
处于禁用状态,并且您的存储桶具有公共访问权限

您可以尝试以下解决方案:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3Permissions",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        }
    ]
}
您还可以删除
http://127.0.0.1:8000
CORS
设置,也可以尝试网站或电子商务环境名称的完整路径

 <?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*.collegestudentworld.com</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>

*.collegestudentworld.com
得到

这是我使用的IAM策略。我会确保附加到上载策略的IAM用户附加了正确的IAM策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:ListBucketVersions",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:HeadBucket"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:*Object*",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        }
    ]
}

403表示您没有访问权限。您的代码看起来好像没有向任何东西提供
AWS\u SECRET\u ACCESS\u KEY
。您是否查看了API文档以了解发送请求的正确方式?您是否可以为用户发布IAM策略?thanx以获得快速回复。。。它在直接上传之前就已经工作了AWS_SECRECT_ACCESS_KEY'正确。我将再次查看文档。我是从这里来的@SvenWritesCode@jellycsc我在问题桶策略中显示的IAM策略。请检查一下。从这里开始。。他们给出了两个选项,一个是IAM,另一个是EC2。请马上看。在django-s3direct之前,我使用django-s3direct直接上传。一切都很完美。我通过服务器上传了图片,但上传要花很多时间。然后我使用django-s3direct直接上传。但我得到了那个错误。我按照django-s3direct的文档做了所有事情。问题是公共访问被阻止。我的政策是正确的。但我不想公开访问,因为用户的信息是私有的。有没有办法我不太明白你的意思。您能否确认您编写的策略已通过相应的
AWS\u ACCESS\u KEY\u ID
附加到用户?
AWS\u ACCESS\u KEY\u ID
已附加到用户。当我关闭“阻止公共访问”时,它就工作了。但是,当我打开“阻止公共访问”时,就会出现禁止的错误。但我的访问密钥id和用户已连接。如果没有直接上传,它就可以正常工作(阻止公共访问处于打开状态),只是占用了很多时间。所以我尝试直接上传,但我得到以上错误。我很抱歉,如果我是多余的。我试图弄清楚由
AWS\u ACCESS\u KEY\u ID
定义的用户是否将您创建的策略附加到该用户。如果我不清楚的话,这里有一个url可能会有所帮助:如果它公开运行,你就快到终点了。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucketMultipartUploads",
                "s3:ListBucketVersions",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:HeadBucket"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:*Object*",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": "arn:aws:s3:::collegestudentworld-assets/*"
        }
    ]
}