将大型文件上传到S3,而无需使用Python进行身份验证

时间:2018-09-02 03:12:33

标签: python amazon-web-services amazon-s3 octoprint

我正在尝试不使用凭证将大文件上传到Amazon S3。我正在为此创建一个用于Octoprint的插件,由于它是公开的,因此无法在代码中放入任何种类的凭据。目前,我的上传代码如下:

import boto3
from botocore import UNSIGNED
from botocore.client import Config

s3 = boto3.client('s3', config=Config(signature_version=UNSIGNED))

# Create an S3 client


filename = 'file.txt'
bucket_name = 'BUCKET_HERE'

s3.upload_file(filename, bucket_name, filename)

但是,它给了我以下错误:

S3UploadFailedError: Failed to upload largefiletest.mp4 to BUCKETNAMEHERE/largefiletest.mp4: An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Anonymous users cannot initiate multipart uploads.  Please authenticate.

是否有任何解决方法,或者对替代库有任何建议吗?任何事情都值得赞赏。

1 个答案:

答案 0 :(得分:1)

您是说存储库是公共的,而运行时环境是私有的?如果是这样,标准做法是设置环境变量,如下所示:

# first pip install environ
import environ
SOME_KEY = env('SOME_KEY', default='')

这样,您可以轻松更新凭据,而无需更改代码或损害安全性。

编辑: 然后在机器上运行此代码,您可以这样设置环境变量: