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.
Çoğu durumda rol ataması, Azure kaynaklarına ihtiyacınız olan izinleri verir. Ancak bazı durumlarda rol atama koşulu ekleyerek daha ayrıntılı erişim denetimi sağlamak isteyebilirsiniz.
Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:
- Rol atamasına koşul ekleme
- Blob dizin etiketine göre bloblara erişimi kısıtlama
Önemli
Azure öznitelik tabanlı erişim denetimi (Azure ABAC), hem standart hem de premium depolama hesabı performans katmanlarında request, resource, environment ve principal özniteliklerini kullanarak Azure Blob Depolama, Azure Data Lake Storage 2. Nesil ve Azure Kuyruklarına erişimi denetlemek için genel kullanıma sunulmuştur (GA). Şu anda liste blobu istek özniteliğini içerir ve hiyerarşik ad alanı için anlık görüntü isteği özniteliği ÖNİzLEME aşamasındadır. Azure Depolama için ABAC'nin tam özelliklerin durumu hakkında bilgi için bkz Azure Depolama'daki koşul özelliklerinin durumu.
Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.
Önkoşullar
Rol atama koşullarını ekleme veya düzenleme önkoşulları hakkında bilgi için bkz . Koşullar önkoşulları.
Koşul
Bu öğreticide, belirli bir etikete sahip bloblara erişimi kısıtlaacaksınız. Örneğin, Chandra'nın yalnızca Project=Cascade etiketine sahip dosyaları okuyabilmesi için rol atamasına bir koşul eklersiniz.
Chandra, Project=Cascade etiketi olmayan bir blobu okumaya çalışırsa erişime izin verilmez.
Koşul kodda şöyle görünür:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND NOT
SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
1. Adım: Önkoşulları yükleme
Bir PowerShell penceresi açın.
Yüklü modüllerin sürümlerini denetlemek için Get-InstalledModule kullanın.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.StorageGerekirse, Az,Az.Resources ve Az.Storage modülleri için gerekli sürümleri yüklemek için Install-Module kullanın.
Install-Module -Name Az -RequiredVersion 5.5.0 Install-Module -Name Az.Resources -RequiredVersion 3.2.1 Install-Module -Name Az.Storage -RequiredVersion 2.5.2-preview -AllowPrereleaseOturumu yenilemek için PowerShell'i kapatıp yeniden açın.
2. Adım: Azure'da oturum açma
Connect-AzAccount komutunu kullanın ve dizininizde Kullanıcı Erişimi Yöneticisi veya Sahip olarak oturum açarken görünen yönergeleri izleyin.
Connect-AzAccountTüm aboneliklerinizi listelemek için Get-AzSubscription komutunu kullanın.
Get-AzSubscriptionAbonelik kimliğini belirleyin ve değişkeni başlatın.
$subscriptionId = "<subscriptionId>"Aboneliği etkin abonelik olarak ayarlayın.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
3. Adım: Kullanıcı oluşturma
Bir kullanıcı oluşturmak veya var olan bir kullanıcıyı bulmak için New-MgUser kullanın. Bu öğreticide örnek olarak Chandra kullanılır.
Kullanıcının nesne kimliği için değişkeni başlatın.
$userObjectId = "<userObjectId>"
4. Adım: Depolamayı ayarlama
Blob dizini özelliğiyle uyumlu bir depolama hesabı oluşturmak için New-AzStorageAccount kullanın. Daha fazla bilgi için Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma bölümüne bakın.
Depolama hesabında yeni bir blob kapsayıcısı oluşturmak ve anonim erişim düzeyini Özel (anonim erişim yok) olarak ayarlamak için New-AzStorageContainer kullanın.
Set-AzStorageBlobContent komutunu kullanarak kapsayıcıya bir metin dosyası yükleyin.
Metin dosyasına aşağıdaki blob dizin etiketini ekleyin. Daha fazla bilgi için bkz. Azure Blob Depolama'da verileri yönetmek ve bulmak için blob dizini etiketlerini kullanma.
Uyarı
Bloblar ayrıca rastgele kullanıcı tanımlı anahtar-değer meta verilerini depolama özelliğini de destekler. Meta veriler blob dizin etiketlerine benzer olsa da, blob dizin etiketlerini koşullarla birlikte kullanmanız gerekir.
Anahtar Değer Proje Şelale Kapsayıcıya ikinci bir metin dosyası yükleyin.
aşağıdaki blob dizin etiketini ikinci metin dosyasına ekleyin.
Anahtar Değer Proje Fırıncı Kullandığınız adlarla aşağıdaki değişkenleri başlatın.
$resourceGroup = "<resourceGroup>" $storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameCascade = "<blobNameCascade>" $blobNameBaker = "<blobNameBaker>"
5. Adım: Koşulu olan bir rol atama
Depolama Blobu Veri Okuyucusu rol değişkenlerini başlatın.
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Kaynak grubunun kapsamını başlatın.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Durumu başlatın.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"PowerShell'de, koşulunuz dolar işareti ($) içeriyorsa, önüne bir backtick işareti (`) eklemeniz gerekir. Örneğin, bu koşul etiket anahtarı adını çizmek için dolar işaretlerini kullanır.
Koşul sürümünü ve açıklamasını hazırlayın.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"New-AzRoleAssignment komutunu kullanarak, kullanıcıya bir kaynak grubu kapsamındaki bir koşula sahip Depolama Blobu Veri Okuyucusu rolünü atayın.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionÇıktının bir örneği aşağıda verilmişti:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso ft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : Chandra SignInName : chandra@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to blobs with the tag Project=Cascade ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/co ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))
6. Adım: (İsteğe bağlı) Koşulu Azure portalında görüntüleme
Azure portalında kaynak grubunu açın.
Erişim denetimi (IAM) öğesini seçin.
Rol atamaları sekmesinde rol atamasını bulun.
Koşulu görüntülemek için Koşul sütununda Görüntüle/Düzenle'yi seçin.
7. Adım: Koşulu test edin
Yeni bir PowerShell penceresi açın.
Chandra olarak oturum açmak için Connect-AzAccount kullanın.
Connect-AzAccountKullandığınız adlarla aşağıdaki değişkenleri başlatın.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"Depolama hesabınıza daha kolay erişmek için belirli bir bağlam oluşturmak için New-AzStorageContext kullanın.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountNameBaker projesinin dosyasını okumaya çalışmak için Get-AzStorageBlob komutunu kullanın.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtxÇıktının bir örneği aşağıda verilmişti. Eklediğiniz koşul nedeniyle dosyayı okuyamadığınıza dikkat edin.
Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation using this permission. ErrorCode: AuthorizationPermissionMismatch ErrorMessage: This request is not authorized to perform this operation using this permission. RequestId: <requestId> Time: Sat, 24 Apr 2021 13:26:25 GMT At line:1 char:1 + Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Con ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzStorageBlob], StorageException + FullyQualifiedErrorId : StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageBlob CommandCascade projesinin dosyasını okuyun.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtxÇıktının bir örneği aşağıda verilmişti. Project=Cascade etiketine sahip olduğundan dosyayı okuyabileceğinize dikkat edin.
AccountName: <storageAccountName>, ContainerName: <containerName> Name BlobType Length ContentType LastModified AccessTier SnapshotT ime ---- -------- ------ ----------- ------------ ---------- --------- CascadeFile.txt BlockBlob 7 text/plain 2021-04-24 05:35:24Z Hot
8. Adım: (İsteğe bağlı) Koşulu düzenleme
Diğer PowerShell penceresinde, eklediğiniz rol atamasını almak için Get-AzRoleAssignment komutunu kullanın.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdKoşulu düzenleyin.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Baker'))"Koşulu ve açıklamayı hazırlayın.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"Rol atamasının koşulunu güncelleştirmek için Set-AzRoleAssignment kullanın.
Set-AzRoleAssignment -InputObject $testRa -PassThruÇıktının bir örneği aşağıda verilmişti:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso ft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : Chandra SignInName : chandra@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to blobs with the tag Project=Cascade or Project=Baker ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/co ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.S torage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Baker'))
9. Adım: Kaynakları temizleme
Eklediğiniz rol atamasını ve koşulu kaldırmak için Remove-AzRoleAssignment komutunu kullanın.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroupOluşturduğunuz depolama hesabını silin.
Oluşturduğunuz kullanıcıyı silin.