How/When 我应该生成 Azure datalake g2 SAS 令牌吗?

How/When should I generate a Azure datalake g2 SAS-Token?

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

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

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

  1. 以前使用过的 SAS 令牌在到期之前仍然存在是否是一个安全问题,或者只是一个非问题以及它应该如何 上班?
  2. 如果每个用户都生成一个 SAS 令牌会不会更好 对他们个人而言,这会无限期地持续下去?
  3. 我在网页前端显示用户 SAS 令牌是否存在安全问题? (因为文件 link 中需要它)
  1. 是的,在 SAS 令牌过期之前,安全问题一直存在。 使用 可能时用户委派 SAS。用户委托 SAS 提供 优于服务 SAS 或帐户 SAS 的安全性。一个用户 委派 SAS 使用 Azure AD 凭据进行保护,因此您可以 不需要将您的帐户密钥与您的代码一起存储。

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

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

  3. 是的,在网页前端显示 SAS 令牌可能会导致安全问题 关注并可能导致您的敏感数据泄露。 如果 SAS 是 泄露出去,谁得到它就可以使用,可以 可能危及您的存储帐户。

您可以按照以下路径生成 SAS 令牌:
设置 => 共享访问签名 => Select 所需的选项并单击生成 SAS 和连接字符串并复制 SAS 令牌。

何时使用共享访问签名?

使用 SAS 为任何无权访问这些资源的客户提供对存储帐户中资源的安全访问权限。

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

  1. 客户端通过前端代理服务上传下载数据, 执行身份验证。此前端代理服务允许 业务规则的验证。但是对于大量的数据,或者 大量交易,创建可以扩展以匹配的服务 需求可能是昂贵的或困难的。

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