Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans la plupart des cas, une attribution de rôle accorde les autorisations dont vous avez besoin pour les ressources Azure. Toutefois, dans certains cas, vous souhaiterez peut-être fournir un contrôle d’accès plus granulaire en ajoutant une condition d’attribution de rôle.
Dans ce tutoriel, vous allez apprendre à :
- Ajouter une condition à une attribution de rôle
- Restreindre l’accès aux objets blob en fonction d’une étiquette d’index d’objets blob
Important
Le contrôle d’accès en fonction des attributs Azure (Azure ABAC) est en disponibilité générale (GA) pour contrôler l’accès au Stockage Blob Azure, à Azure Data Lake Storage Gen2 et aux files d’attente Azure à l’aide des attributs request, resource, environment et principal dans les niveaux de performances des comptes de stockage standard et premium. Actuellement, l’objet blob de liste inclut l’attribut de requête et l’attribut de requête d’instantané pour l’espace de noms hiérarchique sont en PRÉVERSION. Pour obtenir des informations complètes sur l’état des fonctionnalités d’ABAC pour Stockage Azure, consultez État des fonctionnalités de condition dans Stockage Azure.
Consultez les Conditions d’utilisation supplémentaires pour les préversions Microsoft Azure pour les conditions légales qui s’appliquent aux fonctionnalités Azure en version bêta, en préversion ou qui ne sont pas encore publiées en disponibilité générale.
Conditions préalables
Pour plus d’informations sur les prérequis à l’ajout ou à la modification des conditions d’attribution de rôle, consultez Prérequis aux conditions.
Condition
Dans ce tutoriel, vous limitez l’accès aux objets blob avec une balise spécifique. Par exemple, vous ajoutez une condition à une attribution de rôle afin que Chandra puisse uniquement lire des fichiers avec la balise Project=Cascade.

Si Chandra tente de lire un objet blob sans la balise Project=Cascade, l’accès n’est pas autorisé.

Voici à quoi ressemble la condition dans le code :
(
(
!(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'
)
)
Étape 1 : Installer les prérequis
Ouvrez une fenêtre PowerShell.
Utilisez Get-InstalledModule pour vérifier les versions des modules installés.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.StorageSi nécessaire, utilisez Install-Module pour installer les versions requises pour les modules Az, Az.Resources et Az.Storage.
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 -AllowPrereleaseFermez et rouvrez PowerShell pour actualiser la session.
Étape 2 : Se connecter à Azure
Utilisez la commande Connect-AzAccount et suivez les instructions qui s’affichent pour vous connecter à votre annuaire en tant qu’administrateur d’accès utilisateur ou propriétaire.
Connect-AzAccountUtilisez Get-AzSubscription pour répertorier tous vos abonnements.
Get-AzSubscriptionDéterminez l’ID d’abonnement et initialisez la variable.
$subscriptionId = "<subscriptionId>"Définissez l’abonnement comme abonnement actif.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Étape 3 : Créer un utilisateur
Utilisez New-MgUser pour créer un utilisateur ou rechercher un utilisateur existant. Ce tutoriel utilise Chandra comme exemple.
Initialisez la variable pour l’ID d’objet de l’utilisateur.
$userObjectId = "<userObjectId>"
Étape 4 : Configurer le stockage
Utilisez New-AzStorageAccount pour créer un compte de stockage compatible avec la fonctionnalité d'index blob. Pour plus d’informations, consultez Gérer et rechercher des données Azure Blob à l’aide de balises d’index d’objets blob.
Utilisez New-AzStorageContainer pour créer un conteneur d’objets blob dans le compte de stockage et définir le niveau d’accès anonyme sur Private (pas d’accès anonyme).
Utilisez Set-AzStorageBlobContent pour charger un fichier texte dans le conteneur.
Ajoutez la balise d’index d’objet blob suivante au fichier texte. Pour plus d’informations, consultez Utiliser des balises d’index de blobs pour gérer et rechercher des données sur Azure Blob Storage.
Remarque
Les blobs prennent également en charge la possibilité de stocker des métadonnées clé-valeur arbitraires définies par l’utilisateur. Bien que les métadonnées soient similaires aux étiquettes d’index d’objet blob, vous devez utiliser des étiquettes d’index d’objet blob avec les conditions.
Clé Valeur Projet Cascade Chargez un deuxième fichier texte dans le conteneur.
Ajoutez la balise d’index d’objet blob suivante au deuxième fichier texte.
Clé Valeur Projet Boulanger Initialisez les variables suivantes avec les noms que vous avez utilisés.
$resourceGroup = "<resourceGroup>" $storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameCascade = "<blobNameCascade>" $blobNameBaker = "<blobNameBaker>"
Étape 5 : Attribuer un rôle avec une condition
Initialisez les variables du rôle Lecteur des données blob du stockage.
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Définir l’étendue du groupe de ressources.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Initialisez la condition.
$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'))"Dans PowerShell, si votre condition comprend un symbole dollar ($), vous devez le faire précéder d’un guillemet inversé (`). Par exemple, cette condition utilise des signes dollar pour délimiter le nom de clé de balise.
Initialisez la version de la condition et la description.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"Utilisez New-AzRoleAssignment pour attribuer le rôle Lecteur de données Blob de stockage avec une condition à l'utilisateur au niveau d'un groupe de ressources.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionVoici un exemple de sortie :
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'))
Étape 6 : (facultatif) Afficher la condition dans le portail Azure
Dans le portail Azure, ouvrez le groupe de ressources.
Sélectionnez Contrôle d’accès (IAM) .
Sous l’onglet Attributions de rôles, recherchez l’attribution de rôle.
Dans la colonne Condition , sélectionnez Afficher/Modifier pour afficher la condition.
Étape 7 : Tester la condition
Ouvrez une nouvelle fenêtre PowerShell.
Utilisez Connect-AzAccount pour vous connecter en tant que Chandra.
Connect-AzAccountInitialisez les variables suivantes avec les noms que vous avez utilisés.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"Utilisez New-AzStorageContext pour créer un contexte spécifique pour accéder plus facilement à votre compte de stockage.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountNameUtilisez Get-AzStorageBlob pour essayer de lire le fichier du projet Baker.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtxVoici un exemple de sortie. Notez que vous ne pouvez pas lire le fichier en raison de la condition que vous avez ajoutée.
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 CommandLisez le fichier du projet Cascade.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtxVoici un exemple de sortie. Notez que vous pouvez lire le fichier, car il a la balise Project=Cascade.
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
Étape 8 : (facultatif) Modifier la condition
Dans l’autre fenêtre PowerShell, utilisez Get-AzRoleAssignment pour obtenir l’attribution de rôle que vous avez ajoutée.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdModifiez la condition.
$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'))"Initialisez la condition et la description.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"Utilisez Set-AzRoleAssignment pour mettre à jour la condition de l’attribution de rôle.
Set-AzRoleAssignment -InputObject $testRa -PassThruVoici un exemple de sortie :
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'))
Étape 9 : Nettoyer les ressources
Utilisez Remove-AzRoleAssignment pour supprimer l’attribution de rôle et la condition que vous avez ajoutées.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroupSupprimez le compte de stockage que vous avez créé.
Supprimez l’utilisateur que vous avez créé.
