【问题标题】:Presigned URL for private S3 bucket displays AWS access key id and bucket name. Is this a security issue?私有 S3 存储桶的预签名 URL 显示 AWS 访问密钥 ID 和存储桶名称。这是一个安全问题吗?
【发布时间】: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&amp;Signature=h67g7v6aC65aca7YPHcQVbXgt8M%3D&amp;Expires=1566073856" alt="...">
...

【问题讨论】:

    标签: python amazon-web-services amazon-s3 flask boto3


    【解决方案1】:

    “像管理用户名和密码一样安全地管理访问密钥。”

    您的用户名通常不是秘密,AWS 访问密钥 ID 也是如此。

    敏感值是访问密钥秘密。这两个值没有另一个是没有用的,但是模型被设计为将 ID(以AKIA 开头的值)视为两者的非敏感值。在签名 URL 中公开这些是可以接受的。

    签名也不敏感,因为从签名 URL 中嵌入的信息重建密钥在计算上是不可行的......但签名也不包含足够的信息,服务无法确定谁试图授权该请求...这就是访问密钥 ID 包含在签名 URL 中的原因。

    事实上,准确地说,签名根本不包含任何信息。该服务在内部从提供的访问密钥 ID 中查找您的密钥,并使用您的凭据重新生成相同的签名 URL。如果它得到与 URL 签名中提供的相同答案,则请求有效,否则请求被拒绝。

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 2021-09-14
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多