Öğretici: Azure PowerShell kullanarak bloblara erişimi kısıtlamak için rol atama koşulu ekleme
Ç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 , environment
resource
, ve özniteliklerini kullanarak request
Azure Blob Depolama, Azure Data Lake Storage 2. Nesil ve principal
Azure Kuyruklarına erişimi denetlemek için genel olarak kullanılabilir (GA). Şu anda kapsayıcı meta verileri kaynak özniteliği ve liste blobu ekleme isteği özniteliği ÖNİzLEME aşamasındadır. Azure Depolama için ABAC'nin tam özellik durumu bilgileri için bkz. Azure Depolama 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
PowerShell penceresini 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.Storage
Gerekirse, Az, Az.Resources ve Az.Depolama 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 -AllowPrerelease
Oturumu yenilemek için PowerShell'i kapatıp yeniden açın.
2. Adım: Azure'da oturum açma
Bağlan-AzAccount komutunu kullanın ve dizininizde Kullanıcı Erişimi Yönetici istrator veya Sahip olarak oturum açarken görünen yönergeleri izleyin.
Connect-AzAccount
Tüm aboneliklerinizi listelemek için Get-AzSubscription komutunu kullanın.
Get-AzSubscription
Abonelik 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-Az Depolama Account kullanın. Daha fazla bilgi için bkz . Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma.
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-Az Depolama Container kullanın.
Kapsayıcıya metin dosyası yüklemek için Set-Az Depolama BlobContent komutunu kullanın.
Metin dosyasına aşağıdaki blob dizin etiketini ekleyin. Daha fazla bilgi için bkz. Azure Blob Depolama verilerini yönetmek ve bulmak için blob dizin etiketlerini kullanma.
Not
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 Project Cascade Kapsayıcıya ikinci bir metin dosyası yükleyin.
aşağıdaki blob dizin etiketini ikinci metin dosyasına ekleyin.
Anahtar Değer Project 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 Blob 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"
Koşulu 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 ekini bir backtick (') ile belirtmeniz 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ı başlatın.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"
New-AzRoleAssignment komutunu kullanarak Depolama Blob Veri Okuyucusu rolünü bir kaynak grubu kapsamındaki kullanıcıya bir koşulla atayın.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
Çıkış örneği:
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 Bağlan-AzAccount kullanın.
Connect-AzAccount
Kullandığı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-Az Depolama Context kullanın.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
Baker projesinin dosyasını okumaya çalışmak için Get-Az Depolama Blob 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 Command
Art Arda 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 $userObjectId
Koş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ı başlatı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 komutunu kullanın.
Set-AzRoleAssignment -InputObject $testRa -PassThru
Çıkış örneği:
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 $resourceGroup
Oluşturduğunuz depolama hesabını silin.
Oluşturduğunuz kullanıcıyı silin.