使用参数化脚本授予对Azure Data Lake Gen2的访问权限

时间:2019-12-17 18:54:19

标签: azure azure-powershell azure-data-lake-gen2

我们正在尝试授予对Azure数据湖第2代容器中的许多文件夹的读/写访问权限,尽管我们可以通过UI进行此操作,但这非常繁琐,并且必须在所有环境中重复进行。有没有人使用Powershell更好的方法来自动化或至少参数化此授予Azure Data Lake Gen 2容器访问权限的过程,并避免手动授予访问权限?

不幸的是,我无法使用以下链接或其他文档来实现此功能,因为它适用于第一代,但它与第二代所需的功能非常相似。 https://www.sqlchick.com/entries/2018/3/17/assigning-data-permissions-for-azure-data-lake-store-part-3

2 个答案:

答案 0 :(得分:1)

根据我的测试,我们可以使用PowerShell来管理Azure Data Lake Gen2权限。有关更多详细信息,请参阅document

  1. 安装所需的模块
install-Module PowerShellGet –Repository PSGallery –Force
install-Module Az.Storage -Repository PSGallery -RequiredVersion 1.9.1-preview –AllowPrerelease –AllowClobber –Force
  

此外,请注意,如果要安装模块,则需要满足一些条件

     
      
  • 已安装4.7.2或更高版本的.NET Framework
  •   
  • PowerShell为5.1或更高
  •   
  1. 脚本
Connect-AzAccount

$groupName=""
$accountName=""
$account= Get-AzStorageAccount -ResourceGroupName $groupName -Name $accountName
$ctx = $account.Context

$filesystemName = "test"
$dirname="template/"
$Id = "<the Object ID of user, group or service principal>"
$dir=Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$acl = New-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $id -Permission "rw-" -InputObject $dir.ACL
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$dir=Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL

enter image description here enter image description here

答案 1 :(得分:0)

感谢 Jim Xu 提供上述脚本。我只是用以下项目补充代码:

  • 从容器中获取所有文件夹
  • 为所有文件夹分配 ACL
  • 将 ACL 传播到所有子文件夹
$groupName="resource group name"
$accountName="storage account name"
$account= Get-AzStorageAccount -ResourceGroupName $groupName -Name $accountName
$ctx = $account.Context

$filesystemName = "container name"
$Id = (Get-AzADGroup -DisplayName '<type user / group name here>').Id
$items = Get-AzDataLakeGen2ChildItem -Context $ctx -FileSystem $filesystemName

foreach ( $item in $items) {
    
    $dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path "$($item.Path)/"
    $acl = New-AzDataLakeGen2ItemAclObject -AccessControlType group -EntityId $id -Permission "rwx" -InputObject $dir.ACL -DefaultScope
     
    # Update ACL on blob item
    Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path "$($item.Path)/" -Acl $acl
    
    # Propagate ACL to child blob items
    Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path "$($item.Path)/" -Acl $acl
}