Partager via


Utiliser le contrôle d’accès en fonction du rôle du plan de contrôle avec Azure Cosmos DB for Table

Diagramme de l’emplacement actuel (« Contrôle d’accès en fonction du rôle ») dans la séquence du guide de déploiement.

Diagramme de la séquence du guide de déploiement, y compris ces emplacements, dans l’ordre : Vue d’ensemble, Concepts, Préparation, Contrôle d’accès en fonction du rôle, Réseau et Référence. L’emplacement « Contrôle d’accès en fonction du rôle » est actuellement mis en surbrillance.

Cet article décrit les étapes à suivre afin d’accorder à une identité l’accès pour gérer un compte Azure Cosmos DB for Table et ses ressources.

Important

Les étapes décrites dans cet article couvrent uniquement l’accès au plan de contrôle pour effectuer des opérations sur le compte même de toutes les ressources de la hiérarchie du compte. Pour apprendre à gérer des rôles, des définitions et des affectations pour le plan de contrôle, consultez accorder l’accès en fonction du rôle du plan de données.

Prérequis

  • Compte Azure avec un abonnement actif. Créez un compte gratuitement.
  • Compte Azure Cosmos DB existant.
  • Une ou plusieurs identités existantes dans Microsoft Entra ID.

Préparer la définition de rôle

Tout d’abord, vous devez préparer une définition de rôle avec une liste d’actions pour accorder l’accès pour gérer les ressources de compte dans Azure Cosmos DB.

Répertoriez toutes les définitions de rôle associées à votre compte Azure Cosmos DB à l’aide de az role definition list. Passez en revue la sortie et recherchez la définition de rôle nommée Contributeur de données intégré Cosmos DB. La sortie contient l’identificateur unique de la définition de rôle dans la propriété id. Enregistrez cette valeur, car vous devrez l’utiliser dans l’étape d’affectation plus loin dans ce guide.

az role definition list \
    --name "Cosmos DB Operator"
[
  {
    "assignableScopes": [
      "/"
    ],
    "description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
    "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
    "name": "230815da-be43-4aae-9cb4-875f7bd000aa",
    "permissions": [
      {
        "actions": [
          "Microsoft.DocumentDb/databaseAccounts/*",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Authorization/*/read",
          "Microsoft.ResourceHealth/availabilityStatuses/read",
          "Microsoft.Resources/deployments/*",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Support/*",
          "Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [],
        "notActions": [
          "Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
          "Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
          "Microsoft.DocumentDB/databaseAccounts/listKeys/*",
          "Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
          "Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
          "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
        ],
        "notDataActions": []
      }
    ],
    "roleName": "Cosmos DB Operator",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
  }
]

Remarque

Pour cet exemple, la valeur id serait /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. Cet exemple utilise des données fictives et votre identificateur serait distinct de cet exemple. Toutefois, l’identificateur (230815da-be43-4aae-9cb4-875f7bd000aa) est globalement unique dans toutes les définitions de rôle dans Azure.

  1. Connectez-vous au portail Azure (https://portal.azure.com).

  2. Entrez groupe de ressources dans la barre de recherche globale.

    Capture d’écran de la barre de recherche globale dans le portail Azure.

  3. Sous Services, sélectionnez Groupes de ressources.

    Capture d’écran de l’option « Groupes de ressources » sélectionnée dans le menu de recherche.

  4. Dans le volet Groupes de ressources, sélectionnez votre groupe de ressources existant.

    Capture d’écran d’un groupe de ressources existant dans la liste des groupes de ressources pour l’abonnement.

    Remarque

    Cet exemple de capture d’écran inclut le groupe de ressources msdocs-identity-example. Le nom de votre groupe de ressources réel peut être différent.

  5. Dans le volet du groupe de ressources, sélectionnez Contrôle d’accès (IAM) dans le menu de service.

    Capture d’écran de l’option « Contrôle d’accès (IAM) » dans le menu de service d’un groupe de ressources.

  6. Dans le volet Contrôle d’accès (IAM), sélectionnez Rôles.

    Capture d’écran de l’option « Rôles » dans le volet « Contrôle d’accès (IAM) ».

  7. Dans la section Rôles, utilisez l’expression de recherche Cosmos DB et recherchez la définition de rôle Opérateur Cosmos DB. Sélectionnez ensuite l’option Afficher associée à cette définition.

    Capture d’écran d’une liste de définitions de rôle à l’étendue assignable actuelle filtrée pour inclure uniquement les définitions avec « Cosmos DB » dans le titre.

  8. Dans la boîte de dialogue de définition de rôle Opérateur Cosmos DB, observez les actions affectées dans le cadre de cette définition de rôle.

    Capture d’écran de la boîte de dialogue « Opérateur Cosmos DB » avec des détails sur la définition de rôle intégrée.

  9. Fermez la boîte de dialogue de définition de rôle Opérateur Cosmos DB.

Utilisez Get-AzRoleDefinition pour répertorier toutes les définitions de rôle associées à votre compte Azure Cosmos DB. Passez en revue la sortie et recherchez la définition de rôle nommée Contributeur de données intégré Cosmos DB. La sortie contient l’identificateur unique de la définition de rôle dans la propriété Id. Enregistrez cette valeur, car vous devrez l’utiliser dans l’étape d’affectation plus loin dans ce guide.

$parameters = @{
    Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name             : Cosmos DB Operator
Id               : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom         : False
Description      : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions          : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions       : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions      : {}
NotDataActions   : {}
AssignableScopes : {/}

Remarque

Pour cet exemple, la valeur Id serait 230815da-be43-4aae-9cb4-875f7bd000aa. L’identificateur est globalement unique dans toutes les définitions de rôle dans Azure.

Attribuer un rôle à l’identité

À présent, affectez le rôle nouvellement défini à une identité afin que vos applications puissent accéder aux ressources dans Azure Cosmos DB.

Important

Cette tâche d’attribution nécessite que vous disposiez déjà de l’identificateur unique de l’identité à laquelle vous souhaitez accorder des autorisations de contrôle d’accès en fonction du rôle.

  1. Utilisez az group show pour obtenir à nouveau les métadonnées de votre groupe de ressources actuel.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Observez la sortie de la commande précédente. Enregistrez la valeur de la propriété id pour ce groupe de ressources, car vous devrez l’utiliser à l’étape suivante.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Remarque

    Pour cet exemple, la valeur id serait /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. Cet exemple utilise des données fictives et votre identificateur serait distinct de cet exemple. Voici un exemple tronqué de la sortie.

  3. Attribuez le nouveau rôle à l’aide de az role assignment create. Utilisez l’identificateur de votre groupe de ressources pour l’argument --scope, l’identificateur du rôle pour l’argument -role et l’identificateur unique de votre identité à l’argument --assignee.

    az role assignment create \
        --assignee "<your-principal-identifier>" \
        --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    Remarque

    Dans cet exemple de commande, le paramètre scope a été défini sur l’exemple fictif /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example de l’exemple de l’étape précédente. L’identificateur de votre groupe de ressources serait distinct de cet exemple. Le paramètre role a également été défini sur la valeur fictive /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0. Là encore, votre identificateur de rôle serait distinct.

  4. Observez la sortie de la commande . La sortie inclut un identificateur unique pour l’affectation dans la propriété id.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa",
      "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
      "resourceGroup": "msdocs-identity-example",
      "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    Remarque

    Dans cet exemple, la propriété id est /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0, un autre exemple fictif.

  5. Répétez ces étapes pour accorder l’accès au compte à partir d’autres identités que vous souhaitez utiliser.

    Conseil

    Vous pouvez répéter ces étapes pour autant d’identités que vous le souhaitez. En règle générale, ces étapes sont au moins répétées pour permettre aux développeurs d’accéder à un compte à l’aide de leur identité humaine et pour accorder aux applications l’accès à l’aide d’une identité managée.

  1. Créez un fichier Bicep pour définir votre attribution de rôle. Nommez le fichier control-plane-role-assignment.bicep.

    metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.'
    
    @description('Id of the role definition to assign to the targeted principal in the context of the account.')
    param roleDefinitionId string
    
    @description('Id of the identity/principal to assign this role in the context of the account.')
    param identityId string
    
    resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId)
      scope: resourceGroup()
      properties: {
        roleDefinitionId: roleDefinitionId
        principalId: identityId
      }
    }
    
  2. Créez un fichier de paramètres Bicep nommé control-plane-role-assignment.bicepparam. Dans ce fichier de paramètres, affectez les identificateurs de définition de rôle précédemment enregistrés au paramètre roleDefinitionId et l’identificateur unique de votre identité au paramètre identityId.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. Déployez ce modèle Bicep à l’aide de az deployment group create.

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters control-plane-role-assignment.bicepparam \
        --template-file control-plane-role-assignment.bicep
    
  4. Répétez ces étapes pour accorder l’accès au compte à partir d’autres identités que vous souhaitez utiliser.

    Conseil

    Vous pouvez répéter ces étapes pour autant d’identités que vous le souhaitez. En règle générale, ces étapes sont au moins répétées pour permettre aux développeurs d’accéder à un compte à l’aide de leur identité humaine et pour accorder aux applications l’accès à l’aide d’une identité managée.

  1. Dans le volet Contrôle d’accès (IAM), sélectionnez Ajouter, puis Ajouter une attribution de rôle.

    Capture d’écran de l’option « Ajouter une attribution de rôle » dans le menu « Contrôle d’accès (IAM) » de l’option « Ajouter ».

  2. Dans le volet Rôle, recherchez Azure Cosmos DB et sélectionnez le rôle Propriétaire du plan de contrôle Azure Cosmos DB créé précédemment dans ce guide. Sélectionnez ensuite Suivant.

    Capture d’écran du volet « Rôle » pour l’ajout d’une attribution de rôle.

    Conseil

    Vous pouvez éventuellement filtrer la liste des rôles pour inclure uniquement les rôles personnalisés.

  3. Dans le volet Membres, sélectionnez l’option Sélectionner des membres. Dans la boîte de dialogue des membres, sélectionnez l’identité à laquelle vous souhaitez accorder ce niveau d’accès pour votre compte Azure Cosmos DB, puis utilisez l’option Sélectionner pour confirmer votre choix.

    Capture d’écran du volet « Membres » pour l’ajout d’une attribution de rôle.

    Capture d’écran de la boîte de dialogue de sélection d’identité pour l’ajout d’une attribution de rôle.

    Remarque

    Cette capture d’écran illustre un exemple d’utilisateur nommé « Kai Carter » avec un principal de kai@adventure-works.com.

  4. De retour dans le volet Membres, passez en revue le ou les membres sélectionnés, puis sélectionnez Vérifier + affecter.

    Capture d’écran du volet « Membres » avec une identité sélectionnée pour une attribution de rôle.

  5. Dans le volet Vérifier + affecter, passez en revue les options spécifiées pour la nouvelle attribution de rôle. Enfin, sélectionnez Vérifier + créer.

    Capture d’écran du volet « Vérifier + créer » pour une attribution de rôle.

  6. Attendez que le portail termine la création de l’attribution de rôle.

  1. Attribuez le nouveau rôle à l’aide de New-AzRoleAssignment. Utilisez le nom du rôle pour le paramètre RoleDefinitionName et l’identificateur unique de votre identité au paramètre ObjectId.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Observez la sortie de la commande . La sortie inclut un identificateur unique pour l’affectation dans la propriété RoleAssignmentId.

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
    Scope              : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
    DisplayName        : Kai Carter
    SignInName         : <kai@adventure-works.com>
    RoleDefinitionName : Azure Cosmos DB Control Plane Owner
    RoleDefinitionId   : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    

    Remarque

    Dans cet exemple, la propriété RoleAssignmentId est /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0, un autre exemple fictif. Il s’agit d’un sous-ensemble de la sortie classique du déploiement, pour plus de clarté.

  3. Répétez ces étapes pour accorder l’accès au compte à partir d’autres identités que vous souhaitez utiliser.

    Conseil

    Vous pouvez répéter ces étapes pour autant d’identités que vous le souhaitez. En règle générale, ces étapes sont au moins répétées pour permettre aux développeurs d’accéder à un compte à l’aide de leur identité humaine et pour accorder aux applications l’accès à l’aide d’une identité managée.

Valider l’accès au plan de contrôle dans le code

Enfin, vérifiez que vous avez correctement accordé l’accès à l’aide du code d’application et du SDK Gestion Azure dans votre langage de programmation préféré.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Important

Cet exemple de code utilise les bibliothèques Azure.ResourceManager.CosmosDB et Azure.Identity de NuGet.

Étape suivante