Azure Data Lake Storage 2. Nesil'da ACL'leri yönetmek için PowerShell kullanma

Bu makalede, dizinlerin ve dosyaların erişim denetimi listelerini almak, ayarlamak ve güncelleştirmek için PowerShell'in nasıl kullanılacağı gösterilmektedir.

ACL devralma, bir üst dizin altında oluşturulan yeni alt öğeler için zaten kullanılabilir. Ancak, her alt öğe için bu değişiklikleri tek tek yapmak zorunda kalmadan bir üst dizinin mevcut alt öğelerine ACL'leri yinelemeli olarak ekleyebilir, güncelleştirebilir ve kaldırabilirsiniz.

Başvuru | Geri bildirimde bulunmak

Önkoşullar

  • Azure aboneliği. Daha fazla bilgi için bkz . Azure ücretsiz deneme sürümünü edinme.

  • Hiyerarşik ad alanı (HNS) etkinleştirilmiş bir depolama hesabı. Oluşturmak için bu yönergeleri izleyin.

  • Azure CLI sürümü 2.6.0 veya üzeri.

  • Aşağıdaki güvenlik izinlerinden biri:

    • Hedef kapsayıcı, depolama hesabı, üst kaynak grubu veya abonelik kapsamında Depolama Blob Veri Sahibi rolü atanmış, sağlanan bir Microsoft Entra Id güvenlik sorumlusu..

    • ACL ayarlarını uygulamayı planladığınız hedef kapsayıcının veya dizinin sahibi olan kullanıcı. ACL'leri özyinelemeli olarak ayarlamak için, hedef kapsayıcıdaki veya dizindeki tüm alt öğeleri içerir.

    • hesap anahtarını Depolama.

PowerShell modülünü yükleme

  1. Aşağıdaki komutu kullanarak yüklü PowerShell sürümünün veya daha yüksek olduğunu 5.1 doğrulayın.

    echo $PSVersionTable.PSVersion.ToString()
    

    PowerShell sürümünüzü yükseltmek için bkz . Mevcut Windows PowerShell'i yükseltme

  2. Az.Depolama modülünü yükleyin.

    Install-Module Az.Storage -Repository PSGallery -Force  
    

    PowerShell modüllerini yükleme hakkında daha fazla bilgi için bkz . Azure PowerShell modülünü yükleme

Hesaba Bağlan

Komutlarınızın depolama hesabında nasıl yetkilendirme almasını istediğinizi seçin.

1. Seçenek: Microsoft Entra Id kullanarak yetkilendirme alma

Dekont

Erişimi yetkilendirmek için Microsoft Entra Id kullanıyorsanız güvenlik sorumlunuza Depolama Blob Veri Sahibi rolünün atandığından emin olun. ACL izinlerinin nasıl uygulandığı ve bunların değiştirilmesinin etkileri hakkında daha fazla bilgi edinmek için bkz. Azure Data Lake Storage 2. Nesil'de erişim denetimi modeli.

Bu yaklaşımla sistem, kullanıcı hesabınızın uygun Azure rol tabanlı erişim denetimi (Azure RBAC) atamalarına ve ACL izinlerine sahip olmasını sağlar.

  1. Bir Windows PowerShell komut penceresi açın ve ardından komutuyla Connect-AzAccount Azure aboneliğinizde oturum açın ve ekrandaki yönergeleri izleyin.

    Connect-AzAccount
    
  2. Kimliğiniz birden fazla abonelikle ilişkiliyse, etkin aboneliğinizi dizinleri oluşturmak ve yönetmek istediğiniz depolama hesabının aboneliğine ayarlayın. Bu örnekte yer tutucu değerini aboneliğinizin kimliğiyle değiştirin <subscription-id> .

    Select-AzSubscription -SubscriptionId <subscription-id>
    
  3. Depolama hesabı bağlamını alın.

    $ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
    

2. Seçenek: Depolama hesabı anahtarını kullanarak yetkilendirme alma

Bu yaklaşımla sistem Azure RBAC veya ACL izinlerini denetlemez. Bir hesap anahtarı kullanarak depolama hesabı bağlamını alın.

$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -StorageAccountKey '<storage-account-key>'

ACL'leri alma

cmdlet'ini kullanarak bir dizin veya dosyanın ACL'sini Get-AzDataLakeGen2Itemalın.

Bu örnek, bir kapsayıcının kök dizininin ACL'sini alır ve ardından ACL'yi konsola yazdırır.

$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL

Bu örnek bir dizinin ACL'sini alır ve ardından ACL'yi konsola yazdırır.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL

Bu örnek bir dosyanın ACL'sini alır ve ardından ACL'yi konsola yazdırır.

$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL

Aşağıdaki görüntüde bir dizinin ACL'sini aldıktan sonra elde edilen çıkış gösterilmektedir.

Get ACL output for directory

Bu örnekte sahibi olan kullanıcının okuma, yazma ve yürütme izinleri vardır. Sahip olan grubun yalnızca okuma ve yürütme izinleri vardır. Erişim denetim listeleri hakkında daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil'de Erişim denetimi.

ACL'leri ayarlama

Bir ACL ayarladığınızda, ACL'nin tüm girdileri dahil olmak üzere tüm ACL'yi değiştirirsiniz. Bir güvenlik sorumlusunun izin düzeyini değiştirmek veya var olan diğer girişleri etkilemeden ACL'ye yeni bir güvenlik sorumlusu eklemek istiyorsanız, bunun yerine ACL'yi güncelleştirmeniz gerekir. ACL'yi değiştirmek yerine güncelleştirmek için bu makalenin ACL'leri güncelleştirme bölümüne bakın.

ACL'yi ayarlamayı seçerseniz, sahip olan kullanıcı için bir girdi, sahip olan grup için bir girdi ve diğer tüm kullanıcılar için bir girdi eklemeniz gerekir. Sahip olan kullanıcı, sahip olan grup ve diğer tüm kullanıcılar hakkında daha fazla bilgi edinmek için bkz . Kullanıcılar ve kimlikler.

Bu bölümde şunların nasıl yapıldığını görebilirsiniz:

  • ACL ayarlama
  • ACL’leri özyinelemeli olarak belirleme

ACL ayarlama

Sahip olan Set-AzDataLakeGen2ItemAclObject kullanıcı, sahip olan grup veya diğer kullanıcılar için bir ACL oluşturmak için cmdlet'ini kullanın. Ardından, ACL'yi Update-AzDataLakeGen2Item işlemek için cmdlet'ini kullanın.

Bu örnek, sahip olan kullanıcı, sahip olan grup veya diğer kullanıcılar için bir kapsayıcının kök dizininde ACL'yi ayarlar ve ardından ACL'yi konsola yazdırır.

$filesystemName = "my-file-system"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Acl $acl
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL

Bu örnek, sahip olan kullanıcı, sahip olan grup veya diğer kullanıcılar için bir dizindeki ACL'yi ayarlar ve ardından ACL'yi konsola yazdırır.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL

Dekont

Varsayılan bir ACL girdisi ayarlamak istiyorsanız Set-AzDataLakeGen2ItemAclObject komutunu çalıştırırken -DefaultScope parametresini kullanın. Örneğin: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.

Bu örnek, bir dosyadaki ACL'yi sahip olan kullanıcı, sahip olan grup veya diğer kullanıcılar için ayarlar ve ardından ACL'yi konsola yazdırır.

$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "-wx" -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath -Acl $acl
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL

Dekont

Belirli bir grubun veya kullanıcının, hizmet sorumlusunun veya yönetilen kimliğin ACL'sini ayarlamak için ilgili nesne kimliklerini kullanın. Örneğin, bir grubun ACL'sini ayarlamak için kullanın group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Bir kullanıcının ACL'sini ayarlamak için kullanın user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Aşağıdaki görüntüde, bir dosyanın ACL'sini ayarladıktan sonra çıktı gösterilmektedir.

Get ACL output for file

Bu örnekte, sahip olan kullanıcı ve sahip olan grup yalnızca okuma ve yazma izinlerine sahiptir. Diğer tüm kullanıcıların yazma ve yürütme izinleri vardır. Erişim denetim listeleri hakkında daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil'de Erişim denetimi.

ACL’leri özyinelemeli olarak belirleme

Set-AzDataLakeGen2AclRecursive cmdlet'ini kullanarak ACL'leri özyinelemeli olarak ayarlayın.

Bu örnek adlı my-parent-directorydizinin ACL'sini ayarlar. Bu girdiler sahip olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba yalnızca okuma ve yürütme izinleri verir ve diğer tüm kullanıcılara erişim vermez. Bu örnekteki son ACL girdisi, "xxxxx-xxxx-xxxx-xxxx" nesne kimliğine sahip belirli bir kullanıcıya okuma ve yürütme izinleri verir.

$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission r-x -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "---" -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission r-x -InputObject $acl

Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl

Dekont

Varsayılan bir ACL girdisi ayarlamak istiyorsanız Set-AzDataLakeGen2ItemAclObject komutunu çalıştırırken -DefaultScope parametresini kullanın. Örneğin: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.

Toplu iş boyutu belirterek ACL'leri toplu işlerde özyinelemeli olarak ayarlayan bir örneği görmek için Set-AzDataLakeGen2AclRecursive başvuru makalesine bakın.

ACL'leri güncelleştirme

Bir ACL'yi güncelleştirdiğinizde, ACL'yi değiştirmek yerine ACL'yi değiştirirsiniz. Örneğin, ACL'de listelenen diğer güvenlik sorumlularını etkilemeden ACL'ye yeni bir güvenlik sorumlusu ekleyebilirsiniz. ACL'yi güncelleştirmek yerine değiştirmek için bu makalenin ACL'leri ayarlama bölümüne bakın.

Bu bölümde şunların nasıl yapıldığını görebilirsiniz:

  • ACL'yi güncelleştirme
  • ACL'leri özyinelemeli olarak güncelleştirme

ACL'yi güncelleştirme

İlk olarak ACL'yi alın. Ardından, bir ACL girdisi Set-AzDataLakeGen2ItemAclObject eklemek veya güncelleştirmek için cmdlet'ini kullanın. ACL'yi Update-AzDataLakeGen2Item işlemek için cmdlet'ini kullanın.

Bu örnek, bir kullanıcı için dizinde ACL oluşturur veya güncelleştirir.

$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = (Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname).ACL
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl

Dekont

Varsayılan bir ACL girdisini güncelleştirmek istiyorsanız Set-AzDataLakeGen2ItemAclObject komutunu çalıştırırken -DefaultScope parametresini kullanın. Örneğin: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID xxxxxxxx-xxxx-xxxxxxxxxxx -Permission r-x -DefaultScope.

ACL'leri özyinelemeli olarak güncelleştirme

Update-AzDataLakeGen2AclRecursive cmdlet'ini kullanarak ACL'leri özyinelemeli olarak güncelleştirin.

Bu örnek, yazma iznine sahip bir ACL girdisi güncelleştirir.

$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission rwx

Update-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl

Dekont

Belirli bir grubun veya kullanıcının, hizmet sorumlusunun veya yönetilen kimliğin ACL'sini ayarlamak için ilgili nesne kimliklerini kullanın. Örneğin, bir grubun ACL'sini ayarlamak için kullanın group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Bir kullanıcının ACL'sini ayarlamak için kullanın user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Toplu iş boyutu belirterek ACL'leri toplu olarak özyinelemeli olarak güncelleştiren bir örneği görmek için Update-AzDataLakeGen2AclRecursive başvuru makalesine bakın.

ACL girdilerini kaldırma

Bu bölümde şunların nasıl yapıldığını görebilirsiniz:

  • ACL girdisini kaldırma
  • ACL girdilerini özyinelemeli olarak kaldırma

ACL girdisini kaldırma

Bu örnek, var olan bir ACL'den bir girdiyi kaldırır.

$id = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Create the new ACL object.
[Collections.Generic.List[System.Object]]$aclnew =$acl

foreach ($a in $aclnew)
{
    if ($a.AccessControlType -eq "User" -and $a.DefaultScope -eq $false -and $a.EntityId -eq $id)
    {
        $aclnew.Remove($a);
        break;
    }
}
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $aclnew

ACL girdilerini özyinelemeli olarak kaldırma

Bir veya daha fazla ACL girdisini yinelemeli olarak kaldırabilirsiniz. ACL girdisini kaldırmak için, kaldırılacak ACL girdisi için yeni bir ACL nesnesi oluşturun ve ardından bu nesneyi ACL'yi kaldırma işleminde kullanın. Mevcut ACL'yi almayın, yalnızca kaldırılacak ACL girdilerini sağlayın.

Remove-AzDataLakeGen2AclRecursive cmdlet'ini kullanarak ACL girdilerini kaldırın.

Bu örnek, kapsayıcının kök dizininden bir ACL girdisini kaldırır.

$filesystemName = "my-container"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---"

Remove-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName  -Acl $acl

Dekont

Varsayılan bir ACL girdisini kaldırmak istiyorsanız Set-AzDataLakeGen2ItemAclObject komutunu çalıştırdığınızda -DefaultScope parametresini kullanın. Örneğin: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope.

Toplu iş boyutu belirterek toplu işlerde ACL'leri özyinelemeli olarak kaldıran bir örneği görmek için Remove-AzDataLakeGen2AclRecursive başvuru makalesine bakın.

Hatalardan kurtarma

ACL'leri yinelemeli olarak değiştirirken çalışma zamanı veya izin hatalarıyla karşılaşabilirsiniz.

Çalışma zamanı hataları için, işlemi baştan yeniden başlatın. Güvenlik sorumlusunun değiştirilmekte olan dizin hiyerarşisindeki bir dizin veya dosyanın ACL'sini değiştirmek için yeterli izni yoksa izin hataları oluşabilir. İzin sorununu giderin ve devam belirteci kullanarak işlemi hata noktasından sürdürmeyi veya işlemi baştan yeniden başlatmayı seçin. Baştan yeniden başlatmayı tercih ediyorsanız devamlılık belirtecini kullanmanız gerekmez. ACL girişlerini herhangi bir olumsuz etki olmadan yeniden uygulayın.

Bu örnek, sonuçları değişkene döndürür ve ardından başarısız girişleri biçimlendirilmiş bir tabloya aktarır.

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft

Tablonun çıkışına bağlı olarak, tüm izin hatalarını düzeltebilir ve ardından devamlılık belirtecini kullanarak yürütmeyi sürdürebilirsiniz.

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result

Toplu iş boyutu belirterek ACL'leri toplu işlerde özyinelemeli olarak ayarlayan bir örneği görmek için Set-AzDataLakeGen2AclRecursive başvuru makalesine bakın.

İşlemin izin hataları tarafından kesintisiz tamamlanmasını istiyorsanız, bunu belirtebilirsiniz.

Bu örnekte, işlem bir izin hatasıyla karşılaşsa bile yürütmenin devam etmesi için parametresi kullanılır ContinueOnFailure .

$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinueOnFailure

echo "[Result Summary]"
echo "TotalDirectoriesSuccessfulCount: `t$($result.TotalFilesSuccessfulCount)"
echo "TotalFilesSuccessfulCount: `t`t`t$($result.TotalDirectoriesSuccessfulCount)"
echo "TotalFailureCount: `t`t`t`t`t$($result.TotalFailureCount)"
echo "FailedEntries:"$($result.FailedEntries | ft)

Toplu iş boyutu belirterek ACL'leri toplu işlerde özyinelemeli olarak ayarlayan bir örneği görmek için Set-AzDataLakeGen2AclRecursive başvuru makalesine bakın.

En iyi yöntemler

Bu bölümde, ACL'leri özyinelemeli olarak ayarlamak için bazı en iyi yöntem yönergeleri sağlanır.

Çalışma zamanı hatalarını işleme

Çalışma zamanı hatası birçok nedenden oluşabilir (Örneğin: kesinti veya istemci bağlantısı sorunu). Çalışma zamanı hatasıyla karşılaşırsanız özyinelemeli ACL işlemini yeniden başlatın. ACL'ler olumsuz bir etkiye neden olmadan öğelere yeniden uygulanabilir.

İzin hatalarını işleme (403)

Özyinelemeli bir ACL işlemi çalıştırırken erişim denetimi özel durumuyla karşılaşırsanız, AD güvenlik sorumlunuz dizin hiyerarşisindeki bir veya daha fazla alt öğeye ACL uygulamak için yeterli izne sahip olmayabilir. İzin hatası oluştuğunda işlem durdurulur ve bir devam belirteci sağlanır. İzin sorununu düzeltin ve kalan veri kümesini işlemek için devamlılık belirtecini kullanın. Zaten başarıyla işlenen dizinlerin ve dosyaların yeniden işlenmesi gerekmez. Özyinelemeli ACL işlemini yeniden başlatmayı da seçebilirsiniz. ACL'ler olumsuz bir etkiye neden olmadan öğelere yeniden uygulanabilir.

Kimlik Bilgileri

Hedef depolama hesabı veya kapsayıcı kapsamında Depolama Blob Veri Sahibi rolü atanmış bir Microsoft Entra güvenlik sorumlusu sağlamanızı öneririz.

Performans

Gecikme süresini azaltmak için, özyinelemeli ACL işlemini depolama hesabınızla aynı bölgede bulunan bir Azure Sanal Makinesi'nde (VM) çalıştırmanızı öneririz.

ACL sınırları

Bir dizine veya dosyaya uygulayabileceğiniz maksimum ACL sayısı 32 erişim ACL'leri ve 32 varsayılan ACL'dir. Daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil'de erişim denetimi.

Ayrıca bkz.