Azure Data Lake ACL'leri yönetmek için PowerShell kullanma Depolama 2

Bu makalede, dizinlerin ve dosyaların erişim denetim listelerini almak, ayarlamak ve güncelleştirmek için PowerShell'i nasıl kullanabileceğiniz gösterir.

Üst dizin altında oluşturulan yeni alt öğeler için ACL devralma zaten kullanılabilir. Ancak, her alt öğe için bu değişiklikleri ayrı ayrı yapmak zorunda kalmadan üst dizinin var olan alt öğelerinde ACL'leri de ekleyebilir, güncelleştirebilirsiniz ve kaldırabilirsiniz.

BaşvuruTekrarlayan ACL ÖrnekleriGeri bildirim gönderin

Önkoşullar

  • Bir Azure aboneliği. Daha fazla bilgi için bkz. Azure ücretsiz denemeyi edinin.

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

  • Azure CLI sürümü 2.6.0 veya daha yüksek.

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

    • Hedef kapsayıcı Azure Active Directory, üst kaynak grubu veya abonelik kapsamında blob Veri Sahibi rolüne atanmış olan bir Depolama (AD) güvenlik sorumlusu.

    • ACL ayarlarını uygulamayı planlayır hedef kapsayıcının veya dizinin kullanıcıya sahip olmak. ACL'leri otomatik olarak ayarlamak için, bu, hedef kapsayıcıdaki veya dizindeki tüm alt öğeleri içerir.

    • Depolama anahtarı seçin.

PowerShell modülünü yükleme

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

    echo $PSVersionTable.PSVersion.ToString()
    

    PowerShell sürümünizi yükseltmek için bkz. Var olan sürümü Windows PowerShell

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

    Install-Module Az.Storage -Repository PSGallery -Force  
    

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

Bağlan oturum açın

Komutların depolama hesabı için yetkilendirmeyi nasıl almalarını istediğinize seçin.

1. Seçenek: Azure Active Directory (AD) kullanarak yetkilendirme alma

Not

Erişimi yetkilendirmek için Azure Active Directory (Azure AD) kullanıyorsanız, güvenlik sorumlusuna Blob Veri Sahibi rolü Depolama atanmış olduğundan emin olun. ACL izinlerinin nasıl uygulandığı ve bu izinlerin değiştirilmesinin etkileri hakkında daha fazla bilgi edinmek için bkz. Azure Data Lake'deki Access Depolama 2.

Bu yaklaşımla, sistem kullanıcı hesabınıza uygun Azure rol tabanlı erişim denetimi (Azure RBAC) atamalarına ve ACL izinlerine sahip olduğunu garantiler.

  1. bir Windows PowerShell penceresi açın, ardından komutla Azure aboneliğinde oturum Connect-AzAccount açın ve ekranda yönergeleri izleyin.

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

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

    $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. Hesap anahtarı kullanarak depolama hesabı bağlamına sahip olun.

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

ACL'leri al

Cmdlet'i kullanarak bir dizinin veya dosyanın Get-AzDataLakeGen2Item ACL'sini almak.

Bu örnekte, bir kapsayıcının kök dizininde ACL bulunur ve ardından ACL konsola yazdırılır.

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

Bu örnekte, dizinin ACL'sini alırve ardından ACL'i konsola yazdırır.

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

Bu örnekte, bir dosyanın ACL'sini alır ve ardından ACL'i konsola yazdırır.

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

Aşağıdaki resimde, dizinin ACL'sini alan çıkışını gösterir.

Dizin için ACL çıktısı al

Bu örnekte, sahibi olan kullanıcının izinleri okuması, yazması ve yürütmesi gerekir. Sahibi olan grubun izinleri yalnızca okuma ve yürütme izni vardır. Erişim denetim listeleri hakkında daha fazla bilgi için bkz. Azure Data Lake veya Gen2'de Depolama .

ACL'leri ayarlama

Bir ACL ayar her girdiyle birlikte ACL'nin tamamını değiştirirsiniz. Var olan diğer girdileri etkilemeden güvenlik sorumlusu izin düzeyini değiştirmek veya ACL'ye yeni bir güvenlik sorumlusu eklemek için bunun yerine ACL'yi güncelleştirmeniz gerekir. Bir ACL'nin yerini değiştirmek yerine ACL'leri güncelleştirmek için, bu makalenin ACL'leri Güncelleştirme bölümüne bakın.

ACL'yi ayarlamayı seçerseniz, sahibi olan kullanıcı için bir girdi, sahip olan grup için bir girdi ve diğer tüm kullanıcılar için de 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ı nasıl yapmak gerekir:

  • ACL ayarlama
  • Tekrarlayan ACL'leri ayarlama

ACL ayarlama

Cmdlet'i kullanarak, sahibi olan kullanıcı, grubun sahibi olan kullanıcı veya diğer kullanıcılar için set-AzDataLakeGen2ItemAclObject bir ACL oluşturun. Ardından, Update-AzDataLakeGen2Item cmdlet'i kullanarak ACL'ye işlemek için bu cmdlet'i kullanın.

Bu örnekte, ACL'nin sahibi olan kullanıcı, grubun sahibi veya diğer kullanıcılar için kapsayıcının kök dizininde ACL ayarlanır ve ardından ACL konsola yazdırılı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 örnekte, ACL dizinde sahip olan kullanıcı, grubun sahibi veya diğer kullanıcılar için ACL ayarlanır ve ardından ACL konsola yazdırılı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 girdisi ayarlamak için Set-AzDataLakeGen2ItemAclObject komutunu çalıştırarak -DefaultScope parametresini kullanın. Örneğin: $acl = set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope .

Bu örnekte, ACL dosyası üzerinde sahip olan kullanıcı, grubun sahibi olan grup veya diğer kullanıcılar için ayarlar ve ardından ACL'i 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 grup veya kullanıcının ACL'sini ayarlamak için, ilgili nesne kimliklerini kullanın. Örneğin, group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx veya user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx .

Aşağıdaki resimde, dosyanın ACL'sini ayardikten sonra çıkışı gösterir.

Dosya için ACL çıktısı al

Bu örnekte, sahibi olan kullanıcı ve grubun sahibi yalnızca okuma ve yazma izinlerine sahip olur. 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 veya Gen2'de Depolama .

Tekrarlayan ACL'leri ayarlama

Set-AzDataLakeGen2AclRecursive cmdlet'ini kullanarak ACL'leri yeniden ayarlayın.

Bu örnekte, adlı dizinin ACL'sini my-parent-directory 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 tüm diğer kullanıcılara erişim izni verir. Bu örnekteki son ACL girdisi, belirli bir kullanıcıya nesne kimliği olarak "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 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 girdisi ayarlamak için Set-AzDataLakeGen2ItemAclObject komutunu çalıştırarak -DefaultScope parametresini kullanın. Örneğin: $acl = set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope .

Bir toplu işlem boyutu belirterek toplu işlemlerde ACL'leri tekrarlı olarak ayarlayan bir örnek için Set-AzDataLakeGen2AclReclRecursive başvuru makalesine bakın.

ACL'leri güncelleştirme

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

Bir ACL'i güncelleştirmek için, güncelleştirmek istediğiniz ACL girdisini kullanarak yeni bir ACL nesnesi oluşturun ve ardından ACL güncelleştirme işlemi sırasında bu nesneyi kullanın. Mevcut ACL'leri elde etmek için yok, yalnızca güncelleştirilmiş ACL girdilerini sağla.

Bu bölümde şunları nasıl yapmak gerekir:

  • ACL'i güncelleştirme
  • Tekrarlayan ACL'leri güncelleştirme

ACL'i güncelleştirme

İlk olarak, ACL'ye binin. Ardından, set-AzDataLakeGen2ItemAclObject cmdlet'i kullanarak ACL girdisini ekleyin veya güncelleştirin. Update-AzDataLakeGen2ItemACL'i işlemek için cmdlet'i kullanın.

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

$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

Not

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

Tekrarlayan ACL'leri güncelleştirme

Update-AzDataLakeGen2AclRecursive cmdlet'ini kullanarak ACL'leri tekrar tekrar güncelleştirin.

Bu örnekte, yazma izni olan bir ACL girdisi güncellemeler.

$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 grup veya kullanıcının ACL'sini ayarlamak için, ilgili nesne kimliklerini kullanın. Örneğin, group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx veya user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx .

Bir toplu işlem boyutu belirterek ACL'leri toplu işlemlerde tekrarlı olarak güncelleştiren bir örnek için, Update-AzDataLakeGen2AclReclRecursive başvuru makalesine bakın.

ACL girdilerini kaldırma

Bu bölümde şunları nasıl yapmak gerekir:

  • ACL girdisini kaldırma
  • Tekrarlayan ACL girdilerini kaldırma

ACL girdisini kaldırma

Bu örnekte, var olan bir ACL'den bir girdi 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

Tekrarlayan ACL girdilerini kaldırma

Bir veya daha fazla ACL girdisini tekrarlı bir şekilde kaldıran sizsiniz. Bir ACL girdisini kaldırmak için, ACL girişinin kaldırılması için yeni bir ACL nesnesi oluşturun ve bu nesneyi ACL işlemi sırasında kullanın. Mevcut ACL'leri elde etmek için ACL girdilerini sağlamanız gerekir.

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

Bu örnekte, kapsayıcının kök dizininden bir ACL girdisi 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 girdisini kaldırmak için Set-AzDataLakeGen2ItemAclObject komutunu çalıştırarak -DefaultScope parametresini kullanın. Örneğin: $acl = set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope .

Toplu işlem boyutunu belirterek toplu işlemlerde tekrarlayan ACL'leri kaldıran bir örnek için Remove-AzDataLakeGen2AclRecursive başvuru makalesine bakın.

Hatalardan kurtar

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

Çalışma zamanı hataları için, işlemi en baştan yeniden başlatın. Güvenlik sorumlusu değiştirilecek dizin hiyerarşisinde yer alan bir dizin veya dosyanın ACL'sini değiştirmek için yeterli izinlere sahip yoksa izin hataları oluşabilir. İzin sorununa ilişkin olarak devam eden ve devam belirteci kullanarak işlemi hata noktasından sürdürmeyi seçin ya da işlemi en baştan yeniden başlatın. En baştan yeniden başlatmayı tercih ediyorsanız, devam belirteci kullanmak zorunda kalmayın. Herhangi bir negatif etki olmadan ACL girdilerini yeniden dönüştürülebilir.

Bu örnek değişkene sonuç verir ve sonra kanallar biçimlendirilmiş bir tabloya giriş başarısız olur.

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

Tablonun çıktısını temel alarak, tüm izin hatalarını düzeltebilir ve devam belirteci kullanarak yürütmeyi sürdürabilirsiniz.

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

Bir toplu işlem boyutu belirterek toplu işlemlerde ACL'leri tekrarlı olarak ayarlayan bir örnek için Set-AzDataLakeGen2AclReclRecursive başvuru makalesine bakın.

İşleme izin hatalarına göre kesintisiz olarak tamamlanacak şekilde tamamlamak için bunu belirtabilirsiniz.

Bu örnekte parametre ContinueOnFailure kullanıldığından, işlem izin hatasıyla karşılaşsa bile yürütme devam eder.

$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)

Bir toplu işlem boyutu belirterek toplu işlemlerde ACL'leri tekrarlı olarak ayarlayan bir örnek için Set-AzDataLakeGen2AclReclRecursive başvuru makalesine bakın.

En iyi yöntemler

Bu bölümde, aynı anda ACL'leri ayarlamaya yardımcı olacak bazı en iyi uygulama yönergeleri yer almaktadır.

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

Çalışma zamanı hatasının birçok nedeni olabilir (Örneğin: kesinti veya istemci bağlantısı sorunu). Çalışma zamanı hatasıyla karşılaşırsanız, otomatik ACL işlemini yeniden başlatın. ACL'ler, negatif bir etkiye neden olmadan öğelere yeniden başvurulabilecektir.

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

Tekrarlayan bir ACL işlemini çalışırken erişim denetimi özel durumuyla karşılaşırsanız, AD güvenlik sorumlusuz dizin hiyerarşisinde bir veya birden çok alt öğeye ACL uygulamak için yeterli izinlere sahip olmayabilir. İzin hatası oluştuğunda, işlem durur ve bir devam belirteci sağlanır. İzin sorunu düzeltin ve devam belirteci kullanarak kalan veri kümesi işlemeyi kullanın. Başarıyla işlenen dizinlerin ve dosyaların yeniden işlenmesi gerekmeyecektir. Yinelemeli ACL işlemini yeniden başlatmayı da seçebilirsiniz. ACL'ler, negatif bir etkiye neden olmadan öğelere yeniden başvurulabilecektir.

Kimlik Bilgileri

Hedef depolama hesabı veya kapsayıcı kapsamında Blob Veri Sahibi rolüne Depolama bir Azure AD güvenlik sorumlusu sağlamanız önerilir.

Performans

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

ACL sınırları

Dizine veya dosyaya uygulayabilecek en fazla ACL sayısı, 32 erişim ACL'si ve 32 varsayılan ACL'tir. Daha fazla bilgi için bkz. Azure Data Lake veya Gen2'de Access Depolama .

Ayrıca bkz.