Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale, dizinlerin ve dosyaların erişim kontrol listelerini (ACL) almak için PowerShell'i nasıl kullanacağınızı ve güncellemenizi gösterir.
Ebeveyn dizin altında oluşturduğunuz yeni alt öğeler otomatik olarak ACL'leri devralır. Ancak, her bir ana dizinin mevcut alt öğelerine ayrıca ACL ekleyebilir, güncelleyebilir ve kaldırabilirsiniz; bu değişiklikleri her bir alt öğe için ayrı ayrı yapmadan.
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ı. Bu yönergeleri izleyerek bir tane oluşturun.
Aşağıdaki güvenlik izinlerinden biri:
Depolama Blob'u Veri Sahibi rolüne atanmış, hedef konteyner, depolama hesabı, ana kaynak grubu veya abonelik kapsamında sağlanmış Microsoft Entra ID güvenlik prensibi.
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, bu kullanıcı hedef konteyner veya dizindeki tüm alt öğeleri dahil eder.
PowerShell modülünü yükleme
Aşağıdaki komutu kullanarak yüklediğiniz PowerShell sürümünün
5.1veya daha yeni olduğunu doğrulayın.echo $PSVersionTable.PSVersion.ToString()PowerShell sürümünüzü yükseltmek için Mevcut Windows PowerShell'i Yükseltme bölümünü inceleyin.
Az.Storage modülünü yükleyin.
Install-Module Az.Storage -Repository PSGallery -ForcePowerShell modüllerinin nasıl kurulacağı hakkında daha fazla bilgi için Install the Azure PowerShell modülü bölümüne bakınız.
Hesaba bağlanma
Bir Windows PowerShell komut penceresi açın, ardından Connect-AzAccount komutuyla Azure aboneliğinizde oturum açın ve ekrandaki yönergeleri izleyin.
Connect-AzAccountKimliğiniz birden fazla abonelikle ilişkilendiriliyorsa ve aboneliği seçmeniz istenmiyorsa, aktif aboneliğinizi kullanmak 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>Depolama hesabı bağlamını alın.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
ACL'leri alma
Get-AzDataLakeGen2Item cmdlet'ini kullanarak bir dizin veya dosyanın ACL'sini alın.
Azure Data Lake Storage'da bir konteynere dosya sistemi de denir. Aşağıdaki örneklerde kullanılan parametre -FileSystem , konteynerinizin adını alır.
Aşağıdaki örnek, bir konteynerin 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
Aşağıdaki ö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
Aşağıdaki ö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.
Bu örnekte sahibi olan kullanıcının okuma, yazma ve yürütme izinleri vardır. Sahip grup yalnızca okuma ve çalıştırma izinlerine sahiptir. Erişim denetimi listeleri hakkında daha fazla bilgi için bkz . Azure Data Lake Storage'da erişim denetimi.
ACL'leri ayarlama
ACL ayarladığınızda , tüm ACL'yi ve tüm girişlerini değiştirirsiniz . Bir güvenlik prensibının izin seviyesini değiştirmek veya ACL'ye yeni bir güvenlik prensibi eklemek istiyorsanız, diğer mevcut girişleri etkilemeden ACL'yi güncelleyin. 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 Kullanıcılar ve kimlikler bölümüne bakın.
Bu bölümde şunların nasıl yapıldığını görebilirsiniz:
- ACL ayarlama
- ACL’leri özyinelemeli olarak belirleme
ACL ayarlama
Sahip kullanıcı, sahip grup veya diğer kullanıcılar için bir ACL oluşturmak amacıyla Set-AzDataLakeGen2ItemAclObject cmdlet'ini kullanın. Ardından, ACL'yi işlemek için Update-AzDataLakeGen2Item 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 kullanıcı, sahip 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
Not
Varsayılan bir ACL girişi ayarlamak için, 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
Not
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.
Bu örnekte, kullanıcının ve grubun yalnızca okuma ve yazma izinleri vardır. Diğer tüm kullanıcıların yazma ve yürütme izinleri vardır. Erişim denetimi listeleri hakkında daha fazla bilgi için bkz . Azure Data Lake Storage'da 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 girişler, sahip olan kullanıcıya okuma, yazma ve yürütme izinleri verir, sahip olan gruba sadece okuma ve yürütme izinleri verir, diğerlerine ise 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
Not
Varsayılan bir ACL girişi ayarlamak için, 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 tamamen değiştirmek yerine üzerindeki ayarlamaları yaparsınız. Ö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, ACL girdisi eklemek veya güncelleştirmek için Set-AzDataLakeGen2ItemAclObject cmdlet'ini kullanın. ACL'yi işlemek için Update-AzDataLakeGen2Item 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 aaaaaaaa-bbbb-cccc-1111-222222222222 -Permission r-x -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Not
Varsayılan ACL girişini güncellemek için, Set-AzDataLakeGen2ItemAclObject komutunu çalıştırırken -DefaultScope parametresini kullanın. Örneğin: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID aaaaaaaa-bbbb-cccc-1111-222222222222 -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
Not
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.
Update-AzDataLakeGen2AclRecursive başvuru makalesine bakarak toplu işlem boyutu belirterek ACL'leri özyinelemeli olarak toplu güncelleştiren bir örnek görebilirsiniz.
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. Bu makalenin önceki bölümlerinde oluşturulan $ctx depolama hesabı bağlamını ve $acl, $filesystemName ve $dirname değişkenlerini yeniden kullanı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. Bir ACL girişini kaldırmak için, kaldırmak istediğiniz ACL girişi için yeni bir ACL nesnesi oluşturun ve ardından bu nesneyi ACL kaldırma işleminde kullanın. Mevcut ACL'yi getirmeyin, 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
Not
Varsayılan bir ACL girişini kaldırmak için, Set-AzDataLakeGen2ItemAclObject komutunu çalıştırırken -DefaultScope parametresini kullanın. Örneğin: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope.
Özyinelemeli olarak ACL'leri parti boyutu belirterek toplu işlemlerde kaldıran bir örneği görmek için Remove-AzDataLakeGen2AclRecursive başvuru makalesine bakın.
Hatalardan kurtulmak
ACL'leri yinelemeli olarak değiştirirken çalışma zamanı veya izin hatalarıyla karşılaşabilirsiniz. Bu bölümdeki örnekler, depolama hesabı bağlamını ve $ctx, $filesystemName, ve $dirname bu makalenin önceki bölümlerinde belirlenen değişkenleri yeniden kullanır$acl.
Çalışma zamanı hataları için, işlemi baştan yeniden başlatın. Güvenlik yöneticisi, değiştirdiğiniz dizin hiyerarşisindeki bir dizinin veya dosyanın ACL'sini değiştirmek için yeterli izne sahip değilse izin hataları meydana gelebilir. İzin sorununu ele alın ve ardından ya devam belirteci kullanarak süreci başarısızlık noktasından devam ettirmeyi ya da süreci baştan 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 uygulayabilirsiniz.
Bu örnek sonuçları değişkene döndürür ve başarısız girişleri biçimlendirilmiş bir tabloya yönlendirir.
$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.
Sürecin izin hataları olmadan tamamlanmasını istiyorsanız, bunu yapacak şekilde yapılandırabilirsiniz.
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.TotalDirectoriesSuccessfulCount)"
echo "TotalFilesSuccessfulCount: `t`t`t$($result.TotalFilesSuccessfulCount)"
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 Blobu 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.