首页 > 解决方案 > 尝试编写使用 BOTO 将 EC2 实例中的任何数据上传到 S3 存储桶的脚本时几乎没有错误

问题描述

我一直在尝试将我的 EC2 实例备份到 S3 存储桶,但在运行文件时遇到了一些错误。最值得注意的错误是 S3ResponceError: 403 Forbidden

仅供参考,我正在使用我的 aws 访问密钥 ID,来自 Rossetahub 的访问密钥(由学校提供)

下面是我写的代码

import boto
import boto.s3
import os.path
import sys
AWS_ACCESS_KEY_ID = '' 
AWS_ACCESS_KEY_SECRET = ''

bucket_name = 'bucketpoly'
sourceDir = 'example_files/'
destDir = 'example_files1/'
conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_KEY_SECRET)
bucket= conn.get_bucket(bucket_name)
uploadFileNames = []

for (sourceDir, dirname, filename) in os.walk(sourceDir):
    uploadFileNames.extend(filename)
    break


def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()



for filename in uploadFileNames:

    sourcepath = os.path.join(sourceDir + filename)

    destpath = os.path.join(destDir, filename)

    print ('Uploading %s to Amazon S3 bucket %s' % 
           (sourcepath, bucket_name))



print ("singlepart upload")

k = boto.s3.key.Key(bucket)

k.key = destpath

k.set_contents_from_filename(sourcepath, cb=percent_cb, num_cb=10)



这是由此产生的错误

Traceback (most recent call last):
  File "/home/student/Desktop/PROJECT FILES/testing2.py", line 11, in <module>
    bucket= conn.get_bucket(bucket_name)
  File "/usr/local/lib/python3.5/dist-packages/boto/s3/connection.py", line 509, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "/usr/local/lib/python3.5/dist-packages/boto/s3/connection.py", line 542, in head_bucket
    raise err
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden

你认为这可能是什么问题?

标签: amazon-s3boto3botoaws-clibotocore

解决方案


403 Forbidden IAM权限不足导致。根据错误,IAM 用户没有 Listobject 和 Listbucket 权限。

这是您可以用来开始使用 S3 权限的链接:

https://docs.aws.amazon.com/AmazonS3/latest/dev/s3-access-control.html


推荐阅读