在微软的用户委派密钥文档中,它说:
用于访问容器、目录或blob的SAS令牌可能是通过使用Azure AD凭据或帐户密钥进行保护。SAS使用Azure AD凭据进行安全保护称为用户委派SAS。Microsoft建议您尽可能使用Azure AD凭据作为一种安全性最佳实践,而不是使用帐户密钥可以更容易地妥协。当您的应用程序设计需要共享访问签名,使用Azure AD凭据创建用户委派SAS以获得卓越的安全性。
为什么这种方法会给出"高级安全性";?我想SAS代币都是安全的?那么,为什么一种方法比另一种更安全呢?如果您使用存储访问策略,您还可以在SAS令牌出现帐户密钥问题时撤销这些令牌。
用户委派SAS令牌更安全,因为它不依赖于仅包含在SAS令牌中的权限。它还考虑了创建此SAS令牌的用户的RBAC权限。使用共享访问密钥创建的SAS令牌只考虑SAS令牌中包含的权限。
例如,假设创建用户委派SAS的用户对blob容器只有Read
权限(即,他们只能在blob容器中列出或下载blob(。现在假设用户创建了一个具有Write
权限的SAS令牌。当此SAS令牌用于上载blob时,操作将失败,因为用户对该blob容器没有Write
权限,而如果使用共享访问密钥创建SAS令牌,则上载操作将成功。
有关这方面的更多信息,请参阅here
(强调矿(:
当客户端使用用户委派访问Blob存储资源时SAS,对Azure存储的请求已由Azure AD授权用于创建SAS的凭据基于角色的访问为该Azure AD帐户授予的控制(RBAC(权限使用SAS上明确授予的权限,确定客户端对资源的访问权限。这种方法提供了安全级别,无需存储帐户访问密钥使用您的应用程序代码。由于这些原因,使用Azure AD凭据是一种安全性最佳实践。
授予拥有SAS的客户端的权限是授予安全主体的权限的交集请求了用户委派密钥和授予的权限使用signedPermissions(sp(字段的SAS令牌上的资源。如果通过RBAC授予安全主体的权限也不是在SAS令牌上授予,则该权限不会授予尝试使用SAS访问资源的客户端。什么时候创建用户委派SAS,确保授予的权限通过RBAC和通过SAS令牌授予的权限都与客户端所需的访问级别。