用户委托密钥与帐户密钥 - 安全性?

时间:2021-05-04 04:35:35

标签: azure azure-active-directory azure-storage azure-security

在 Microsoft 的用户委托密钥文档中,它说:

<块引用>

用于访问容器、目录或 blob 的 SAS 令牌可能是 使用 Azure AD 凭据或帐户密钥进行保护。 SAS 使用 Azure AD 凭据进行保护称为用户委派 SAS。 Microsoft 建议您尽可能使用 Azure AD 凭据 作为安全最佳实践,而不是使用帐户密钥, 可以更容易受到损害。当您的应用程序设计需要 共享访问签名,使用 Azure AD 凭据创建用户 委派 SAS 以获得更高的安全性。

为什么这种方法可以提供“卓越的安全性”?我猜 SAS 令牌都是安全的?那么为什么一种方法比另一种更安全呢?如果您使用存储访问策略,您还可以在帐户密钥出现问题时撤销 SAS 令牌。

1 个答案:

答案 0 :(得分:1)

用户委托 SAS 令牌更安全,因为它不只依赖于 SAS 令牌中包含的权限。它还考虑了创建此 SAS 令牌的用户的 RBAC 权限。使用共享访问密钥创建的 SAS 令牌仅考虑 SAS 令牌中包含的权限。

例如,假设创建用户委托 SAS 的用户对 blob 容器仅具有 Read 权限(即他们只能列出或下载 blob 容器中的 blob)。现在假设用户创建了一个具有 Write 权限的 SAS 令牌。使用此 SAS 令牌上传 Blob 时,操作将失败,因为用户对该 Blob 容器没有 Write 权限,而如果使用共享访问密钥创建 SAS 令牌,则上传操作会成功。< /p>

可以在here(强调我的)中找到有关此的更多信息:

<块引用>

当客户端通过用户委托访问 Blob 存储资源时 SAS,对 Azure 存储的请求已获得 Azure AD 授权 用于创建 SAS 的凭据。 基于角色的访问 为该 Azure AD 帐户授予的控制 (RBAC) 权限 使用 SAS 上明确授予的权限,确定 客户端对资源的访问权限。这种方法提供了额外的 安全级别并避免需要存储您的帐户访问密钥 使用您的应用程序代码。由于这些原因,创建一个 SAS 使用 Azure AD 凭据是一种安全最佳做法。

授予拥有 SAS 的客户的权限是 授予安全主体的权限的交集 请求用户委托密钥和授予的权限 SAS 令牌上的资源使用 signedPermissions (sp) 字段。如果一个 通过 RBAC 授予安全主体的权限也不是 SAS 令牌上授予的权限,则该权限不会授予 尝试使用 SAS 访问资源的客户端。什么时候 创建用户委托 SAS,确保授予的权限 通过 RBAC 和通过 SAS 令牌授予的权限都符合 客户端所需的访问级别。