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 özellik durumu bilgileri için Azure Depolama'daki koşul özelliklerinin durumu başlıklı bölüme bakın.
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: Azure'da oturum açma
az login komutunu kullanın ve dizininizde Kullanıcı Erişimi Yöneticisi veya Sahip olarak oturum açarken görünen yönergeleri izleyin.
az loginAboneliklerinizin kimliğini almak için az account show komutunu kullanın.
az account showAbonelik kimliğini belirleyin ve değişkeni başlatın.
subscriptionId="<subscriptionId>"
2. Adım: Kullanıcı oluşturma
Kullanıcı oluşturmak veya var olan bir kullanıcıyı bulmak için az ad user create komutunu 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>"
3. Adım: Depolamayı ayarlama
Azure CLI'dan Blob depolamaya erişimi Microsoft Entra kimlik bilgileriyle veya depolama hesabı erişim anahtarını kullanarak yetkileyebilirsiniz. Bu makalede, Microsoft Entra Id kullanarak Blob depolama işlemlerini yetkilendirme işlemi gösterilmektedir. Daha fazla bilgi için bkz . Hızlı Başlangıç: Azure CLI ile blob oluşturma, indirme ve listeleme
Blob dizini özelliğiyle uyumlu bir depolama hesabı oluşturmak için az storage account komutunu kullanın. Daha fazla bilgi için Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma bölümüne bakın.
Az storage container komutunu kullanarak depolama hesabında yeni bir blob kapsayıcısı oluşturun ve anonim erişim düzeyini Özel (anonim erişim yok) olarak ayarlayın.
Kapsayıcıya bir metin dosyası yüklemek için az storage blob upload komutunu kullanın.
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>"
4. 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'))"Bash'te geçmiş genişletmesi etkinleştirildiyse ünlem işareti (!) nedeniyle iletiyi
bash: !: event not foundgörebilirsiniz. Bu durumda, komutuylaset +Hgeçmiş genişletmeyi devre dışı bırakabilirsiniz. Geçmiş genişletmeyi yeniden etkinleştirmek içinset -Hkullanın.Bash'te dolar işaretinin ($) genişleme için özel bir anlamı vardır. Koşulunuzda dolar işareti ($) varsa, önüne ters eğik çizgi (\) eklemeniz gerekebilir. Örneğin, bu koşul etiket anahtarı adını çizmek için dolar işaretlerini kullanır. Bash'te tırnak işareti kuralları hakkında daha fazla bilgi için bkz. Çift Tırnaklar.
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"Depolama Blobu Veri Okuyucusu rolünü bir kaynak grubu kapsamındaki kullanıcıya bir koşulla atamak için az role assignment create komutunu kullanın.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersionÇıktının bir örneği aşağıda verilmişti:
{ "canDelegate": null, "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'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
5. 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.
6. Adım: Koşulu test edin
Yeni bir komut penceresi açın.
Chandra olarak oturum açmak için az login komutunu kullanın.
az loginKullandığınız adlarla aşağıdaki değişkenleri başlatın.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"Baker projesinin dosyasının özelliklerini okumayı denemek için az storage blob show komutunu kullanın.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode loginÇıktının bir örneği aşağıda verilmişti. Eklediğiniz koşul nedeniyle dosyayı okuyamadığınıza dikkat edin.
You do not have the required permissions needed to perform this operation. Depending on your operation, you may need to be assigned one of the following roles: "Storage Blob Data Contributor" "Storage Blob Data Reader" "Storage Queue Data Contributor" "Storage Queue Data Reader" If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value.Cascade projesi için dosyanın özelliklerini okuyun.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode loginÇıktının bir örneği aşağıda verilmişti. Project=Cascade etiketine sahip olduğundan dosyanın özelliklerini okuyabileceğinize dikkat edin.
{ "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, "isAppendBlobSealed": null, "isCurrentVersion": null, "lastAccessedOn": null, "metadata": {}, "name": "<blobNameCascade>", "objectReplicationDestinationPolicy": null, "objectReplicationSourceProperties": [], "properties": { "appendBlobCommittedBlockCount": null, "blobTier": "Hot", "blobTierChangeTime": null, "blobTierInferred": true, "blobType": "BlockBlob", "contentLength": 7, "contentRange": null, ... }
7. Adım: (İsteğe bağlı) Koşulu düzenleme
Diğer komut penceresinde, az role assignment list komutunu kullanarak eklediğiniz rol atamasını alın.
az role assignment list --assignee $userObjectId --resource-group $resourceGroupÇıkış aşağıdakine benzer:
[ { "canDelegate": null, "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'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" } ]Aşağıdaki biçime sahip bir JSON dosyası oluşturun ve
conditioniledescriptionözelliklerini güncelleyin.{ "canDelegate": null, "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'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade or Project=Baker", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }Rol atamasının koşulunu güncelleştirmek için az role assignment update komutunu kullanın.
az role assignment update --role-assignment "./path/roleassignment.json"
8. Adım: Kaynakları temizleme
Eklediğiniz rol atamasını ve koşulu kaldırmak için az role assignment delete komutunu kullanın.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroupOluşturduğunuz depolama hesabını silin.
Oluşturduğunuz kullanıcıyı silin.