Azure CLI と REST API を使用して Azure RBAC ロールを構成する
この記事では、Azure コマンド ライン インターフェイス (CLI) と REST API を使用して、クライアント アプリケーションとユーザーに Azure Health Data Services にアクセスするためのアクセス許可を付与する方法について説明します。 この手順は、ロールの割り当て、または Azure ロールベースのアクセス制御 (RBAC) と呼ばれます。 詳細については、Azure RBAC ロールの構成に関する記事を参照してください。
Azure Health Data Services サンプルの CLI スクリプトと REST API スクリプトを確認してダウンロードします。
Note
ロールの割り当て操作を実行するには、ユーザー (またはクライアント アプリケーション) に RBAC アクセス許可が付与されている必要があります。 支援が必要な場合は Azure サブスクリプション管理者に問い合わせてください。
CLI を使用したロールの割り当て
ロール名または GUID ID を使用して、アプリケーション ロールを一覧表示できます。 ロール名にスペースが含まれる場合は、二重引用符で囲みます。 詳細については、「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 Health Data Services のロールの割り当て
Azure Health Data Services のロールの割り当てには、次の値が必要です。
- アプリケーション ロール名または GUID ID。
- ユーザーまたはクライアント アプリケーションのサービス プリンシパル ID。
- ロールの割り当てのスコープ、つまり Azure Health Data Services サービス インスタンス。 これには、サブスクリプション、リソース グループ、ワークスペース名、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 portal で確認できます。
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 ロールを割り当てる」を参照してください。
Note
この記事の REST API スクリプトは、REST クライアント拡張機能に基づいています。 異なる環境の場合は、変数を修正する必要があります。
この API には次の値が必要です。
- 割り当て ID。トランザクションを一意に特定する GUID 値です。 Visual Studio や Visual Studio Code 拡張機能などのツールを使用して GUID 値を取得できます。 また、UUID Generator などのオンライン ツールを使用して取得することもできます。
- API でサポートされている API バージョン。
- アクセス許可を付与する Azure Health Data Services のスコープ。 これには、サブスクリプション ID、リソース グループ名、FHIR または DICOM サービス インスタンス名が含まれます。
- FHIR データ共同作成者や DICOM データ所有者などのロールのロール定義 ID。
az role definition list --name "<role name>"
を使用してロール定義 ID を一覧表示します。 - ユーザーまたはクライアント アプリケーションのサービス プリンシパル ID。
- Azure Health Data Services ではなく、
https://management.azure.com/
への Microsoft Entra アクセス トークン。 アクセス トークンは、既存のツールまたは Azure CLI コマンドaz account get-access-token --resource "https://management.azure.com/"
を使用して取得できます - Azure Health Data Services の場合、スコープにはワークスペース名と 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 Health Data Services のサービス インスタンスを一覧表示する
必要に応じて、Azure Health Data Services サービスまたは Azure API for FHIR の一覧を取得できます。 API のバージョンは、ロールの割り当て REST API のバージョンではなく、Azure Health Data Services に基づいています。
Azure Health Data Services の場合は、サブスクリプション ID、リソース グループ名、ワークスペース名、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 の場合は、サブスクリプション ID と 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 Health Data Services にアクセスできるようになります。