Autoriser l’accès en lecture aux objets BLOB en fonction des balises et des attributs de sécurité personnalisés
Cet article vous explique comment autoriser l’accès en lecture aux objets blob en fonction d’attributs de sécurité personnalisés et de balises d’index d’objets blob en utilisant les conditions de contrôle d’accès en fonction des attributs (ABAC). Ceci peut faciliter la gestion de l’accès aux objets blob.
Prérequis
Pour affecter des attributs de sécurité personnalisés et ajouter des conditions d’attribution de rôle dans votre locataire Microsoft Entra, vous avez besoin des éléments suivants :
- Administrateur de définition d’attribut et Administrateur d’attribution d’attribut
- Contrôle d’accès en fonction du rôle Administration istrateur
Important
Par défaut, les rôles Administrateur général et d’autres d’administrateur ne sont pas autorisés à lire, à définir ou à affecter des attributs de sécurité personnalisés. Si vous ne remplissez pas ces conditions préalables, vous ne verrez pas les attributs principal/utilisateur dans l’éditeur de condition.
Condition
Dans le cadre de cet article, vous autorisez l’accès en lecture aux objets blob si l’utilisateur a un attribut de sécurité personnalisé qui correspond à la balise d’index d’objets blob. Pour cela, vous devez ajouter une condition à l’attribution de rôle.
Par exemple, si Brenda a l’attribut Project=Baker
, elle peut uniquement lire des blobs avec la balise d’index d’objets blob Project=Baker
. De même, Chandra peut uniquement lire des blobs avec Project=Cascade
.
Voici à quoi ressemble la condition exprimée sous forme de code :
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
)
OR
(
@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
)
)
Pour plus d’informations sur les conditions, consultez Qu’est-ce que le contrôle d’accès basé sur les attributs Azure (Azure ABAC) ?.
Étape 1 : Ajouter un nouvel attribut de sécurité personnalisé
Connectez-vous au portail Azure.
Cliquez sur Attributs de sécurité personnalisés microsoft Entra ID>.
Ajoutez un attribut nommé
Project
avec les valeursBaker
etCascade
ou utilisez un attribut existant. Pour plus d’informations, consultez Ajouter ou désactiver des attributs de sécurité personnalisés dans l’ID Microsoft Entra.
Étape 2 : Attribuer l’attribut de sécurité personnalisé à un utilisateur
Dans Microsoft Entra ID, créez un groupe de sécurité.
Ajoutez un utilisateur comme membre du groupe.
Attribuez l’attribut
Project
avec la valeurCascade
à l’utilisateur. Pour plus d’informations, consultez Affecter, mettre à jour, lister ou supprimer des attributs de sécurité personnalisés pour un utilisateur.N’oubliez pas de cliquer sur Enregistrer pour enregistrer votre attribution.
Étape 3 : Configurer des balises d’index de stockage et d’objets blob
Créez un compte de stockage compatible avec la fonctionnalité de balises d’index d’objets blob. Pour plus d’informations, consultez Gérer et rechercher des données Azure Blob à l’aide de balises d’index d’objets blob.
Créez un conteneur dans le compte de stockage et définissez le niveau d’accès public sur Privé (pas d’accès anonyme).
Définissez le type d’authentification sur Compte d’utilisateur Azure AD.
Chargez les fichiers texte dans le conteneur et définissez les balises d’index d’objets blob suivantes.
File Clé Valeur Fichier texte Baker Project Baker Fichier texte Cascade Project Cascade Conseil
Pour plus d’informations sur les caractères autorisés pour les balises d’index d’objets blob, consultez Définition des balises d’index d’objets blob.
Étape 4 : Attribuer le rôle Lecteur des données Blob du stockage avec une condition
Ouvrez un nouvel onglet et connectez-vous au portail Azure.
Ouvrez le groupe de ressources contenant le compte de stockage.
Cliquez sur Contrôle d’accès (IAM) .
Cliquez sur l’onglet Attributions de rôles afin d’afficher les attributions de rôles pour cette étendue.
Cliquez sur Ajouter>Ajouter une attribution de rôle.
Sous l’onglet Rôle, sélectionnez le rôle Lecteur des données Blob du stockage.
Sous l’onglet Membres, sélectionnez le groupe de sécurité que vous avez créé.
(Facultatif) Dans la zone Description, entrez Accès en lecture aux objets blob si l’utilisateur a un attribut de sécurité personnalisé qui correspond à la balise d’index d’objets blob.
Sous l’onglet Conditions (facultatif) , cliquez sur Ajouter une condition.
La page Ajouter une condition d’attribution de rôle s’affiche.
Dans la section Ajouter une action, cliquez sur Ajouter une action.
Le volet Sélectionner une action s’affiche. Ce volet est une liste filtrée d’actions de données basée sur l’attribution de rôle destinée à être la cible de votre condition.
Cliquez sur Lire un objet blob, puis cliquez sur Sélectionner.
Dans la section Générer l’expression, cliquez sur Ajouter.
Entrez les paramètres suivants :
Paramètre Value Source de l’attribut Principal Attribut <jeu d’attributs>_Project Opérateur StringEquals Option Attribut Source de l’attribut Ressource Attribut Balises d’index de blob [Valeurs dans la clé] Clé : Project Remarque
Si principal n’est pas listé comme option dans la source de l’attribut, vérifiez que vous avez défini un attribut de sécurité personnalisé comme décrit précédemment à l’étape 1 : Ajouter un nouvel attribut de sécurité personnalisé.
Faites défiler la liste jusqu’à Type d’éditeur, puis cliquez sur Code.
Votre condition doit ressembler à ce qui suit :
( ( !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) ) OR ( @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ) )
Cliquez sur Enregistrer pour enregistrer la condition.
Sous l’onglet Vérifier + attribuer, cliquez sur Vérifier + attribuer pour attribuer le rôle Lecteur des données Blob du stockage avec une condition.
Étape 5 : affecter le rôle Lecteur
Répétez les étapes précédentes pour attribuer le rôle Lecteur au groupe de sécurité dans l’étendue du groupe de ressources.
Remarque
En général, vous n’avez pas besoin d’affecter le rôle Lecteur. Toutefois, cette opération vous permet de tester la condition à l’aide du portail Azure.
Étape 6 : Tester la condition
Dans une nouvelle fenêtre, ouvrez le portail Azure.
Connectez-vous sous l’identité de l’utilisateur que vous avez créé avec l’attribut de sécurité personnalisé
Project=Cascade
.Ouvrez le compte de stockage et le conteneur que vous avez créés.
Vérifiez que la méthode d’authentification est définie sur Compte d’utilisateur Azure AD et non sur Clé d’accès.
Cliquez sur le fichier texte Baker.
Vous ne devriez PAS pouvoir afficher ou télécharger l’objet blob et un message d’échec de l’autorisation devrait s’afficher.
Cliquez sur le fichier texte Cascade.
Vous devriez être en mesure d’afficher et de télécharger l’objet blob.
Azure PowerShell
Vous pouvez également utiliser Azure PowerShell pour ajouter des conditions d’attribution de rôle. Les commandes suivantes montrent comment ajouter des conditions. Pour plus d’informations, consultez Tutoriel : Ajouter une condition d’attribution de rôle pour restreindre l’accès aux objets blob à l’aide d’Azure PowerShell.
Ajouter une condition
Utilisez la commande Connecter-AzAccount et suivez les instructions qui semblent vous connecter à votre annuaire en tant que contrôle d’accès en fonction du rôle Administration istrator.
Connect-AzAccount
Utilisez Get-AzRoleAssignment pour récupérer l’attribution de rôle que vous avez attribuée au groupe de sécurité.
$groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
Définissez la propriété
Condition
de l’objet d’attribution de rôle. Veillez à utiliser le nom de votre jeu d’attributs.$groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"
Définissez la propriété
ConditionVersion
de l’objet d’attribution de rôle.$groupRoleAssignment.ConditionVersion = "2.0"
Utilisez Set-AzRoleAssignment pour mettre à jour l’attribution de rôle.
Set-AzRoleAssignment -InputObject $groupRoleAssignment
Tester la condition
Dans une nouvelle fenêtre PowerShell, utilisez la commande Connect-AzAccount pour vous connecter en tant que membre du groupe de sécurité.
Connect-AzAccount
Utilisez New-AzStorageContext pour définir le contexte du compte de stockage.
$bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
Utilisez Get-AzStorageBlob pour essayer de lire le fichier Baker.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
Vous ne devriez PAS pouvoir lire l’objet blob et un message d’échec de l’autorisation devrait s’afficher.
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. ...
Utilisez Get-AzStorageBlob pour essayer de lire le fichier Cascade.
Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx You should be able to read the blob. 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
Azure CLI
Vous pouvez également utiliser Azure CLI pour ajouter des conditions d’attribution de rôle. Les commandes suivantes montrent comment ajouter des conditions. Pour plus d’informations, consultez Tutoriel : Ajouter une condition d’attribution de rôle pour restreindre l’accès aux objets blob à l’aide d’Azure CLI.
Ajouter une condition
Utilisez la commande az login et suivez les instructions qui semblent vous connecter à votre annuaire en tant que contrôle d’accès en fonction du rôle Administration istrator.
az login
Utilisez az role assignment list pour récupérer l’attribution de rôle que vous avez attribuée au groupe de sécurité.
az role assignment list --assignee <groupObjectId> --scope <scope>
Créez un fichier JSON au format suivant.
{ "canDelegate": null, "condition": "", "conditionVersion": "", "description": "", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{groupObjectId}", "principalName": "{principalName}", "principalType": "Group", "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" }
Mettez à jour la propriété
condition
. Veillez à utiliser le nom de votre jeu d’attributs."condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",
Mettez à jour la propriété
conditionVersion
."conditionVersion": "2.0",
Utilisez az role assignment update pour ajouter la condition à l’attribution de rôle.
az role assignment update --role-assignment "./path/roleassignment.json"
Tester la condition
Dans une nouvelle fenêtre de commande, utilisez la commande az login pour vous connecter en tant que membre du groupe de sécurité.
az login
Utilisez az storage blob show pour essayer de lire les propriétés du fichier Baker.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
Vous ne devriez PAS pouvoir lire l’objet blob et un message d’échec de l’autorisation devrait s’afficher.
You do not have the required permissions needed to perform this operation. ...
Utilisez az storage blob show pour essayer de lire les propriétés du fichier Cascade.
az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login You should be able to read the blob. { "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, ... }