Compartir vía


Uso del control de acceso basado en roles del plano de control con Azure Cosmos DB for NoSQL

SE APLICA A: NoSQL

Diagrama de la ubicación actual (

Diagrama de la secuencia de la guía de implementación, incluidas estas ubicaciones, en orden: Información general, Conceptos, Preparación, Control de acceso basado en rol, Red y Referencia. La ubicación "Control de acceso basado en rol" está resaltada actualmente.

En este artículo se describen los pasos para conceder acceso a una identidad para administrar una cuenta de Azure Cosmos DB for NoSQL y sus recursos.

Importante

Los pasos de este artículo solo cubren el acceso al plano de control para realizar operaciones en la propia cuenta de los recursos de la jerarquía de la cuenta. Para obtener información sobre cómo administrar roles, definiciones y asignaciones para el plano de control, consulte Conceder acceso basado en roles al plano de datos.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
  • Una cuenta existente de Azure Cosmos DB.
  • Una o varias identidades existentes en Microsoft Entra ID.

Preparación de la definición de roles

En primer lugar, debe preparar una definición de roles con una lista de actions para conceder acceso para administrar recursos de cuenta en Azure Cosmos DB.

Enumere todas las definiciones de roles asociadas a la cuenta de Azure Cosmos DB mediante az role definition list. Revise la salida y busque la definición de roles denominada Colaborador de datos integrado en Cosmos DB. La salida contiene el identificador único de la definición de roles en la propiedad id. Registre este valor ya que es necesario usarlo en el paso de asignación más adelante en esta guía.

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",
  }
]

Nota:

Para este ejemplo, el valor de id sería /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. En este ejemplo se usan datos ficticios y el identificador sería distinto de este ejemplo. Sin embargo, el identificador (230815da-be43-4aae-9cb4-875f7bd000aa) es globalmente único en todas las definiciones de roles de Azure.

  1. Inicie sesión en Azure Portal (https://portal.azure.com).

  2. Escriba Grupo de recursos en la barra de búsqueda global.

    Captura de pantalla de la barra de búsqueda global en el Azure Portal.

  3. En Servicios, seleccione Grupos de recursos.

    Recorte de pantalla de la opción

  4. En el panel Grupos de recursos, seleccione el grupo de recursos existente.

    Recorte de pantalla de un grupo de recursos existente en la lista de grupos de recursos de la suscripción.

    Nota:

    En este recorte de pantalla de ejemplo se incluye el grupo de recursos msdocs-identity-example. El nombre real del grupo de recursos puede ser diferente.

  5. En el panel del grupo de recursos, seleccione Control de acceso (IAM) en el menú servicio.

    Recorte de pantalla de la opción

  6. En el panel Control de acceso (IAM), seleccione Roles.

    Recorte de pantalla de la opción

  7. En la sección Roles, use la frase de búsqueda Cosmos DB y busque la definición de roles Operador de Cosmos DB. A continuación, seleccione la opción Ver asociada a esa definición.

    Recorte de pantalla de una lista de definiciones de roles en el ámbito asignable actual filtrado para incluir solo definiciones con

  8. En el cuadro de diálogo de la definición de roles Operador de Cosmos DB, observe las acciones asignadas como parte de esta definición de rol.

    Recorte de pantalla del cuadro de diálogo

  9. Cierre el cuadro de diálogo de la definición de roles Operador de Cosmos DB.

Use Get-AzRoleDefinition para enumerar todas las definiciones de roles asociadas a la cuenta de Azure Cosmos DB. Revise la salida y busque la definición de roles denominada Colaborador de datos integrado en Cosmos DB. La salida contiene el identificador único de la definición de roles en la propiedad Id. Registre este valor ya que es necesario usarlo en el paso de asignación más adelante en esta guía.

$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 : {/}

Nota:

Para este ejemplo, el valor de Id sería 230815da-be43-4aae-9cb4-875f7bd000aa. El identificador es globalmente único en todas las definiciones de roles de Azure.

Asignación de un rol a la identidad

Ahora, asigne el rol recién definido a una identidad para que las aplicaciones puedan acceder a los recursos de Azure Cosmos DB.

Importante

Esta tarea de asignación requiere que ya tenga el identificador único de cualquier identidad a la que desee conceder permisos de control de acceso basados en rol.

  1. Use az group show para obtener de nuevo los metadatos del grupo de recursos actual.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Observe la salida del comando anterior. Registre el valor de la propiedad id para este grupo de recursos, ya que es necesario usarlo en el siguiente paso.

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

    Nota:

    Para este ejemplo, el valor de id sería /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. En este ejemplo se usan datos ficticios y el identificador sería distinto de este ejemplo. Este es un ejemplo truncado de la salida.

  3. Asigne el nuevo rol mediante az role assignment create. Use el identificador del grupo de recursos para el argumento --scope, el identificador del rol para el argumento -role y el identificador único de la identidad en el argumento --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"
    

    Nota:

    En este comando de ejemplo, el scope se estableció en el ejemplo ficticio /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example del ejemplo del paso anterior. El identificador del grupo de recursos sería distinto de este ejemplo. El role también se estableció en el /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 ficticio. De nuevo, el identificador de rol sería distinto.

  4. Observe la salida del comando . La salida incluye un identificador único para la asignación en la propiedad 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"
    }
    

    Nota:

    En este ejemplo, la propiedad id es /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0, que es otro ejemplo ficticio.

  5. Repita estos pasos para conceder acceso a la cuenta desde cualquier otra identidad que quiera usar.

    Sugerencia

    Puede repetir estos pasos para tantas identidades como quiera. Normalmente, estos pasos se repiten al menos para permitir que los desarrolladores accedan a una cuenta mediante su identidad humana y para permitir que las aplicaciones accedan mediante una identidad administrada.

  1. Cree un nuevo archivo de Bicep para definir la asignación de roles. Asigne al archivo el nombre 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. Cree un nuevo archivo de parámetros de Bicep denominado control-plane-role-assignment.bicepparam. En este archivo de parámetros; asigne los identificadores de definición de roles registrados anteriormente al parámetro roleDefinitionId y el identificador único de la identidad al parámetro identityId.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. Implemente esta plantilla de Bicep mediante 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. Repita estos pasos para conceder acceso a la cuenta desde cualquier otra identidad que quiera usar.

    Sugerencia

    Puede repetir estos pasos para tantas identidades como quiera. Normalmente, estos pasos se repiten al menos para permitir que los desarrolladores accedan a una cuenta mediante su identidad humana y para permitir que las aplicaciones accedan mediante una identidad administrada.

  1. En el panel Control de acceso (IAM), seleccione Agregar y, a continuación, Agregar asignación de roles.

    Recorte de pantalla de la opción

  2. En el panel Rol, busque Azure Cosmos DB y, a continuación, seleccione el rol Propietario del plano de control de Azure Cosmos DB creado anteriormente en esta guía. Después, seleccione Siguiente.

    Recorte de pantalla del panel

    Sugerencia

    Si lo desea, puede filtrar la lista de roles para incluir solo roles personalizados.

  3. En el panel Miembros, seleccione la opción Seleccionar miembros. En el cuadro de diálogo de miembros, seleccione la identidad que desea conceder a este nivel de acceso para la cuenta de Azure Cosmos DB y, a continuación, use la opción Seleccionar para confirmar su elección.

    Recorte de pantalla del panel

    Recorte de pantalla del cuadro de diálogo de selección de identidad para agregar una asignación de roles.

    Nota:

    En esta captura de pantalla se muestra un usuario de ejemplo denominado "Kai Carter" con una e entidad de seguridad de kai@adventure-works.com.

  4. De nuevo en el panel Miembros, revise los miembros seleccionados y, a continuación, seleccione Revisar y asignar.

    Recorte de pantalla del panel

  5. En el panel Revisar y asignar, revise las opciones especificadas para la nueva asignación de roles. Por último, seleccione Revisar y asignar.

    Recorte de pantalla del panel

  6. Espere a que el portal termine de crear la asignación de roles.

  1. Asigne el nuevo rol mediante New-AzRoleAssignment. Use el nombre del rol para el parámetro RoleDefinitionName y el identificador único de la identidad en el parámetro ObjectId.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Observe la salida del comando . La salida incluye un identificador único para la asignación en la propiedad 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
    

    Nota:

    En este ejemplo, la propiedad RoleAssignmentId es /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0, que es otro ejemplo ficticio. Este es un subconjunto de la salida típica de la implementación para mayor claridad.

  3. Repita estos pasos para conceder acceso a la cuenta desde cualquier otra identidad que quiera usar.

    Sugerencia

    Puede repetir estos pasos para tantas identidades como quiera. Normalmente, estos pasos se repiten al menos para permitir que los desarrolladores accedan a una cuenta mediante su identidad humana y para permitir que las aplicaciones accedan mediante una identidad administrada.

Validación del acceso al plano de control en el código

Por último, valide que ha concedido acceso correctamente mediante el código de aplicación y el SDK de administración de Azure en el lenguaje de programación preferido.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Importante

En este ejemplo de código se usan las bibliotecas Azure.ResourceManager.CosmosDB y Azure.Identity de NuGet.

Paso siguiente