无法在Heroku中找到S3 Flask应用程序的凭据

问题描述 投票:0回答:1

我的烧瓶应用程序可在本地与AWS S3存储桶一起使用,但是当我尝试使其在Heroku中运行时,我一直收到此错误

2020-06-07T00:58:29.174989+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/botocore/signers.py", line 160, in sign
2020-06-07T00:58:29.174989+00:00 app[web.1]:     auth.add_auth(request)
2020-06-07T00:58:29.174989+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/botocore/auth.py", line 357, in add_auth
2020-06-07T00:58:29.174989+00:00 app[web.1]:     raise NoCredentialsError
2020-06-07T00:58:29.174994+00:00 app[web.1]: botocore.exceptions.NoCredentialsError: Unable to locate credentials

我已经讨论了这个问题一天多了。这是我的app.py文件中的代码段。

from flask import render_template, request, redirect, url_for
import boto3, os, zipfile, io


AWS_STORAGE_BUCKET_NAME ="some bucket"   

AWS_ACCESS_KEY_ID="some key"
AWS_SECRET_ACCESS_KEY="some secret key"


s3 = boto3.client(
    "s3",
    aws_access_key_id = AWS_ACCESS_KEY_ID,
    aws_secret_access_key = AWS_SECRET_ACCESS_KEY)
s3_resource = boto3.resource("s3")
my_bucket = s3_resource.Bucket(AWS_STORAGE_BUCKET_NAME)

而且,在我的存储桶中,我通过从文档中粘贴此配置来配置CORS配置。

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

我的requirements.txt文件

Flask==1.1.1
Flask_SQLAlchemy==2.4.1
Werkzeug==1.0.0
Flask_WTF==0.14.3
SQLAlchemy==1.3.13
arrow==0.15.6
alembic==1.4.2
boto3==1.13.16
boto==2.49.0
botocore==1.16.16
Flask_Migrate==2.5.3
Pillow==7.1.2
psycopg2==2.8.4
gunicorn==19.9.0
requests==2.22.0
certifi==2019.6.16
chardet==3.0.4
Click==7.0
distributed==2.1.0
gunicorn==19.9.0
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
pytz==2019.1

[我目前在我的简单应用程序中所做的就是从存储桶中读取文件名,并将其显示在主页上。在我的本地应用程序上工作正常,但在heroku上却无法正常工作。任何帮助将不胜感激。

python flask heroku amazon-s3
1个回答
0
投票

我不确定向客户端方法提供身份验证参数是否会扩展到调用资源。 boto3.resource是否未在heroku上进行身份验证,但可以通过环境变量或.aws目录在本地计算机上获得身份验证。您是否尝试过在Heroku中将机密设置为环境变量(请参阅:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html),还是使用经过身份验证的会话来创建资源:

session = boto3.Session( aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

s3 = session.resource('s3')
© www.soinside.com 2019 - 2024. All rights reserved.