Search code examples
azureazure-powershellazure-data-lake-gen2

Grant access to Azure Data Lake Gen2 using a parameterized script


We are trying to grant read/write access to many folders in our Azure data Lake gen 2 containers and although we can do this through the UI, it's quite tedious and has to be repeated for all environments. Has anyone used a better way using Powershell to automate or at least parameterize this process of granted access to Azure Data Lake gen 2 containers and avoid granting access manually?

Unfortunately I couldn't get this to work using the following link or other documentation as it's for Gen 1 but it's very similar to what I need to do for gen 2. https://www.sqlchick.com/entries/2018/3/17/assigning-data-permissions-for-azure-data-lake-store-part-3


Solution

  • According to my test, we can use the PowerShell to manage Azure Data Lake Gen2 permissions. For more details, please refer to the document

    1. Install the required module
    install-Module PowerShellGet –Repository PSGallery –Force
    install-Module Az.Storage -Repository PSGallery -RequiredVersion 1.9.1-preview –AllowPrerelease –AllowClobber –Force
    

    Besides, please note that if you want to install the module, you need to meet some conditions

    • .NET Framework is 4.7.2 or greater installed
    • PowerShell is 5.1 or higher
    1. Script
    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