Configurar funções do Azure RBAC usando a CLI do Azure e a API REST
Neste artigo, você aprenderá a conceder permissões a aplicativos cliente e usuários para acessar os Serviços de Dados de Saúde do Azure usando a CLI (Interface de Linha de Comando) do Azure e a API REST. Esta etapa é conhecida como atribuição de função ou RBAC (controle de acesso baseado em função) do Azure. Para obter mais informações, consulte Configurar a função RBAC do Azure.
Exiba e baixe os scripts da CLI e os scripts da API REST dos exemplos dos Serviços de Dados de Saúde do Azure.
Nota
Para executar a operação de atribuição de função, o usuário (ou o aplicativo cliente) deve receber permissões RBAC. Entre em contato com os administradores de assinatura do Azure para obter assistência.
Atribuições de função com CLI
Você pode listar funções de aplicativo usando nomes de função ou IDs de GUID. Inclua o nome da função entre aspas duplas quando houver espaços nela. Para obter mais informações, consulte Listar definições de função do 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
Atribuição de função dos Serviços de Dados de Saúde do Azure
As atribuições de função para os Serviços de Dados de Saúde do Azure exigem estes valores:
- Nome da função do aplicativo ou ID do GUID.
- ID da entidade de serviço para o usuário ou aplicativo cliente.
- Escopo para a atribuição de função, ou seja, a instância de serviço dos Serviços de Dados de Saúde do Azure. Inclui assinatura, grupo de recursos, nome do espaço de trabalho e nome do serviço FHIR ou DICOM. Você pode usar a URL absoluta ou relativa para o escopo. Observe que "/" não é adicionado no início do URL relativo.
#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
Você pode verificar o status da atribuição de função na resposta da linha de comando ou no portal do Azure.
Atribuição de função da API do Azure para FHIR
As atribuições de função para a API do Azure para FHIR funcionam de forma semelhante. A diferença é que o escopo contém apenas o serviço FHIR e o nome do espaço de trabalho não é necessário.
#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
Atribuições de função com a API REST
Como alternativa, você pode enviar uma solicitação Put para a API REST de atribuição de função diretamente. Para obter mais informações, consulte Atribuir funções do Azure usando a API REST.
Nota
Os scripts da API REST neste artigo são baseados na extensão do cliente REST. Você precisa revisar as variáveis se estiver em um ambiente diferente.
A API requer estes valores:
- ID de atribuição, que é um valor GUID que identifica exclusivamente a transação. Você pode usar ferramentas como Visual Studio ou extensão de código do Visual Studio para obter um valor GUID. Além disso, você pode usar ferramentas on-line, como UUID Generator para obtê-lo.
- Versão da API suportada pela API.
- Escopo dos Serviços de Dados de Saúde do Azure aos quais você concede permissões de acesso. Inclui ID de assinatura, nome do grupo de recursos e o nome da instância de serviço FHIR ou DICOM.
- ID de definição de função para funções como FHIR Data Contributor ou DICOM Data Owner. Use
az role definition list --name "<role name>"
para listar as IDs de definição de função. - ID da entidade de serviço para o usuário ou o aplicativo cliente.
- Token de acesso do Microsoft Entra para o , não para os
https://management.azure.com/
Serviços de Dados de Saúde do Azure. Você pode obter o token de acesso usando uma ferramenta existente ou usando o comando da CLI do Azure,az account get-access-token --resource "https://management.azure.com/"
- Para os Serviços de Dados de Integridade do Azure, o escopo inclui o nome do espaço de trabalho e o nome da instância do serviço 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 a API do Azure para FHIR, o escopo é definido de forma diferente, pois dá suporte apenas ao serviço FHIR e nenhum nome de espaço de trabalho é necessário.
### 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}}"
}
}
Listar instâncias de serviço dos Serviços de Dados de Integridade do Azure
Opcionalmente, você pode obter uma lista de serviços do Azure Health Data Services ou a API do Azure para FHIR. A versão da API é baseada nos Serviços de Dados de Saúde do Azure, não na versão da API REST de atribuição de função.
Para os Serviços de Dados de Integridade do Azure, especifique a ID da assinatura, o nome do grupo de recursos, o nome do espaço de trabalho, os serviços FHIR ou DICOM e a versão da 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
Para a API do Azure para FHIR, especifique a ID da assinatura e a versão da 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
Depois de conceder permissões adequadas ao aplicativo cliente, você pode acessar os Serviços de Dados de Saúde do Azure em seus aplicativos.