共用方式為


使用 Azure CLI 和 REST API 設定 Azure RBAC 角色

在本文中,您將了解如何使用 Azure 命令列介面 (CLI) 和 REST API,將權限授與用戶端應用程式和使用者以存取 Azure 健康資料服務。 此步驟稱為角色指派或 Azure 角色型存取控制 (RBAC)。 如需詳細資訊,請參閱設定 Azure RBAC 角色

Azure 健康資料服務範例檢視和下載 CLI 指令碼REST API 指令碼

注意

若要執行角色指派作業,使用者 (或用戶端應用程式) 必須獲得 RBAC 權限。 請連絡您的 Azure 訂用帳戶管理員以取得協助。

使用 CLI 的角色指派

您可以使用角色名稱或 GUID 識別碼來列出應用程式角色。 當其中有空格時,請以雙引號括住角色名稱。 如需詳細資訊,請參閱列出 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

Azure 健康資料服務角色指派

Azure 健康資料服務的角色指派需要下列值:

  • 應用程式角色名稱或 GUID 識別碼。
  • 使用者或用戶端應用程式的服務主體識別碼。
  • 角色指派的範圍,也就是 Azure 健康資料服務服務執行個體。 其中包含訂用帳戶、資源群組、工作區名稱和 FHIR 或 DICOM 服務名稱。 您可以使用範圍的絕對或相對 URL。 請注意,相對 URL 的開頭不會新增「/」。
#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

您可以從命令列回應或在 Azure 入口網站中驗證角色指派狀態。

Azure API for FHIR 角色指派

Azure API for FHIR 角色指派的運作方式類似。 差異在於範圍只包含 FHIR 服務,且不需要工作區名稱。

#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

使用 REST API 的角色指派

或者,您可以直接將 Put 要求傳送至角色指派 REST API。 如需詳細資訊,請參閱使用 REST API 指派 Azure 角色

注意

本文中的 REST API 指令碼是以 REST 用戶端延伸模組為基礎。 如果您位於不同的環境中,則需要修改變數。

API 需要下列值:

  • 指派標識碼,這是可唯一識別交易的 GUID 值。 您可以使用 Visual Studio 或 Visual Studio Code 延伸模組之類的工具來取得 GUID 值。 此外,您可以使用線上工具,例如 UUID 產生器來取得它。
  • API 支援的 API 版本。
  • 您授與存取權限的 Azure 健康資料服務範圍。 其中包含訂用帳戶識別碼、資源群組名稱,以及 FHIR 或 DICOM 服務執行個體名稱。
  • 角色的角色定義識別碼,例如 FHIR 資料參與者DICOM 資料擁有者。 使用 az role definition list --name "<role name>" 來列出角色定義識別碼。
  • 使用者或用戶端應用程式的服務主體識別碼。
  • https://management.azure.com/ 的 Microsoft Entra 存取權杖,而不是 Azure 健康資料服務。 您可以使用現有的工具或使用以下 Azure CLI 命令 az account get-access-token --resource "https://management.azure.com/" 來取得存取權杖
  • 針對 Azure 健康資料服務,範圍包含工作區名稱和 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}}"
  }
}

針對 Azure API for FHIR,範圍的定義會各自不同,因為其僅支援 FHIR 服務,而且不需要任何工作區名稱。

### 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}}"
  }
}

列出 Azure 健康資料服務的服務執行個體

您可以選擇性地取得 Azure 健康資料服務或 Azure API for FHIR 的清單。 API 版本是以 Azure 健康資料服務為基礎,而不是角色指派 REST API 的版本。

針對 Azure 健康資料服務,指定訂用帳戶識別碼、資源群組名稱、工作區名稱、FHIR 或 DICOM 服務,以及 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

針對 Azure API for FHIR,指定訂用帳戶識別碼和 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

將適當的權限授與用戶端應用程式之後,您就可以存取應用程式中的 Azure 健康資料服務。

下一步

使用 REST 用戶端存取

注意

FHIR® 是 HL7 的註冊商標,可經 HL7 許可使用。

DICOM® 是國家電氣製造商協會對於其與醫療資訊數位通訊相關的標準出版物的註冊商標。