次の方法で共有


コントロール プレーンのロールベースのアクセス制御と Azure Cosmos DB for Table を使用する

適用対象: Table

デプロイ ガイドのシーケンス内の現在の場所 (

次の場所を含むデプロイ ガイドのシーケンスの図: 概要、概念、準備、ロールベースのアクセス制御、ネットワーク、リファレンス。 現在、"ロールベースのアクセス制御" の場所が強調表示されています。

この記事では、Azure Cosmos DB for Table アカウントとそのリソースを管理するためのアクセス権を 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 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 内のすべてのロールの定義にわたってグローバルに一意です。

  1. Azure portal (https://portal.azure.com) にサインインします。

  2. グローバル検索バーに「リソース グループ」と入力します。

    Azure portal のグローバル検索バーを示すスクリーンショット。

  3. [サービス][リソース グループ] を選択します。

    検索メニューで [リソース グループ] オプションが選択されているスクリーンショット。

  4. [リソース グループ] ペインで、既存のリソース グループを選択します。

    サブスクリプションのリソース グループの一覧にある既存のリソース グループのスクリーンショット。

    Note

    この例のスクリーンショットには、msdocs-identity-example リソース グループが含まれています。 実際のリソース グループ名は異なる場合があります。

  5. リソース グループのペインで、サービス メニューから [アクセス制御 (IAM)] を選択します。

    リソース グループのサービス メニューにある [アクセス制御 (IAM)] オプションのスクリーンショット。

  6. [アクセス制御 (IAM)] ペインで [ロール] を選択します。

    [アクセス制御 (IAM)] ペインの [ロール] オプションのスクリーンショット。

  7. [ロール] セクションで、検索語句 Cosmos DB を使用し、Cosmos DB オペレーター ロールの定義を見つけます。 次に、その定義に関連付けられている [表示] オプションを選択します。

    現在の割り当て可能なスコープでのロールの定義で、タイトルに

  8. [Cosmos DB オペレーター] ロールの定義ダイアログで、このロール定義の一部として割り当てられているアクションを確認します。

    組み込みロールの定義の詳細を示す [Cosmos DB オペレーター] ダイアログのスクリーンショット。

  9. [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 の一意識別子を取得しておく必要があります。

  1. az group show を使用して、現在のリソース グループのメタデータを再度取得します。

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. 前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このリソース グループの 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 になります。 この例では架空のデータを使用します。実際の識別子はこの例とは異なります。 これは切り詰められた出力例です。

  3. 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 に設定されました。 ここでも、ロール識別子は異なります。

  4. コマンドからの出力を確認します。 出力には、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 つの架空の例です。

  5. これらの手順を繰り返して、使用する他の ID からこのアカウントへのアクセス権を付与します。

    ヒント

    必要な数の ID に対してこれらの手順を繰り返すことができます。 一般的に、開発者が自分のユーザー ID を使用してアカウントにアクセスできるようにし、アプリケーションがマネージド ID を使用してアクセスできるようにするには、これらの手順を繰り返し実行する必要があります。

  1. 新しい 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
      }
    }
    
  2. 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>'
    
  3. 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
    
  4. これらの手順を繰り返して、使用する他の ID からこのアカウントへのアクセス権を付与します。

    ヒント

    必要な数の ID に対してこれらの手順を繰り返すことができます。 一般的に、開発者が自分のユーザー ID を使用してアカウントにアクセスできるようにし、アプリケーションがマネージド ID を使用してアクセスできるようにするには、これらの手順を繰り返し実行する必要があります。

  1. [アクセス制御 (IAM)] ペインで、[追加][ロールの割り当ての追加] の順に選択します。

    [アクセス制御 (IAM)] メニューの [追加] オプションにある [ロールの割り当ての追加] オプションのスクリーンショット。

  2. [ロール] ペインで、Azure Cosmos DB を検索し、このガイドで前に作成した Azure Cosmos DB コントロール プレーン所有者ロールを選択します。 次に、 [次へ] を選択します。

    ロールの割り当てを追加するための [ロール] ペインのスクリーンショット。

    ヒント

    必要に応じてロールの一覧をフィルター処理して、カスタム ロールのみを含めることができます。

  3. [メンバー] ペインで、[メンバーの選択] オプションを選択します。 メンバー ダイアログで、Azure Cosmos DB アカウントに対してこのレベルのアクセス権を付与する ID を選択し、[選択] オプションを使用して、選択内容を確認します。

    ロールの割り当てを追加するための [メンバー] ペインのスクリーンショット。

    ロールの割り当てを追加するための ID 選択ダイアログのスクリーンショット。

    Note

    このスクリーンショットは、プリンシパルが kai@adventure-works.com"Kai Carter" という名前のユーザーの例を示しています。

  4. [メンバー] ペインに戻り、選択したメンバーを確認し、[確認と割り当て] を選択します。

    ロールの割り当ての ID が選択されている [メンバー] ペインのスクリーンショット。

  5. [確認と割り当て] ペインで、新しいロールの割り当てに対して指定されたオプションを確認します。 最後に、 [レビューと割り当て] を選択します。

    ロールの割り当ての [確認と作成] ペインのスクリーンショット。

  6. ポータルのよるロールの割り当て作成が完了するのを待ちます。

  1. 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
    
  2. コマンドからの出力を確認します。 出力には、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 つの架空の例です。 これは、わかりやすくするための一般的なデプロイ出力のサブセットです。

  3. これらの手順を繰り返して、使用する他の ID からこのアカウントへのアクセス権を付与します。

    ヒント

    必要な数の ID に対してこれらの手順を繰り返すことができます。 一般的に、開発者が自分のユーザー ID を使用してアカウントにアクセスできるようにし、アプリケーションがマネージド ID を使用してアクセスできるようにするには、これらの手順を繰り返し実行する必要があります。

コードでコントロール プレーン アクセスを検証する

最後に、好みのプログラミング言語でアプリケーション コードと Azure Management SDK を使用して、アクセスが正しく付与されたことを検証します。

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

重要

このコード サンプルでは、NuGet の Azure.ResourceManager.CosmosDBAzure.Identity のライブラリを使用しています。

次のステップ