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 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.
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- Si opta por usar Azure PowerShell en un entorno local:
- Instale la versión más reciente del módulo Az de PowerShell.
- Conéctese a su cuenta de Azure mediante el cmdlet Connect-AzAccount.
- Si decide usar Azure Cloud Shell:
- Para más información, consulte Introducción a Azure Cloud Shell.
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.
Inicie sesión en Azure Portal (https://portal.azure.com).
Escriba Grupo de recursos en la barra de búsqueda global.
En Servicios, seleccione Grupos de recursos.
En el panel Grupos de recursos, seleccione el grupo de recursos existente.
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.En el panel del grupo de recursos, seleccione Control de acceso (IAM) en el menú servicio.
En el panel Control de acceso (IAM), seleccione Roles.
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.
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.
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.
Use
az group show
para obtener de nuevo los metadatos del grupo de recursos actual.az group show \ --name "<name-of-existing-resource-group>"
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.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. Elrole
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.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.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.
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 } }
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ámetroroleDefinitionId
y el identificador único de la identidad al parámetroidentityId
.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
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
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.
En el panel Control de acceso (IAM), seleccione Agregar y, a continuación, Agregar asignación de roles.
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.Sugerencia
Si lo desea, puede filtrar la lista de roles para incluir solo roles personalizados.
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.
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
.De nuevo en el panel Miembros, revise los miembros seleccionados y, a continuación, seleccione Revisar y asignar.
En el panel Revisar y asignar, revise las opciones especificadas para la nueva asignación de roles. Por último, seleccione Revisar y asignar.
Espere a que el portal termine de crear la asignación de roles.
Asigne el nuevo rol mediante
New-AzRoleAssignment
. Use el nombre del rol para el parámetroRoleDefinitionName
y el identificador único de la identidad en el parámetroObjectId
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
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.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.