Compartilhar via


Configurar as funções do RBAC do Azure 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. Essa etapa é conhecida como atribuição de função ou RBAC (controle de acesso baseado em função) do Azure. Para obter mais informações, confira 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.

Observação

Para executar a operação de atribuição de função, o usuário (ou o aplicativo cliente) deve receber as permissões do RBAC. Entre em contato com os administradores de assinatura do Azure para obter assistência.

Atribuições de função com a CLI

Você pode listar as funções de aplicativo usando os nomes de função ou IDs do GUID. Inclua o nome da função entre aspas duplas quando houver espaços nele. Para saber mais, veja Lista de 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 dos 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 do usuário ou aplicativo cliente.
  • Escopo da 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 workspace 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 da 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

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 da API do Azure para FHIR funcionam da mesma forma. A diferença é que o escopo contém apenas o serviço FHIR e o nome do workspace 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 diretamente para a API REST da atribuição de função. Para obter mais informações, confira Atribuir funções do Azure usando a API REST.

Observação

Os scripts da API REST neste artigo são baseados na extensão do cliente REST. Você precisará 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 o Visual Studio ou a extensão do Visual Studio Code para obter um valor GUID. Além disso, você pode usar ferramentas online como o Gerador do UUID para obtê-lo.
  • Versão da API compatível com a API.
  • Escopo dos Serviços de Dados de Saúde do Azure aos quais você concede permissões de acesso. Inclui a ID da assinatura, o nome do grupo de recursos e o nome da instância de serviço FHIR ou DICOM.
  • ID de definição de função das funções como Colaborador de Dados FHIR ou Proprietário de Dados DICOM. Use az role definition list --name "<role name>" para listar as IDs de definição de função.
  • ID da entidade de serviço do usuário ou o aplicativo cliente.
  • Token de acesso do Microsoft Entra para o https://management.azure.com/, e não aos 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 Saúde do Azure, o escopo inclui o nome do workspace e o nome da instância de 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 workspace é 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 as instâncias de serviço dos Serviços de Dados de Saúde do Azure

Opcionalmente, você pode obter uma lista dos Serviços de Dados de Saúde do Azure ou da 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 Saúde do Azure, especifique a ID da assinatura, o nome do grupo de recursos, o nome do workspace, 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ê poderá acessar os Serviços de Dados de Saúde do Azure em seus aplicativos.

Próximas etapas

Acessar usando um cliente REST

Observação

FHIR® é uma marca registrada da HL7 e é usado com a permissão da HL7.

DICOM® é a marca registrada da National Electrical Manufacturers Association para suas publicações de padrões relacionados às comunicações digitais de informações médicas.