《Windows Azure Platform 系列文章目录》
我们在使用Azure Storage的时候,经常会基于属性来进行访问控制,我们假设一个场景1:
(1)用户:productionuser01可以访问到container以production开头的文件内容,如
- contoso.blob.core.windows.net/production01
- contoso.blob.core.windows.net/production02
- contoso.blob.core.windows.net/production03
或者再举一个场景2:
(1)用户:productonuser01可以访问到的存储账户名称,必须是标签(tag)为production
(2)用户:staginguser01可以可以放到的存储账户名称,必须是标签(tag)为staging
请注意:
(1)Azure ABAC是通过添加条件,来细化角色分配的
(2)这个条件可以是一个具体的值,比如上面的场景2 (tag等于production)
(3)这个条件也可以是一个范围,比如上面的场景1 (container名字以production开头)
而笔者之前介绍的文章:
Azure Storage (28) Azure Data Lake Storage Gen 2实现posix功能
posix是具体的访问权限,比如对特定目录或者文件进行写入或者读取访问,posix不是根据条件范围来控制的
这里我们假设一个场景:
(1)我们新建1个存储账户,并新建1个Service Principal
(2)针对存储账户的container名字为container01,分配给Service Principal,具有读写权限
(3)针对存储账户的container名字为container02,分配为Service Principal,具有只读权限
1.首先新建一个存储账户,名称为leizhangstorage00,步骤略
2.在这个存储账户下,新建2个container,分别为container01和container02,步骤略
3.选中这个存储账户leizhangstorage00,点击IAM,Add Role Assignment。如下图:
4.搜索storage blob data contributor
5.在members里,搜索之前创建的Service Principal,步骤略
6.在Conditions里,点击下图的Add condition
7.在condition 1里,点击下图的add action,选中所有Action
8.在condition 1里,点击+Add expression
(1)Attribute source,选择resource
(2)Attribute,选择Container name
(3)Operator,选择StringEquals。这里的StringEquals表示等于(=)
(4)Value输入container01
上面的表达式的意思是,在条件1(condition 1)里:针对container name等于container01,执行完整的权限(增、删、改、查)
在上面的operator里,有多种条件。如下图:
StringStartsWith就是以字符串开始,作为查询条件
9.然后我们增加第二个条件,我们点击下图的Add condition。点击完毕后,会出现Condition 2
10.我们在Condition 2里,我们点击Add Condition
11.在condition 2里,点击+Add expression
(1)Attribute source,选择resource
(2)Attribute,选择Container name
(3)Operator,选择StringEquals
(4)Value输入container02
12.最后我们选择Review+Assign,分配该权限。截图略。
13.我们以AzCopy作为演示工具,具体下载地址:https://learn.microsoft.com/zh-cn/azure/storage/common/storage-use-azcopy-v10?toc=%2Fazure%2Fstorage%2Fblobs%2Ftoc.json&bc=%2Fazure%2Fstorage%2Fblobs%2Fbreadcrumb%2Ftoc.json#download-azcopy
14.打开AzCopy,设置环境变量
#设置环境变量 #下面这个是默认值 export AZCOPY_AUTO_LOGIN_TYPE="SPN" #这个是租户id,请根据nio的环境进行修改 export AZCOPY_TENANT_ID=" " #这个是app id, export AZCOPY_SPA_APPLICATION_ID=" " #这个是app key, export AZCOPY_SPA_CLIENT_SECRET=" "
15.我们先查看本地测试环境,包含的文件信息
16.针对container01,进行上传操作
./azcopy copy '/root/datadisk/*.txt' 'https://leizhangstorage00.blob.core.windows.net/container01' --recursive
结果为执行成功
17.我们再针对container02,做上传操作
./azcopy copy '/root/datadisk/*.txt' 'https://leizhangstorage00.blob.core.windows.net/container02' --recursive
可以查看到403错误,权限不足