【Azure 存储服务】关于Azure Storage Account(存储服务) 基于AAD用户的权限设定以及SAS key的管理问题

本文涉及的产品
访问控制,不限时长
简介: 【Azure 存储服务】关于Azure Storage Account(存储服务) 基于AAD用户的权限设定以及SAS key的管理问题

问题描述

如何查到一个Storage Account曾经创建过多少SAS key,这些Key是否可以回收和限定?能否基于AAD身份对 Container / Folder 进行权限的设定和管理?

 

问题解答

存储账户的SAS分为 用户委托SAS服务SAS账户SAS

  • 用户委托SAS是使用Azure AD凭据签名的SAS。
  • 服务SAS和账户SAS使用存储账户密钥进行签名。

共享访问签名分为临时SAS和具有存储访问策略的服务SAS,详细请参考:https://docs.azure.cn/zh-cn/storage/common/storage-sas-overview?toc=/storage/blobs/toc.json#account-sas

  1. 临时SAS : 将在 SAS URI 中指定开始时间、到期时间和权限 (任何类型的 SAS 都可以用作临时 SAS)。
  2. 具有存储访问策略的服务SAS : 存储访问策略是针对资源容器(可以是 Blob 容器、表、队列或文件共享)定义的。 可以使用存储访问策略来管理一个或多个服务共享访问签名的约束。 将某个服务 SAS 与某个存储访问策略关联时,该 SAS 将继承对该存储访问策略定义的约束 — 开始时间、过期时间和权限 (用户委托SAS和账户SAS不支持存储策略)。

 

问题1:如何查到以前创建过多少SAS key

目前暂时无法查询以前创建过的SAS。

问题2:这些Key是否可以回收和限定?

账户临时SAS无法撤销,仅在设置的过期时间之内有效,服务SAS可以通过存储访问策略撤销服务SAS的权限。用户委托SAS可以通过CLI命令来撤销:https://docs.azure.cn/zh-cn/storage/blobs/storage-blob-user-delegation-sas-create-cli#revoke-a-user-delegation-sas

问题3:能否基于AAD身份对folder进行权限的设定和管理?

使用AzureAD对于Data Lake Storage Gen2进行控制,官方文档:https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-access-control

https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-explorer-acl

 

如果想要生成SAS,作为安全最佳做法,建议使用Azure AD凭据的方式,也就是用户委托SAS,而不要使用更容易透漏Storage Key的账户SAS和服务SAS。对于创建用户委托SAS您可以参考如下CLI命令:

az cloud set -n AzureCloud
az login
az storage container generate-sas --account-name xxxx_storage --name xxxx_container --permissions acdlrw --expiry 2022-03-02 --auth-mode login --as-user
#撤销命令:
az storage account revoke-delegation-keys --name xxxx_container--resource-group xxxx_group

使用 Power Shell创建服务SAS脚本,可以参考如下内容:

#Now we need to create Storage context
$context = New-AzStorageContext -StorageAccountName your storage account name -StorageAccountKey your storage account key
$StartTime = Get-Date
$EndTime = $startTime.AddDays(1)
$policy=New-AzStorageContainerStoredAccessPolicy -Container "your containe rname" -Policy "your stored access policy" -Permission rwd -StartTime $StartTime -ExpiryTime $EndTime -Context $context -Debug
New-AzStorageContainerSASToken -Name "your container name" -Policy $policy -Protocol HttpsOrHttp -Context $context

 

 

Data Lake Storage Gen2 支持以下授权机制:

  1. 共享密钥授权
  2. 共享访问签名 (SAS) 授权
  3. 基于角色的访问控制 (Azure RBAC)
  4. 访问控制列表 (ACL)

共享密钥和 SAS 授权向用户(或应用程序)授予访问权限,不要求其在 Azure Active Directory (Azure AD) 中有标识。 使用这两种形式的身份验证时,Azure RBAC 和 ACL 不起作用。

Azure RBAC 和 ACL 都要求用户(或应用程序)在 Azure AD 中有标识。使用 Azure RBAC,可以授予对存储帐户数据的“粗粒度”访问权限(例如,对存储帐户中 所有 数据的读取或写入访问权限),而使用 ACL,可以授予“细粒度”访问权限,例如,对特定目录或文件的写入访问权限。

 

参考资料

  1. SAS最佳实践请参考:https://docs.azure.cn/zh-cn/storage/common/storage-sas-overview?toc=/storage/blobs/toc.json#best-practices-when-using-sas
  2. 存储访问策略:https://docs.azure.cn/zh-cn/storage/blobs/authorize-access-azure-active-directory
  3. 使用CLI创建用户委托SAS:https://docs.azure.cn/zh-cn/storage/blobs/storage-blob-user-delegation-sas-create-cli
  4. 对于判断SAS对Storage Account的操作,当开启 Storage Account 诊断日志后,诊断日志中会记录相应的请求:https://docs.azure.cn/zh-cn/storage/common/storage-analytics-logging?toc=/storage/blobs/toc.json
  5. Data Lake Storage Gen2 访问控制模型:https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-access-control-model
  6. Data Lake Storage Gen2 访问控制列表ACL:https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-access-control
  7. Data Lake Storage Gen2 是可以设置服务SAS:https://docs.azure.cn/zh-cn/storage/blobs/sas-service-create?tabs=dotnet#create-a-service-sas-for-a-directory
  8. 创建Storage Context:https://docs.microsoft.com/en-us/powershell/module/az.storage/new-azstoragecontext?view=azps-6.3.0
  9. 创建存储访问策略请参考:https://docs.microsoft.com/en-us/powershell/module/az.storage/new-azstoragecontainerstoredaccesspolicy?view=azps-6.3.0
  10. 创建SAS Token:https://docs.microsoft.com/en-us/powershell/module/az.storage/new-azstoragecontainersastoken?view=azps-6.3.0
  11. Power shell安装介绍:https://docs.azure.cn/zh-cn/storage/blobs/storage-quickstart-blobs-powershell
  12. Data Lake Storage Gen2访问控制模型详细:https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-access-control-model
相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
3月前
|
存储 容器
【Azure 存储服务】如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?
【Azure 存储服务】如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?
|
3月前
|
存储 安全 BI
【Azure Storage Account】使用Azure Policy来检查Storage Account中是否有开启匿名访问的Container
【Azure Storage Account】使用Azure Policy来检查Storage Account中是否有开启匿名访问的Container
【Azure Storage Account】使用Azure Policy来检查Storage Account中是否有开启匿名访问的Container
|
3月前
|
存储 安全 API
【Azure 存储服务】关于对Azure Storage Account 的 Folder 权限管理和设定
【Azure 存储服务】关于对Azure Storage Account 的 Folder 权限管理和设定
|
3月前
|
存储 Shell 容器
【Azure 存储服务】使用PowerShell脚本创建存储账号(Storage Account)的共享访问签名(SASToken) : New-AzStorageContainerSASToken
【Azure 存储服务】使用PowerShell脚本创建存储账号(Storage Account)的共享访问签名(SASToken) : New-AzStorageContainerSASToken
|
3月前
|
存储 JSON Java
【Azure 存储服务】Azure Storage Account Queue中因数据格式无法处理而在一个小时内不在可见的问题
【Azure 存储服务】Azure Storage Account Queue中因数据格式无法处理而在一个小时内不在可见的问题
|
3月前
|
存储 C# Python
【Azure Storage Account】Azure 存储服务计算Blob的数量和大小的PowerShell代码
【Azure Storage Account】Azure 存储服务计算Blob的数量和大小的PowerShell代码
|
3月前
|
存储 Java API
【Azure 存储服务】存储在Azure Storage Table中的数据,如何按照条件进行删除呢?
【Azure 存储服务】存储在Azure Storage Table中的数据,如何按照条件进行删除呢?
|
3月前
|
存储 Java 开发工具
【Azure 存储服务】代码版 Azure Storage Blob 生成 SAS (Shared Access Signature: 共享访问签名)
【Azure 存储服务】代码版 Azure Storage Blob 生成 SAS (Shared Access Signature: 共享访问签名)
|
3月前
|
C#
【Azure Developer】使用 Azure VM 上的用户分配托管标识访问 Azure Key Vault 中国区代码示例
【Azure Developer】使用 Azure VM 上的用户分配托管标识访问 Azure Key Vault 中国区代码示例
|
3月前
【Azure 环境】如果Azure中的某一个资源被删除后是否可以查看到删除的记录呢?如Resource Group
【Azure 环境】如果Azure中的某一个资源被删除后是否可以查看到删除的记录呢?如Resource Group