Configuración de roles RBAC de Azure mediante la CLI de Azure y la API REST
En este artículo, aprenderá a conceder permisos a las aplicaciones cliente y a los usuarios para acceder a Azure Health Data Services mediante la INTERFAZ de la línea de comandos (CLI) de Azure y la API REST. Este paso se conoce como asignación de roles o Azure control de acceso basado en rol (RBAC). Para más información, consulte Configuración del rol RBAC de Azure.
Vea y descargue 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 de RBAC. Póngase en contacto con los administradores de suscripciones 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 estos valores:
- 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 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 contiene solo 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 obtener más información, consulte Asignación de roles de Azure mediante el API de REST.
Nota:
Los scripts del API de REST de este artículo se basan en la extensión de cliente REST. Debe revisar las variables si se encuentra en un entorno diferente.
La API requiere estos 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 la extensión de Visual Studio Code 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 de servicio FHIR o DICOM.
- Identificador de definición de roles para roles como colaborador de datos de 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 Microsoft Entra 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 para FHIR, el ámbito se define de forma 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. La versión de la API se basa en Azure Health Data Services, no en la versión de la API de 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
Después de conceder los permisos adecuados a la aplicación cliente, puede acceder a Azure Health Data Services en las aplicaciones.