问题描述

如何查到一个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

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

  1. 【Azure Spring Cloud】Azure Spring Cloud服务,如何获取应用程序日志文件呢?

    问题描述 在使用Azure Spring Cloud服务时,如果要收集应用程序的日志.有控制台输出(实时流日志),也可以配置Log Analytics服务. 日志流式处理 可以通过以下命令在 Azur ...

  2. 【Azure 存储服务】Python模块(azure.cosmosdb.table)直接对表存储(Storage Account Table)做操作示例

    什么是表存储 Azure 表存储是一项用于在云中存储结构化 NoSQL 数据的服务,通过无结构化的设计提供键/属性存储. 因为表存储无固定的数据结构要求,因此可以很容易地随着应用程序需求的发展使数据适 ...

  3. 【Azure 环境】由为存储账号(Storage Account)拒绝分配权限而引出的Azure 蓝图(Blueprint)使用问题

    问题描述 当打开Azure存储账号(Storage Account)门户页面时,从 "访问控制(标识和访问管理)" 页面中发现有"拒绝分配"的功能,所以就思考, ...

  4. Azure China (4) 管理Azure China Storage Account

    <Windows Azure Platform 系列文章目录> Update 2015-05-10 强烈建议使用AzCopy工具,AzCopy命令行工具,是经过优化的.高性能Azure S ...

  5. 直传文件到Azure Storage的Blob服务中

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure ...

  6. [转]Azure 表存储和 Windows Azure SQL Database - 比较与对照

    本文转自:https://msdn.microsoft.com/library/azure/jj553018 更新时间: 2014年10月 作者:Valery Mizonov 和 Seth Manhe ...

  7. Azure Terraform(四)状态文件存储

    一,引言 我们都知道在执行部署计划之后,当前目录中就产生了名叫 "" 的 Terraform 的状态文件,该文件中记录了已部署资源的状态.默认情况下,在执行部署计划后,Terraf ...

  8. 【Azure Developer】使用 Python SDK连接Azure Storage Account, 计算Blob大小代码示例

    问题描述 在微软云环境中,使用python SDK连接存储账号(Storage Account)需要计算Blob大小?虽然Azure提供了一个专用工具Azure Storage Explorer可以统 ...

  9. 自建存储与使用微软Azure、七牛等第三方云存储综合考察分析

    http://www.cnblogs.com/sennly/p/4136734.html 各种云服务这两年炒的火热,加之可以降低成本,公司想先在部分业务上尝试使用下,刚好最近有个项目有大量小文件需要存 ...

  10. 【Azure 应用服务】Azure Function集成虚拟网络,设置被同在虚拟网络中的Storage Account触发,遇见Function无法触发的问题

    一切为了安全,所有的云上资源如支持内网资源访问,则都可以加入虚拟网络 问题描述 使用Azure Function处理Storage Account中Blob 新增,更新,删除等情况.Storage A ...

随机推荐

  1. docker hub arm64v8/postgres

    arm64v8/postgres https://hub.docker.com/r/arm64v8/postgres By arm64v8 • Updated 4 days ago The Postg ...

  2. 安装Visual Studio的详细流程

      本文介绍Visual Studio 2022软件Community(社区版)的下载.安装.运行与使用方法.   首先需要提一句,本文介绍的是Visual Studio 2022软件的下载:而其它版 ...

  3. Redis 数据库配置与应用

    Redis 是一个key-value存储系统.Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. ...

  4. 多路io复用Select [补档-2023-07-16]

    select 2.1 简介 ​ select函数可以用于实现高效的多路复用 I/O,同时处理多个文件描述符的事件,包括监听可读.可写和异常条件,具有阻塞和非阻塞模式,并可以设置超时时间.这使得程序能够 ...

  5. django orm 筛选

    import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test.setting") import ...

  6. layui下拉框可手动输入

    先看效果 layui版本:layui@2.8.17 HTML代码: <div class="layui-form-item"> <label class=&quo ...

  7. Java并发(八)----使用线程避免cpu占用100%

    1.sleep 实现 在没有利用 cpu 来计算时,不要让 while(true) 空转浪费 cpu,这时可以使用 yield 或 sleep 来让出 cpu 的使用权给其他程序 while(true ...

  8. 什么是TDD(一)

    引子 回顾 虽然我很早以前就听说单元测试,也曾经多次在项目中引入单元测试框架和单元测试的实践为代码质量的提升带来了一丝助力. 但这种方式更多的是从软件调试的角度出发,即将单元测试作为一种测试方法可用性 ...

  9. Java21 + SpringBoot3使用Spring Security时如何在子线程中获取到认证信息

    目录 前言 原因分析 解决方案 方案1:手动设置线程中的认证信息 方案2:使用DelegatingSecurityContextRunnable创建线程 方案3:修改Spring Security安全 ...

  10. OCR 02: Tesseract-OCR

    Catalog OCR 01: EasyOCR OCR 02: Tesseract-OCR OCR 03: PaddleOCR Project Host And Brief Official Site ...