Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure リソースへのアクセスを管理するために使用する承認システムです。 アクセス権を付与するには、特定のスコープでユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールを割り当てます。 この記事では、Azure CLI を使用してロールを割り当てる方法について説明します。
[前提条件]
ロールを割り当てるには、次が必要です。
-
Microsoft.Authorization/roleAssignments/write権限(たとえば役割ベースのアクセス制御管理者など) - Azure Cloud Shell または Azure CLI での Bash
Azure ロールを割り当てる手順
ロールを割り当てるには、セキュリティ プリンシパル、ロール定義、スコープの 3 つの要素で構成されます。
手順 1: アクセスが必要なユーザーを決定する
ユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールを割り当てることができます。 ロールを割り当てるには、オブジェクトの一意の ID を指定することが必要になる場合があります。 ID の形式は 11111111-1111-1111-1111-111111111111 です。 この ID は、Azure portal または Azure CLI を使用して取得できます。
User
Microsoft Entra ユーザーの場合は、ユーザー プリンシパル名 ( patlong@contoso.com やユーザー オブジェクト ID など) を取得します。 オブジェクト ID を取得するには、 az ad user show を使用します。
az ad user show --id "{principalName}" --query "id" --output tsv
グループ
Microsoft Entra グループの場合は、グループ オブジェクト ID が必要です。 オブジェクト ID を取得するには、 az ad group show または az ad group list を使用します。
az ad group show --group "{groupName}" --query "id" --output tsv
サービス プリンシパル
Microsoft Entra サービス プリンシパル (アプリケーションで使用される ID) には、サービス プリンシパル オブジェクト ID が必要です。 オブジェクト ID を取得するには、 az ad sp list を使用します。 サービス プリンシパルの場合は、アプリケーション ID ではなく オブジェクト ID を使用します。
az ad sp list --all --query "[].{displayName:displayName, id:id}" --output tsv
az ad sp list --display-name "{displayName}"
マネージド ID
システム割り当てマネージド ID またはユーザー割り当てマネージド ID の場合は、オブジェクト ID が必要です。 オブジェクト ID を取得するには、 az ad sp list を使用します。
az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"
ユーザー割り当てマネージド ID を一覧表示するためだけに、 az identity list を使用できます。
az identity list
手順 2: 適切なロールを選択する
権限はロールにグループ化されます。 複数の Azure 組み込みロール の一覧から選択することも、独自のカスタム ロールを使用することもできます。 必要最小限の特権でアクセス権を付与することをお勧めします。そのため、より広範なロールを割り当てないでください。
ロールを一覧表示し、一意のロール ID を取得するには、 az role definition list を使用できます。
az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv
特定のロールの詳細を一覧表示する方法を次に示します。
az role definition list --name "{roleName}"
詳細については、「 Azure ロール定義の一覧表示」を参照してください。
手順 3: 必要なスコープを特定する
Azure には、リソース、 リソース グループ、サブスクリプション、 管理グループの 4 つのレベルのスコープが用意されています。 必要最小限の特権でアクセス権を付与することをお勧めします。そのため、より広範なスコープでロールを割り当てないようにします。 スコープの詳細については、「 スコープについて」を参照してください。
リソース スコープ
リソース スコープの場合は、リソースのリソース ID が必要です。 リソース ID は、Azure portal でリソースのプロパティを確認することで確認できます。 リソース ID の形式は次のとおりです。
/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}
リソース グループのスコープ
リソース グループ スコープの場合は、リソース グループの名前が必要です。 この名前は、Azure portal の [リソース グループ ] ページで確認するか、 az group list を使用できます。
az group list --query "[].{name:name}" --output tsv
サブスクリプション スコープ
サブスクリプション スコープの場合は、サブスクリプション ID が必要です。 この ID は、Azure portal の [サブスクリプション ] ページで確認することも、 az account list を使用することもできます。
az account list --query "[].{name:name, id:id}" --output tsv
管理グループのスコープ
管理グループスコープの場合は、管理グループ名が必要です。 この名前は、Azure portal の [管理グループ ] ページで確認するか、 az account management-group list を使用できます。
az account management-group list --query "[].{name:name, id:id}" --output tsv
手順 4: ロールを割り当てる
ロールを割り当てるには、 az role assignment create コマンドを 使用します。 スコープに応じて、通常、コマンドの形式は次のいずれかになります。
リソース スコープ
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"
リソース グループのスコープ
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"
サブスクリプション スコープ
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"
管理グループのスコープ
az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"
次に、リソース グループ スコープのユーザーに 仮想マシン共同作成者 ロールを割り当てる場合の出力の例を示します。
{
"canDelegate": null,
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"name": "{roleAssignmentId}",
"principalId": "{principalId}",
"principalType": "User",
"resourceGroup": "{resourceGroupName}",
"roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
"scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
"type": "Microsoft.Authorization/roleAssignments"
}
ロールの割り当ての例
ストレージ アカウント リソース スコープ内のすべての BLOB コンテナーにロールを割り当てる
storage12345 という名前のストレージ アカウントのリソース スコープで、オブジェクト ID 55555555-5555-5555-5555-5555555555 のサービス プリンシパルにストレージ BLOB データ共同作成者ロールを割り当てます。
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"
特定の BLOB コンテナー リソース スコープにロールを割り当てる
BLOB-container-01 という名前の BLOB コンテナーのリソース スコープで、オブジェクト ID 55555555-5555-5555-5555-5555555555 のサービス プリンシパルにストレージ BLOB データ共同作成者ロールを割り当てます。
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"
特定の仮想ネットワーク リソース スコープ内のグループにロールを割り当てる
仮想マシン共同作成者ロールを、pharma-sales-project-network という名前の仮想ネットワークのリソース スコープで ID 222222222-2222-2222-2222-2222-22222222222 を持つ Ann Mack Team グループに割り当てます。
az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"
リソース グループ スコープでユーザーのロールを割り当てる
仮想マシン共同作成者ロールをpatlong@contoso.comリソース グループ スコープユーザーに割り当てます。
az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
リソース グループ スコープで一意のロール ID を使用してユーザーにロールを割り当てる
ロール名が変更されることがあります。次に例を示します。
- 独自のカスタム ロールを使用していて、名前を変更することにしました。
- 名前に (プレビュー) を含む プレビュー ロールを使用している。 ロールが解放されると、ロールの名前が変更されます。
ロールの名前が変更されても、ロール ID は変更されません。 スクリプトまたは自動化を使用してロールの割り当てを作成する場合は、ロール名ではなく一意のロール ID を使用することをお勧めします。 そのため、ロールの名前が変更されると、スクリプトが機能する可能性が高くなります。
次の例では、製薬販売リソース グループ スコープのpatlong@contoso.com ユーザーに仮想マシン共同作成者ロールを割り当てます。
az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
リソース グループ スコープですべての BLOB コンテナーにロールを割り当てる
Example-Storage-rg リソース グループ スコープで、オブジェクト ID 555555555-5555-5555-5555-555555555555 を持つサービス プリンシパルにストレージ BLOB データ共同作成者ロールを割り当てます。
az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"
リソース グループ スコープでアプリケーションのロールを割り当てる
サービス プリンシパル オブジェクト ID 44444444-4444-4444-4444-444444444444 を持つアプリケーションに Virtual Machine Contributor ロールを pharma-sales リソース グループのスコープで割り当てます。
az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
リソース グループ スコープで新しいサービス プリンシパルのロールを割り当てる
新しいサービス プリンシパルを作成し、すぐにそのサービス プリンシパルにロールを割り当てようとすると、場合によってはそのロールの割り当てが失敗することがあります。 たとえば、スクリプトを使用して新しいマネージド ID を作成し、そのサービス プリンシパルにロールを割り当てようとすると、ロールの割り当てが失敗する可能性があります。 このエラーの原因は、レプリケーションの遅延である可能性があります。 サービス プリンシパルは 1 つのリージョンに作成されます。ただし、ロールの割り当ては、まだサービス プリンシパルをレプリケートしていない別のリージョンで発生する可能性があります。 このシナリオに対処するには、ロールの割り当てを作成するときにプリンシパルの種類を指定する必要があります。
ロールを割り当てるには、 az role assignment create を使用し、 --assignee-object-idの値を指定してから、 --assignee-principal-type を ServicePrincipal に設定します。
az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"
次の例では、仮想マシン共同作成者ロールを、製薬販売リソース グループ スコープの msi テスト マネージド ID に割り当てます。
az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"
サブスクリプション スコープでユーザーのロールを割り当てる
サブスクリプション スコープの ユーザーにannm@example.comロールを割り当てます。
az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
サブスクリプション スコープでグループのロールを割り当てる
サブスクリプション スコープで ID 222222222-2222-2222-2222-22222222222222 を持つ Ann Mack チーム グループに閲覧者ロールを割り当てます。
az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
サブスクリプション スコープですべての BLOB コンテナーにロールを割り当てる
サブスクリプション スコープの ユーザーにalain@example.comロールを割り当てます。
az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"
管理グループ スコープでユーザーのロールを割り当てる
管理グループ スコープの ユーザーにalain@example.comロールを割り当てます。
az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"