首页 > 解决方案 > 未能在 S3 上上传公开可用的文件

问题描述

我正在尝试使用 Boto3 在 S3 上上传一个公开可用的文件,但我收到以下错误消息:

boto3.exceptions.S3UploadFailedError: Failed to upload 1.txt to my-texts/1.txt: An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

这是我的政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:ListBucket",
        "Resource": "arn:aws:s3:::my-texts"
    },
    {
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::my-texts/*"
    }
]

}

这是失败的代码:

s3_client = boto3.client('s3',
                             aws_access_key_id=aws_access_key_id,
                             aws_secret_access_key=aws_secret_access_key,
                             aws_session_token=aws_session_token,
                             region_name='us-east-1')
s3_client.upload_file(video_file_name, bucket_name, video_file_name, ExtraArgs={'ACL': 'public-read'})

如果我省略 ExtraArgs 我成功上传文件:

s3_client = boto3.client('s3',
                             aws_access_key_id=aws_access_key_id,
                             aws_secret_access_key=aws_secret_access_key,
                             aws_session_token=aws_session_token,
                             region_name='us-east-1')
s3_client.upload_file(video_file_name, bucket_name, video_file_name)

谢谢,帕维尔

标签: pythonamazon-s3boto3

解决方案


推荐阅读