使用 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 健康資料服務。