【发布时间】:2019-08-17 19:56:23
【问题描述】:
IAM 用户的 AWS 访问密钥 ID 显示在 img src 中
我想使用私有 S3 存储桶为 heroku 上的烧瓶应用程序提供静态文件,特别是图像。
我使用 boto3 创建了一个预签名的 url,其中包含具有权限的 IAM 用户的访问密钥 ID 和密钥。我使用该 url 作为我的 html 文件中 img 的 src。
我查看了它生成的 url,它显示了该 IAM 用户的存储桶名称和访问密钥 ID。这是一个安全问题吗?
在AWS 上,它说“管理您的访问密钥就像管理您的用户名和密码一样安全”。有没有更好的方法来保护访问密钥 ID? (如果需要保护)我看到一些网站公开展示了这些内容,我主要关注 AWS 的示例,但我只是想确定一下。
Flask 应用示例
数据存储在环境变量中。
import os
import boto3
from flask import Flask, render_template
SECRET_KEY = os.environ["AWS_SECRET_ACCESS_KEY"]
ACCESS_ID = os.environ["AWS_ACCESS_KEY_ID"]
bucket = os.environ["AWS_STORAGE_BUCKET_NAME"]
key = "default_banner"
s3 = boto3.client("s3", aws_secret_access_key=SECRET_KEY, aws_access_key_id=ACCESS_ID)
app = Flask(__name__)
@app.route("/")
def index():
context = {"s3": s3, "bucket": bucket, "key": key}
return render_template("index.html", **context)
if __name__ == "__main__":
app.run()
这里是渲染模板的导入部分:templates/index.html
...
<img src="{{ s3.generate_presigned_url('get_object', Params={'Bucket': bucket, 'Key': key}) }}" alt="...">
...
结果
当我检查页面上的图像以查看 jinja2 将其转换为什么时,我看到类似
...
<img src="https://bucket-name.s3.amazonaws.com/default_banner?AWSAccessKeyId=AKIAIDEXAMPLE4AWSID&Signature=h67g7v6aC65aca7YPHcQVbXgt8M%3D&Expires=1566073856" alt="...">
...
【问题讨论】:
标签: python amazon-web-services amazon-s3 flask boto3