サービス プリンシパルのロールを管理する

Azure リソースに対するアクセスを制限するために、サービス プリンシパルを使ってロールの割り当てを管理できます。 ロールごとに、Azure リソースにアクセスするときにユーザーによって許可されるさまざまなアクセス許可が与えられます。 チュートリアルのこの手順では、サービス プリンシパル ロールを作成および削除する方法について説明します。

Azure CLI には、ロールの割り当てを管理するために、次のコマンドが用意されています。

ロールの割り当てを作成または削除する

共同作成者ロールには、Azure アカウントに対して読み取りと書き込みを行うための完全なアクセス許可があります。 閲覧者ロールは制限がより厳しく、読み取り専用アクセスが提供されます。 最小特権の原則を常に使用してください。 Azure RBAC で使用可能なロールの完全な一覧については、「Azure 組み込みロール」を参照してください。

ロールを追加しても、以前に割り当てられたアクセス許可は制限され "ません"。 この例では、閲覧者ロールを追加し、共同作成者ロールを削除します。

az role assignment create --assignee myServicePrincipalID \
                          --role Reader \
                          --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

az role assignment delete --assignee myServicePrincipalID \
                          --role Contributor \
                          --scope /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName

出力コンソール:

{
  "condition": null,
  "conditionVersion": null,
  "createdBy": null,
  "createdOn": "yyyy-mm-ddT00:00:00.000000+00:00",
  "delegatedManagedIdentityResourceId": null,
  "description": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "name": "00000000-0000-0000-0000-000000000000",
  "principalId": "00000000-0000-0000-0000-000000000000",
  "principalType": "ServicePrincipal",
  "roleDefinitionId": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/00000000-0000-0000-0000-000000000000",
  "scope": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName",
  "type": "Microsoft.Authorization/roleAssignments",
  "updatedBy": "00000000-0000-0000-0000-000000000000",
  "updatedOn": "yyyy-mm-ddT00:00:00.000000+00:00"
}

スコープ パラメーターの値を取得する方法

"--scope パラメーター値をどうやって知るのか" という疑問を持たれるかもしれません。答えは、サービス プリンシパルがアクセスする必要がある Azure リソースのリソース ID を見つけてコピーすることです。 この情報は通常、Azure portal の各リソースの [プロパティ] または [エンドポイント] ページにあります。 一般的な --scope の例を次に示しますが、"実際の形式と値については、リソース ID で確認してください"。

Scope
サブスクリプション /subscriptions/mySubscriptionID
リソース グループ /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
仮想マシン /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/myVMname
ストレージ アカウント ファイル サービス /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Storage/storageAccounts/myStorageAccountName/fileServices/default
Data Factory /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.DataFactory/factories/myDataFactoryName

スコープの例の詳細については、「Azure RBAC のスコープについて」を参照してください。

変更を確認する

変更を確認するには、割り当てられているロールの一覧を表示します。

# list all role assignments for the current subscription
az role assignment list ---output table

# list role assignments for a user
az role assignment list --assignee myUserName@contoso.com

# list role assignments for a subscription
az role assignment list --subscription mySubscriptionID

Azure portal に移動し、アクセス管理 (IAM) メニューからサービス プリンシパルにロールを手動で割り当てることもできます。 ロールの割り当てを一覧表示する例については、「Azure CLI を使用して Azure ロールの割り当てを一覧表示する」を参照してください。

次のステップ

サービス プリンシパル ロールを管理する方法がわかったので、次のステップに進み、サービス プリンシパルを使用してリソースを作成する方法を理解してください。