0

我正在使用 azure.storage.filedatalake 模块在 Python 中开发一个项目,以便将文件上传到我的第 2 代数据湖。

在我的项目中,我使用这些文件的 URL(因为它们主要是我需要提供给前端网页的图像)。为了确保只有某些用户可以访问某些文件,我在这些文件上使用了 SAS 令牌。

鉴于 SAS 令牌应该有一个过期时间,我的想法是,每次用户登录到我的系统时,都会生成一个 SAS 令牌并保存在他们的会话中。此令牌可以持续例如 6 小时。如果他们重新登录到我的站点,则会为他们生成一个新的 SAS。然而,他们的旧 SAS 仍将在另外 6 小时内有效,并且该令牌在此之前简单未使用,但有效。

  1. 以前使用的 SAS 令牌在到期之前仍然存在,这是一个安全问题,还是只是一个非问题以及它应该如何工作?
  2. 如果每个用户都生成了一个他们个人的 SAS 令牌,并且无限期地持续下去会更好吗?
  3. 我在网页前端显示用户 SAS 令牌是否存在安全问题?(因为文件链接中需要它)
4

1 回答 1

1
  1. 是的,安全问题一直存在,直到 SAS 令牌过期。尽可能使用用户委托 SAS。用户委托 SAS 为服务 SAS 或帐户 SAS 提供了卓越的安全性。用户委托 SAS 使用 Azure AD 凭据进行保护,因此您无需将帐户密钥与代码一起存储。

  2. 为每个用户生成一个个人 SAS 很好,但不建议无限期地使用它。即使您这样做,您也需要为服务 SAS 定义存储访问策略。存储访问策略使您可以选择撤销服务 SAS 的权限,而无需重新生成存储帐户密钥。将这些到期时间设置在很远的将来(或无限期),并确保定期更新以将其移到更远的未来。

    根据使用 SAS 时的最佳实践,在临时 SAS 服务 SAS 或帐户 SAS 上使用近期到期时间。这样,即使 SAS 遭到破坏,它也只能在很短的时间内有效。如果您无法引用存储的访问策略,这种做法尤其重要。近期到期时间还通过限制可上传到 blob 的时间来限制可写入 blob 的数据量。

  3. 是的,在网页前端显示 SAS 令牌可能会导致安全问题,并可能导致敏感数据泄露。如果 SAS 泄露,任何获得它的人都可以使用它,这可能会危及您的存储帐户。

您可以通过以下路径生成 SAS 令牌:
设置 => 共享访问签名 => 选择所需的选项,然后单击生成 SAS 和连接字符串并复制 SAS 令牌。 在此处输入图像描述

何时使用共享访问签名?

使用 SAS 将存储帐户中的资源的安全访问权限授予对这些资源没有其他权限的任何客户端。

SAS 有用的一个常见场景是用户读取和写入自己的数据到您的存储帐户的服务。在存储帐户存储用户数据的场景中,有两种典型的设计模式:

  1. 客户端通过执行身份验证的前端代理服务上传和下载数据。此前端代理服务允许验证业务规则。但对于大量数据或大容量交易,创建可扩展以满足需求的服务可能既昂贵又困难。 在此处输入图像描述

  2. 轻量级服务根据需要对客户端进行身份验证,然后生成 SAS。一旦客户端应用程序收到 SAS,它就可以直接访问存储帐户资源。访问权限由 SAS 和 SAS 允许的时间间隔定义。SAS 减少了通过前端代理服务路由所有数据的需要。 在此处输入图像描述

于 2021-08-09T13:18:44.597 回答