需求,Storage Account中的数据,如果有人访问,要求记录下是谁访问的。
方案:
1. 为Storage Account 开启诊断设置:
截止2021-08-30,该功能为Preview的功能。
配置将Storage Read/Write/Delete 日志记录到其他的 Storage Account中:
测试:
在Azure Portal中 上传/下载/读取BLOB,观察 monitorlogseandatalake中记录的日志:
注意:默认采用的是Access Key的方式
进入到Monitor Storage Account中,可以看到如下图的日志:
将Log下载到本地,解析其中的值即可得到一些信息:
李如下图中,显示了下载的URL,下载的浏览器类型,操作系统类型,IP地址等。
详细的字段解析,可参考:https://docs.microsoft.com/zh-cn/azure/storage/blobs/monitor-blob-storage-reference?WT.mc_id=AZ-MVP-5003757#resource-logs-preview
如下图所示:
文档中同样描述了是 谁 访问了数据:
具体的字段解释如下:
但在我们实际的测试中,如果使用Access Key方式访问BLOB,日志中的 identity tpye为“SAS” 并不能很容易的看出是谁在访问我们的数据。
2. 使用Azure AD User Account方式认证
因此,我们尝试将Authentication method 改为 Azure AD User Account方式,再次上传文件,然后观察日志:
上传文件:
再次观察日志:
UPN中明确显示了是哪个Azure AD 用户进行了文件上传操作:
基本的功能有了,但仍然存在一些问题,比如,默认情况下,用户可以自行修改 使用哪种方式进行身份验证:
一旦用户自行将验证方式改为 Access Key,则日志里就不会出现 upn字段,也不能知道是哪个用户进行的操作。
3. 为每一个要使用Storage的用户创建账号,然后配置权限如下:
使用该用户访问Storage Account,可以看到默认就是使用Azure AD 进行了身份验证:
尝试修改自己为 访问密钥方式:
同时SAS共享访问签名页面也不能正常获取SAS:
访问密钥页面用户页无法修改:
可以在Azure Poratal 中上传,读取,删除文件,观察结果,也可以在Storage Explorer工具中使用订阅方式登录后,上传,读取,删除文件测试:
结果如下:
与本文相关的文档:
从Azure AD获取用于从客户端应用程序授权请求的令牌:
分配Azure 角色以访问blob数据:
使用Azure AD运行Power Shell或Azure CLI以访问blob数据:
关于在Azure门户中访问Azure Storage,优先使用的方式是:
使用帐户访问密钥
若要使用帐户访问密钥访问 blob 数据,你必须已分配到一个 Azure 角色,此角色包含 Azure RBAC 操作 Microsoft.Storage/storageAccounts/listkeys/action。此 Azure 角色可以是内置角色,也可以是自定义角色。支持“Microsoft.Storage/storageAccounts/listkeys/action”的内置角色(按权限从小到大排序)包括:
- The Reader and Data Access role
- The Storage Account Contributor role
- The Azure Resource Manager Contributor role
- The Azure Resource Manager Owner role
尝试在 Azure 门户中访问 Blob 数据时,门户首先会检查你是否拥有一个包含 Microsoft.Storage/storageAccounts/listkeys/action 的角色。如果你被分配了包含此操作的角色,则门户将使用帐户密钥来访问 blob 数据。如果你不拥有包含此操作的角色,则门户会尝试使用你的 Azure AD 帐户访问数据。