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 にアクセスできるようになります。

次のステップ

REST クライアントを使用したアクセス

Note

FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。

DICOM® は、医療情報のデジタル通信に関する標準出版物に関する米国電機工業会 (National Electrical Manufacturers Association) の登録商標です。