Configuración del rol RBAC de Azure mediante la CLI de Azure y la API REST

En este artículo, aprenderá a conceder permisos a aplicaciones cliente (y usuarios) para acceder a Azure Health Data Services mediante la interfaz de Azure Command-Line (CLI) y la API REST. Este paso se conoce como "asignación de roles" o control de acceso basado en rol de Azure (rol RBAC de Azure). Para más información sobre los roles de aplicación definidos para Azure Health Data Services, consulte Configuración del rol RBAC de Azure.

Puede ver y descargar los scripts de la CLI y los scripts de la API REST de los ejemplos de Azure Health Data Services.

Nota

Para realizar la operación de asignación de roles, se debe conceder al usuario (o a la aplicación cliente) permisos RBAC. Póngase en contacto con los administradores de la suscripción de Azure para obtener ayuda.

Asignaciones de roles con la CLI

Puede enumerar roles de aplicación mediante nombres de rol o identificadores GUID. Incluya el nombre del rol entre comillas dobles cuando haya espacios en él. Para obtener más información, consulte la Lista de definiciones de roles de Azure.

az role definition list --name "FHIR Data Contributor"
az role definition list --name 5a1fc7df-4bf1-4951-a576-89034ee01acd
az role definition list --name "DICOM Data Owner"
az role definition list --name 58a3b984-7adf-4c20-983a-32417c86fbc8

Asignación de roles de Azure Health Data Services

Las asignaciones de roles para Azure Health Data Services requieren los valores siguientes.

  • Nombre del rol de aplicación o identificador GUID.
  • Identificador de entidad de servicio para el usuario o la aplicación cliente.
  • Ámbito de la asignación de roles, es decir, la instancia del servicio Azure Health Data Services. Incluye la suscripción, el grupo de recursos, el nombre del área de trabajo y el nombre del servicio FHIR o DICOM. Puede usar la dirección URL absoluta o relativa para el ámbito. Tenga en cuenta que "/" no se agrega al principio de la dirección URL relativa.
#Azure Health Data Services role assignment
fhirrole="FHIR Data Contributor"
dicomrole="DICOM Data Owner"
clientid=xxx
subscriptionid=xxx
resourcegroupname=xxx
workspacename=xxx
fhirservicename=xxx
dicomservicename=xxx
fhirrolescope="subscriptions/$subscriptionid/resourceGroups/$resourcegroupname/providers/Microsoft.HealthcareApis/workspaces/$workspacename/fhirservices/$fhirservicename"
dicomrolescope="subscriptions/$subscriptionid/resourceGroups/$resourcegroupname/providers/Microsoft.HealthcareApis/workspaces/$workspacename/dicomservices/$dicomservicename"

#find client app service principal id
spid=$(az ad sp show --id $clientid --query objectId --output tsv)

#assign the specified role
az role assignment create --assignee-object-id $spid --assignee-principal-type ServicePrincipal --role "$fhirrole" --scope $fhirrolescope
az role assignment create --assignee-object-id $spid --assignee-principal-type ServicePrincipal --role "$dicomrole" --scope $dicomrolescope

Puede comprobar el estado de asignación de roles desde la respuesta de la línea de comandos o en el Azure Portal.

Asignación de roles de Azure API for FHIR

Las asignaciones de roles para Azure API for FHIR funcionan de forma similar. La diferencia es que el ámbito solo contiene el servicio FHIR y el nombre del área de trabajo no es necesario.

#azure api for fhir role assignment
fhirrole="FHIR Data Contributor"
clientid=xxx
subscriptionid=xxx
resourcegroupname=xxx
fhirservicename=xxx
fhirrolescope="subscriptions/$subscriptionid/resourceGroups/$resourcegroupname/providers/Microsoft.HealthcareApis/services/$fhirservicename"

#find client app service principal id
spid=$(az ad sp show --id $clientid --query objectId --output tsv)

#assign the specified role
az role assignment create --assignee-object-id $spid --assignee-principal-type ServicePrincipal --role "$fhirrole" --scope $fhirrolescope

Asignaciones de roles con la API REST

Como alternativa, puede enviar una solicitud Put a la API REST de asignación de roles directamente. Para más información, consulte Asignación de roles de Azure mediante la API REST.

Nota

Los scripts de la API rest de este artículo se basan en la extensión de cliente REST . Deberá revisar las variables si se encuentra en un entorno diferente.

La API requiere los siguientes valores:

  • Identificador de asignación, que es un valor GUID que identifica de forma única la transacción. Puede usar herramientas como Visual Studio o Visual Studio Code extensión para obtener un valor GUID. Además, puede usar herramientas en línea como UUID Generator para obtenerlo.
  • Versión de API compatible con la API.
  • Ámbito de Azure Health Data Services al que se conceden permisos de acceso. Incluye el identificador de suscripción, el nombre del grupo de recursos y el nombre de la instancia del servicio FHIR o DICOM.
  • Id. de definición de rol para roles como "Colaborador de datos FHIR" o "Propietario de datos DICOM". Use az role definition list --name "<role name>" para enumerar los identificadores de definición de roles.
  • Identificador de entidad de servicio para el usuario o la aplicación cliente.
  • Token de acceso de Azure AD a , https://management.azure.com/no a Azure Health Data Services. Puede obtener el token de acceso mediante una herramienta existente o mediante el comando de la CLI de Azure. az account get-access-token --resource "https://management.azure.com/"
  • Para Azure Health Data Services, el ámbito incluye el nombre del área de trabajo y el nombre de la instancia del servicio FHIR/DICOM.
### Create a role assignment - Azure Health Data Services (DICOM)
@roleassignmentid=xxx
@roleapiversion=2021-04-01
@roledefinitionid=58a3b984-7adf-4c20-983a-32417c86fbc8
dicomservicename-xxx
@scope=/subscriptions/{{subscriptionid}}/resourceGroups/{{resourcegroupname}}/providers/Microsoft.HealthcareApis/workspaces/{{workspacename}}/dicomservices/{{dicomservicename}}
#get service principal id
@spid=xxx
#get access token
@token=xxx

PUT https://management.azure.com/{{scope}}/providers/Microsoft.Authorization/roleAssignments/{{roleassignmentid}}?api-version={{roleapiversion}}
Authorization: Bearer {{token}}
Content-Type: application/json
Accept: application/json

{
  "properties": {
    "roleDefinitionId": "/subscriptions/{{subscriptionid}}/providers/Microsoft.Authorization/roleDefinitions/{{roledefinitionid}}",
    "principalId": "{{spid}}"
  }
}

Para Azure API for FHIR, el ámbito se define de forma ligeramente diferente, ya que solo admite el servicio FHIR y no se requiere ningún nombre de área de trabajo.

### Create a role assignment - Azure API for FHIR
@roleassignmentid=xxx
@roleapiversion=2021-04-01
@roledefinitionid=5a1fc7df-4bf1-4951-a576-89034ee01acd
fhirservicename-xxx
@scope=/subscriptions/{{subscriptionid}}/resourceGroups/{{resourcegroupname}}/providers/Microsoft.HealthcareApis/services/{{fhirservicename}}
#get service principal id
@spid=xxx
#get access token
@token=xxx

PUT https://management.azure.com/{{scope}}/providers/Microsoft.Authorization/roleAssignments/{{roleassignmentid}}?api-version={{roleapiversion}}
Authorization: Bearer {{token}}
Content-Type: application/json
Accept: application/json

{
  "properties": {
    "roleDefinitionId": "/subscriptions/{{subscriptionid}}/providers/Microsoft.Authorization/roleDefinitions/{{roledefinitionid}}",
    "principalId": "{{spid}}"
  }
}

Enumeración de instancias de servicio de Azure Health Data Services

Opcionalmente, puede obtener una lista de servicios de Azure Health Data Services o Azure API for FHIR. Tenga en cuenta que la versión de la API se basa en Azure Health Data Services, no en la versión de la API REST de asignación de roles.

En Azure Health Data Services, especifique el identificador de suscripción, el nombre del grupo de recursos, el nombre del área de trabajo, los servicios FHIR o DICOM y la versión de la API.

### Get Azure Health Data Services DICOM services
@apiversion=2021-06-01
@subscriptionid=xxx
@resourcegroupname=xxx
@workspacename=xxx

GET  https://management.azure.com/subscriptions/{{subscriptionid}}/resourceGroups/{{resourcegroupname}}/providers/Microsoft.HealthcareApis/workspaces/{{workspacename}}/dicomservices?api-version={{apiversion}}
Authorization: Bearer {{token}}
Content-Type: application/json
Accept: application/json

En Azure API for FHIR, especifique el identificador de suscripción y la versión de la API.

### Get a list of Azure API for FHIR services
@apiversion=2021-06-01
@subscriptionid=xxx

GET  https://management.azure.com/subscriptions/{{subscriptionid}}/providers/Microsoft.HealthcareApis/services?api-version={{apiversion}}
Authorization: Bearer {{token}}
Content-Type: application/json
Accept: application/json

Ahora que ha concedido los permisos adecuados a la aplicación cliente, puede acceder a Azure Health Data Services en las aplicaciones.

Pasos siguientes

En este artículo, ha aprendido a conceder permisos a las aplicaciones cliente mediante la CLI de Azure y la API REST. Para obtener información sobre cómo acceder a Azure Health Data Services mediante la extensión de cliente REST en Visual Studio Code, consulte

FHIR® es una marca registrada de HL7 y se usa con su permiso.