コントロール プレーンのロールベースのアクセス制御と Azure Cosmos DB for NoSQL を使用する
適用対象: NoSQL
次の場所を含むデプロイ ガイドのシーケンスの図: 概要、概念、準備、ロールベースのアクセス制御、ネットワーク、リファレンス。 現在、"ロールベースのアクセス制御" の場所が強調表示されています。
この記事では、Azure Cosmos DB for NoSQL アカウントとそのリソースを管理するアクセス権を ID に付与する手順について説明します。
重要
この記事の手順では、アカウントの階層内にあるリソースのアカウント自体に対して操作を実行するための、コントロール プレーン アクセスについてのみ説明します。 データ プレーンの項目を管理し、クエリを実行する方法については、「データ プレーンにロールベースのアクセスを付与する」を参照してください。
前提条件
- アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
- 既存の Azure Cosmos DB アカウント。
- Microsoft Entra ID 内の 1 つ以上の既存の ID。
Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。
CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。
ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。
初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。
az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。
- Azure PowerShell をローカルで使用する場合は、次のようにします。
- Az PowerShell モジュールの最新バージョンをインストールします。
- Connect-AzAccount コマンドレットを使用して、Azure アカウントに接続します。
- Azure Cloud Shell を使用する場合は、次のようにします。
- 詳細については、Azure Cloud Shell の概要に関するページを参照してください。
ロールの定義を準備する
まず、Azure Cosmos DB でアカウント リソースを管理するためのアクセス権を付与するために、actions
の一覧を含むロールの定義を準備する必要があります。
az role definition list
を使用して、Azure Cosmos DB アカウントに関連付けられているすべてのロールの定義を一覧表示します。 出力を確認し、Cosmos DB 組み込みデータ共同作成者というロールの定義を見つけます。 出力には、id
プロパティ内のロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値をメモしておきます。
az role definition list \
--name "Cosmos DB Operator"
[
{
"assignableScopes": [
"/"
],
"description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
"name": "230815da-be43-4aae-9cb4-875f7bd000aa",
"permissions": [
{
"actions": [
"Microsoft.DocumentDb/databaseAccounts/*",
"Microsoft.Insights/alertRules/*",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/deployments/*",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Support/*",
"Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
],
"condition": null,
"conditionVersion": null,
"dataActions": [],
"notActions": [
"Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
"Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
"Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
"Microsoft.DocumentDB/databaseAccounts/listKeys/*",
"Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Operator",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions",
}
]
Note
この例では、id
の値は /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
になります。 この例では架空のデータを使用します。実際の識別子はこの例とは異なります。 ただし、識別子 (230815da-be43-4aae-9cb4-875f7bd000aa
) は、Azure 内のすべてのロールの定義にわたってグローバルに一意です。
Azure portal (https://portal.azure.com) にサインインします。
グローバル検索バーに「リソース グループ」と入力します。
[サービス] で [リソース グループ] を選択します。
[リソース グループ] ペインで、既存のリソース グループを選択します。
Note
この例のスクリーンショットには、
msdocs-identity-example
リソース グループが含まれています。 実際のリソース グループ名は異なる場合があります。リソース グループのペインで、サービス メニューから [アクセス制御 (IAM)] を選択します。
[アクセス制御 (IAM)] ペインで [ロール] を選択します。
[ロール] セクションで、検索語句 Cosmos DB を使用し、Cosmos DB オペレーター ロールの定義を見つけます。 次に、その定義に関連付けられている [表示] オプションを選択します。
[Cosmos DB オペレーター] ロールの定義ダイアログで、このロール定義の一部として割り当てられているアクションを確認します。
[Cosmos DB オペレーター] ロールの定義ダイアログを閉じます。
Get-AzRoleDefinition
を使用して、Azure Cosmos DB アカウントに関連付けられているすべてのロールの定義を一覧表示します。 出力を確認し、Cosmos DB 組み込みデータ共同作成者というロールの定義を見つけます。 出力には、Id
プロパティ内のロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値をメモしておきます。
$parameters = @{
Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name : Cosmos DB Operator
Id : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom : False
Description : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
Note
この例では、Id
の値は 230815da-be43-4aae-9cb4-875f7bd000aa
になります。 識別子は、Azure 内のすべてのロールの定義にわたってグローバルに一意です。
ID にロールを割り当てる
次は、新しく定義したロールを ID に割り当てて、アプリケーションから Azure Cosmos DB のリソースにアクセスできるようにします。
重要
この割り当てタスクでは、ロールベースのアクセス制御のアクセス許可を付与する ID の一意識別子を取得しておく必要があります。
az group show
を使用して、現在のリソース グループのメタデータを再度取得します。az group show \ --name "<name-of-existing-resource-group>"
前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このリソース グループの
id
プロパティの値をメモしておきます。{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Note
この例では、
id
の値は/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
になります。 この例では架空のデータを使用します。実際の識別子はこの例とは異なります。 これは切り詰められた出力例です。az role assignment create
を使用して新しいロールを割り当てます。--scope
引数にはリソース グループの識別子、-role
引数にはロールの識別子、--assignee
引数には ID の一意識別子を使用します。az role assignment create \ --assignee "<your-principal-identifier>" \ --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
Note
このコマンドの例では、
scope
は、前の手順の例からの架空の例/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
に設定されました。 リソース グループの識別子は、この例とは異なります。role
も架空の/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
に設定されました。 ここでも、ロール識別子は異なります。コマンドからの出力を確認します。 出力には、
id
プロパティの割り当ての一意識別子が含まれます。{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa", "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceGroup": "msdocs-identity-example", "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "type": "Microsoft.Authorization/roleAssignments" }
Note
この例では、
id
プロパティは/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
です。これはもう 1 つの架空の例です。これらの手順を繰り返して、使用する他の ID からこのアカウントへのアクセス権を付与します。
ヒント
必要な数の ID に対してこれらの手順を繰り返すことができます。 一般的に、開発者が自分のユーザー ID を使用してアカウントにアクセスできるようにし、アプリケーションがマネージド ID を使用してアクセスできるようにするには、これらの手順を繰り返し実行する必要があります。
新しい Bicep ファイルを作成して、ロールの割り当てを定義します。 ファイルに control-plane-role-assignment.bicep という名前を付けます。
metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.' @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId) scope: resourceGroup() properties: { roleDefinitionId: roleDefinitionId principalId: identityId } }
control-plane-role-assignment.
bicepparam
という新しい Bicep パラメーター ファイルを作成します。 このパラメーター ファイルで、先ほどメモしたロールの定義識別子をroleDefinitionId
パラメーターに割り当て、自分の ID の一意識別子をidentityId
パラメーターに割り当てます。using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
az deployment group create
を使用して、この Bicep テンプレートをデプロイします。az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
これらの手順を繰り返して、使用する他の ID からこのアカウントへのアクセス権を付与します。
ヒント
必要な数の ID に対してこれらの手順を繰り返すことができます。 一般的に、開発者が自分のユーザー ID を使用してアカウントにアクセスできるようにし、アプリケーションがマネージド ID を使用してアクセスできるようにするには、これらの手順を繰り返し実行する必要があります。
[アクセス制御 (IAM)] ペインで、[追加]、[ロールの割り当ての追加] の順に選択します。
[ロール] ペインで、
Azure Cosmos DB
を検索し、このガイドで前に作成した Azure Cosmos DB コントロール プレーン所有者ロールを選択します。 次に、 [次へ] を選択します。ヒント
必要に応じてロールの一覧をフィルター処理して、カスタム ロールのみを含めることができます。
[メンバー] ペインで、[メンバーの選択] オプションを選択します。 メンバー ダイアログで、Azure Cosmos DB アカウントに対してこのレベルのアクセス権を付与する ID を選択し、[選択] オプションを使用して、選択内容を確認します。
Note
このスクリーンショットは、プリンシパルが
kai@adventure-works.com
の "Kai Carter" という名前のユーザーの例を示しています。[メンバー] ペインに戻り、選択したメンバーを確認し、[確認と割り当て] を選択します。
[確認と割り当て] ペインで、新しいロールの割り当てに対して指定されたオプションを確認します。 最後に、 [レビューと割り当て] を選択します。
ポータルのよるロールの割り当て作成が完了するのを待ちます。
New-AzRoleAssignment
を使用して新しいロールを割り当てます。RoleDefinitionName
パラメーターにはロールの名前、ObjectId
パラメーターには ID の一意識別子を使用します。$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
コマンドからの出力を確認します。 出力には、
RoleAssignmentId
プロパティの割り当ての一意識別子が含まれます。RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example DisplayName : Kai Carter SignInName : <kai@adventure-works.com> RoleDefinitionName : Azure Cosmos DB Control Plane Owner RoleDefinitionId : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
Note
この例では、
RoleAssignmentId
プロパティは/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
です。これはもう 1 つの架空の例です。 これは、わかりやすくするための一般的なデプロイ出力のサブセットです。これらの手順を繰り返して、使用する他の ID からこのアカウントへのアクセス権を付与します。
ヒント
必要な数の ID に対してこれらの手順を繰り返すことができます。 一般的に、開発者が自分のユーザー ID を使用してアカウントにアクセスできるようにし、アプリケーションがマネージド ID を使用してアクセスできるようにするには、これらの手順を繰り返し実行する必要があります。
コードでコントロール プレーン アクセスを検証する
最後に、好みのプログラミング言語でアプリケーション コードと Azure Management SDK を使用して、アクセスが正しく付与されたことを検証します。
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
重要
このコード サンプルでは、NuGet の Azure.ResourceManager.CosmosDB
と Azure.Identity
のライブラリを使用しています。