首先,要使用ACL进行访问控制,授权的方式不能是SAS或Account Key。否则会绕过ACL检查。

 

 所以,您如果想用ACL控制,需要用AAD RBAC授权。

 

根据以下文档:

使用RBAC授权,在已设好根目录及所有文件、目录的ACL权限后,无需在Subscription或Storage Account级别在IAM中,为RBAC添加Storage Blob Data Reader Role。

 

 https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-access-control-model#access-control-lists-acls

如果您给RBAC添加了额外的Role,则可能会导致ACL无效。

 

请一定记得,为根目录赋予足够的权限。可以使用StorageExplorer(在Subscription下操作):

 

 

假定您要禁止访问文件"20190518_modified002.jpg"。禁止其下载。可以去掉其ACL的Read及Execute权限:

 

 在设置ACL时,首先使用"Add"按钮,加入您的Service Principal(AAD Application):

 

还需要把ACL配置中的Owner和Owning Group设置为无任何访问权限的任意Service Principal。

 注意,保存时,要看到下方成功保存的信息:

 

 

如保存不成功,您需要为您登陆StorageExplorer的账号,在Subscription级别的IAM中,添加以下Role中部分的Role:

 

 测试方法,可以参考以下用PowerShell的文档:

 https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-directory-file-acl-powershell

 

 

 

可以参考以下指令:

$Password = ConvertTo-SecureString -AsPlainText "<AAD Client Secret>" -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<AAD Application ID / Client ID>", $Password)
$TenantId = "<Tenant ID>"
Connect-AzAccount -environment AzureChinaCloud -Subscription <Sub ID> -ServicePrincipal -Credential $Credential -Tenant $TenantId

 

$ctx = New-AzStorageContext -StorageAccountName 'davystore22' -UseConnectedAccount
Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem "davychen"

 

下载文件指令,可参考:

$filesystemName = "<Storage Container Name>"
$filePath = "20190518_modified002.jpg"
$downloadFilePath = "C:/20201211/temp2021/20210729/2107280010000887/01.jpg"
Get-AzDataLakeGen2ItemContent -Context $ctx -FileSystem $filesystemName -Path $filePath -Destination $downloadFilePath

 

有些客户想隐藏部分文件或文件夹,但是ACL无法控制List权限,仅能禁用Read和进入这个文件夹,无法隐藏。

 

 https://docs.azure.cn/zh-cn/storage/blobs/data-lake-storage-access-control-model#permissions-table-combining-azure-rbac-and-acl