次の方法で共有


ロールベースのアクセス制御と Microsoft Entra ID を使用して Azure Cosmos DB for NoSQL に接続する

ロールベースのアクセス制御とは、Azure 内のリソースへのアクセスを管理する方法を指します。 この方法は、1 つ以上のリソースに対して必要なアクセス レベルを管理するロールが割り当てられている特定の ID に基づいています。 ロールベースのアクセス制御は、きめ細かいアクセス管理の柔軟なシステムを提供します。これにより、ID がタスクの実行に必要な最小限の特権レベルのアクセス権のみを持つことが保証されます。

詳細については、 ロールベースのアクセス制御に関するページを参照してください。

[前提条件]

  • アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます

  • 既存の Azure Cosmos DB for NoSQL アカウント。

  • Microsoft Entra ID の 1 つ以上の既存の ID。

  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の概要」を参照してください。

  • CLI 参照コマンドをローカルで実行する場合は、Azure CLI を インストール します。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、「 Azure CLI を使用した Azure への認証」を参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、「Azure CLI で拡張機能を使用および管理する」を参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

キーベース認証を無効にする

キーベースの承認を無効にすると、より安全な Microsoft Entra ID 認証方法なしでアカウントが使用されなくなります。 この手順は、セキュリティで保護されたワークロードの新しいアカウントに対して実行する必要がある手順です。 または、セキュリティで保護されたワークロード パターンに移行されている既存のアカウントに対して、この手順を実行します。

まず、アプリケーションで Microsoft Entra ID 認証を使用する必要がないように、既存のアカウントに対するキーベースの認証を無効にします。 az resource updateを使用して、既存のアカウントのproperties.disableLocalAuthを変更します。

az resource update \
    --resource-group "<name-of-existing-resource-group>" \
    --name "<name-of-existing-account>" \
    --resource-type "Microsoft.DocumentDB/databaseAccounts" \
    --set properties.disableLocalAuth=true

まず、キーベースの認証が無効になっている新しいアカウントを作成して、アプリケーションで Microsoft Entra 認証を使用する必要があります。

  1. キーベースの認証を無効にして新しいアカウントをデプロイする新しい Bicep ファイルを作成します。 ファイルに deploy-new-account.bicep という名前を付けます

    metadata description = 'Deploys a new Azure Cosmos DB account with key-based auth disabled.'
    
    @description('Name of the Azure Cosmos DB account.')
    param name string = 'csms-${uniqueString(resourceGroup().id)}'
    
    @description('Primary ___location for the Azure Cosmos DB account.')
    param ___location string = resourceGroup().___location
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
      name: name
      ___location: ___location
      kind: 'GlobalDocumentDB'
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: ___location
          }
        ]
        disableLocalAuth: true
      }
    }
    
  2. az deployment group createを使用して、新しいアカウントで Bicep ファイルをデプロイします。

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file deploy-new-account.bicep
    

まず、既存のアカウントに対するキーベースの認証を無効にして、アプリケーションで Microsoft Entra 認証を使用する必要がないようにします。 Get-AzResourceSet-AzResourceを使用して、それぞれ既存のアカウントの読み取りと更新を行います。

$parameters = @{
    ResourceGroupName = "<name-of-existing-resource-group>"
    ResourceName = "<name-of-existing-account>"
    ResourceType = "Microsoft.DocumentDB/databaseAccounts"
}
$resource = Get-AzResource @parameters

$resource.Properties.DisableLocalAuth = $true

$resource | Set-AzResource -Force

次の手順を使用して、キーベースの認証が無効になっている新しい Azure Cosmos DB for NoSQL アカウントを作成し、アプリケーションで Microsoft Entra 認証のみを使用する必要があります。

  1. 新しい Azure Cosmos DB for NoSQL アカウントを設定する場合は、アカウント作成プロセスの [セキュリティ ] セクションに移動します。

  2. 次に、[キーベースの認証] オプションで [無効] を選択します。

    Azure portal で新しいアカウントを作成するときにキーベースの認証を無効にするオプションのスクリーンショット。

Important

Azure Cosmos DB アカウントを変更するには、少なくとも Microsoft.DocumentDb/databaseAccounts/*/write アクセス許可を持つ Azure ロールが必要です。 詳細については、 Azure Cosmos DB のアクセス許可に関するページを参照してください。

キーベースの認証が無効になっていることを検証する

キーベースのアクセスが無効になっていることを検証するには、Azure SDK を使用して、リソース所有者パスワード資格情報 (ROPC) を使用して Azure Cosmos DB for NoSQL に接続します。 この試行は失敗します。 必要に応じて、一般的なプログラミング言語のコード サンプルをここに示します。

using Microsoft.Azure.Cosmos;

string connectionString = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;";

CosmosClient client = new(connectionString);
const { CosmosClient } = require('@azure/cosmos');

const connectionString = 'AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;';

const client = new CosmosClient(connectionString);
import { CosmosClient } from '@azure/cosmos'

let connectionString: string = 'AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;';

const client: CosmosClient = new CosmosClient(connectionString);
from azure.cosmos import CosmosClient

connection_string = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;"

client = CosmosClient(connection_string)
package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
)

const connectionString = "AccountEndpoint=<nosql-endpoint>;AccountKey=<key>;"

func main() {
    client, _ := azcosmos.NewClientFromConnectionString(connectionString, nil)
}
import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;

public class NoSQL{
    public static void main(String[] args){
        CosmosClient client = new CosmosClientBuilder()
            .endpoint("<nosql-endpoint>")
            .key("<key>")
            .buildClient();
    }
}
use azure_data_cosmos::CosmosClient;

fn main() {
    let client = CosmosClient::new_with_access_key(
        "<account-endpoint>",
        "<account-key>",
        None,
    ).unwrap();

    let container = client.database_client("<database-name>").container_client("<container-name>");

    let response = container.read_item("<partition-key>", "<item-id>", None);
    tokio::runtime::Runtime::new().unwrap().block_on(response).unwrap();
}

コントロール プレーンに対してロールベースのアクセスを付与する

コントロール プレーン アクセスとは、データを管理せずに Azure サービスのリソースを管理する機能を指します。 たとえば、Azure Cosmos DB コントロール プレーンへのアクセスには、次の機能が含まれる場合があります。

  • すべてのアカウントとリソースのメタデータを読み取る
  • アカウント キーと接続文字列の読み取りと再生成
  • アカウントのバックアップと復元を実行する
  • データ転送ジョブを開始し、追跡する
  • データベースとコンテナーを管理する
  • アカウントのプロパティを変更する

Important

Azure Cosmos DB では、ネイティブ データ プレーンロールベースのアクセス制御の定義と割り当てを管理するには、コントロール プレーン アクセスが必要です。 Azure Cosmos DB のデータ プレーンロールベースのアクセス制御メカニズムはネイティブであるため、定義と割り当てを作成し、それらを Azure Cosmos DB アカウント内のリソースとして格納するには、コントロール プレーン アクセスが必要です。

まず、Azure Cosmos DB のアカウント リソースを管理するためのアクセス権を付与するための actions の一覧を含むロール定義を準備する必要があります。 このガイドでは、組み込みロールとカスタム ロールを準備します。 次に、アプリケーションが Azure Cosmos DB のリソースにアクセスできるように、新しく定義されたロールを ID に割り当てます。

  1. az role definition listを使用して、Azure Cosmos DB アカウントに関連付けられているすべてのロール定義を一覧表示します。

    az role definition list \
        --name "Cosmos DB Operator"
    
  2. 出力を確認し、 Cosmos DB Operator という名前のロール定義を見つけます。 出力の id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    [
      {
        "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",
      }
    ]
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aaされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 ただし、識別子 (230815da-be43-4aae-9cb4-875f7bd000aa) は、Azure のすべてのロール定義でグローバルに一意です。

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

    az group show \
        --name "<name-of-existing-resource-group>"
    
  4. 前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このリソース グループの id プロパティの値を記録します。

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "___location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-exampleされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 この文字列は、出力の省略された例です。

  5. role-definition.jsonという名前の新しい JSON ファイル を作成します 。 ファイルで、ここに記載されている値を指定して、このリソース定義を作成します。 AssignableScopesリストに、前の手順で記録したリソース グループのid プロパティを追加します。

    {
      "Name": "Azure Cosmos DB Control Plane Owner",
      "IsCustom": true,
      "Description": "Can perform all control plane actions for an Azure Cosmos DB account.",
      "Actions": [
        "Microsoft.DocumentDb/*"
      ],
      "AssignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ]
    }
    

    この例では、前の手順で記録した /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example 値を使用します。 実際のリソース識別子は異なる場合があります。

  6. az role definition createを使用して新しいロール定義を作成します。 引数の入力として、role-definition.jsonファイルを使用します。

    az role definition create \
        --role-definition role-definition.json
    
  7. 定義作成コマンドからの出力を確認します。 出力の id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    {
      "assignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
      ],
      "description": "Can perform all control plane actions for an Azure Cosmos DB account.",
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "name": "e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5",
      "permissions": [
        {
          "actions": [
            "Microsoft.DocumentDb/*"
          ]
        }
      ],
      "roleName": "Azure Cosmos DB Control Plane Owner",
      "roleType": "CustomRole"
    }
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1されます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 この例は、わかりやすくするためにデプロイから出力される一般的な JSON のサブセットです。

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

    az group show \
        --name "<name-of-existing-resource-group>"
    
  9. 前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このリソース グループの id プロパティの値を記録します。

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "___location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-exampleされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 この文字列は、出力の省略された例です。

  10. 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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
    

    このコマンド例では、 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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1に設定されました。 ここでも、ロール識別子は異なります。

  11. コマンドからの出力を確認します。 出力には、id プロパティに関する割り当ての一意な識別子が含まれます。

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "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/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
      "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

    この例では、 id プロパティは /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1です。これはもう 1 つの架空の例です。

  12. 使用する他の ID からアカウントへのアクセスを許可するには、次の手順を繰り返します。

    ヒント

    必要な数の ID に対して、これらの手順を繰り返すことができます。 通常、これらの手順は少なくとも繰り返され、開発者は自分の人間の ID を使用してアカウントにアクセスでき、アプリケーションはマネージド ID を使用してデータにアクセスできます。

  1. az role definition listを使用して、Azure Cosmos DB アカウントに関連付けられているすべてのロール定義を一覧表示します。

    az role definition list \
        --name "Cosmos DB Operator"
    
  2. 出力を確認し、 Cosmos DB Operator という名前のロール定義を見つけます。 出力の id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    [
      {
        "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",
      }
    ]
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aaされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 ただし、識別子 (230815da-be43-4aae-9cb4-875f7bd000aa) は、Azure のすべてのロール定義でグローバルに一意です。

  3. ロール定義を定義する新しい Bicep ファイルを作成します。 ファイル に control-plane-role-definition.bicep という名前を付けます。 次の actions を定義に追加します。

    Description
    Microsoft.DocumentDb/* 考えられるすべてのアクションを有効にします。
    metadata description = 'Create RBAC definition for control plane access to Azure Cosmos DB.'
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'Azure Cosmos DB Control Plane Owner'
    
    @description('Description of the role definition.')
    param roleDefinitionDescription string = 'Can perform all control plane actions for an Azure Cosmos DB account.'
    
    resource definition 'Microsoft.Authorization/roleDefinitions@2022-04-01' = {
      name: guid(subscription().id, resourceGroup().id, roleDefinitionName)
      scope: resourceGroup()
      properties: {
        roleName: roleDefinitionName
        description: roleDefinitionDescription
        type: 'CustomRole'
        permissions: [
          {
            actions: [
              'Microsoft.DocumentDb/*'
            ]
          }
        ]
        assignableScopes: [
          resourceGroup().id
        ]
      }
    }
    
    output definitionId string = definition.id
    
  4. az deployment group createを使用して Bicep テンプレートをデプロイします。 Bicep テンプレートと Azure リソース グループの名前を指定します。

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --template-file control-plane-role-definition.bicep
    
  5. デプロイメントからの出力を評価します。 出力の properties.outputs.definitionId.value プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    {
      "properties": {
        "outputs": {
          "definitionId": {
            "type": "String",
            "value": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1"
          }
        }
      }
    }
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1されます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 この例は、わかりやすくするためにデプロイから出力される一般的な JSON のサブセットです。

  6. ロールの割り当てを定義する新しい 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
      }
    }
    
  7. 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>'
    
  8. 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
    
  9. 使用する他の ID からアカウントへのアクセスを許可するには、次の手順を繰り返します。

    ヒント

    必要な数の ID に対して、これらの手順を繰り返すことができます。 通常、これらの手順は少なくとも繰り返され、開発者は自分の人間の ID を使用してアカウントにアクセスでき、アプリケーションはマネージド ID を使用してデータにアクセスできます。

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

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

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

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

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

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

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

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

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

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

  6. [アクセス制御 (IAM)] ウィンドウで、[ロール] を選択します

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

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

    タイトルに

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

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

  9. Cosmos DB オペレーター ロール定義ダイアログを閉じます。

  10. [アクセス制御 (IAM)] ペインに戻り、[追加] を選択します。 次に、[ カスタム ロールの追加] を選択します。

    [追加] オプションの [アクセス制御 (IAM)] メニューの [カスタム ロールの追加] オプションのスクリーンショット。

  11. [ 基本 ] ウィンドウで、次のオプションを構成し、[ 次へ] を選択します。

    価値
    カスタム ロール名 Azure Cosmos DB Control Plane Owner
    説明 Can perform all control plane actions for an Azure Cosmos DB account.
    ベースラインのアクセス許可 最初から行う

    カスタム ロールを追加するための [基本] ウィンドウのスクリーンショット。

  12. [ アクセス許可 ] ウィンドウで、[ アクセス許可の追加] を選択します。 次に、アクセス許可ダイアログで DocumentDB を検索します。 最後に、 Microsoft.DocumentDB オプションを選択します。

    カスタム ロールを追加するための [アクセス許可] ウィンドウのスクリーンショット。

    カスタム ロールを追加するための 'DocumentDB' に関連するアクセス許可にフィルター処理された [アクセス許可の追加] ダイアログのスクリーンショット。

  13. [アクセス許可] ダイアログで、のすべてのMicrosoft.DocumentDBを選択します。 次に、[ 追加 ] を選択して [*アクセス許可 ] ウィンドウに戻ります。

    カスタム ロールのダイアログで [DocumentDB] に対して選択されているすべてのアクセス許可のスクリーンショット。

  14. [アクセス許可] ウィンドウに戻り、アクセス許可の一覧を確認します。 次に、[ 確認と作成] を選択します。

    カスタム ロールの一覧に複数のアクセス許可が追加された [アクセス許可] ペインのスクリーンショット。

  15. [ 確認と作成 ] ウィンドウで、新しいロール定義の指定されたオプションを確認します。 最後に、[ 作成] を選択します。

    カスタム ロールを追加するための [確認と作成] ウィンドウのスクリーンショット。

  16. ポータルがロール定義の作成を完了するまで待ちます。

  17. [アクセス制御 (IAM)] ウィンドウで、[追加] を選択し、[ロールの割り当ての追加] を選択します。

    'アクセス制御 (IAM)' メニューの 'ロールの割り当ての追加' オプションおよび '追加' オプションのスクリーンショット。

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

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

    ヒント

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

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

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

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

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

  20. [メンバー] ウィンドウに戻り、選択したメンバーを確認し、[確認と割り当て] を選択します。

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

  21. [ 確認と割り当て ] ウィンドウで、新しいロールの割り当ての指定されたオプションを確認します。 最後に、[ 確認と割り当て] を選択します。

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

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

  1. Get-AzRoleDefinitionを使用して、Azure Cosmos DB アカウントに関連付けられているすべてのロール定義を一覧表示します。

    $parameters = @{
        Name = "Cosmos DB Operator"
    }
    Get-AzRoleDefinition @parameters
    
  2. 出力を確認し、 Cosmos DB 組み込みデータ共同作成者という名前のロール定義を見つけます。 出力の Id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    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 : {/}
    

    この例では、 Id 値が 230815da-be43-4aae-9cb4-875f7bd000aaされます。 識別子は、Azure のすべてのロール定義でグローバルに一意です。

  3. Get-AzResourceGroupを使用して、現在のリソース グループのメタデータを取得します。

    $parameters = @{
        Name = "<name-of-existing-resource-group>"
    }
    Get-AzResourceGroup @parameters
    
  4. 前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このリソース グループの ResourceId プロパティの値を記録します。

    ResourceGroupName : msdocs-identity-example
    Location          : westus
    ProvisioningState : Succeeded
    ResourceId        : /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-example
    

    この例では、 ResourceId 値が /subscriptions/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1/resourcegroups/msdocs-identity-exampleされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 この文字列は、通常の出力を簡略化した例です。

  5. まず、 Az.Resources モジュールをインポートします。 次に、新しい Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition オブジェクトを作成します。 オブジェクトで、ここに示されている値を指定して、このリソース定義を作成します。 AssignableScopesリストに、前の手順で記録したリソース グループのResourceId プロパティを追加します。 最後に、ロール定義オブジェクトを、-RoleNew-AzRoleDefinition パラメーターの入力として使用します。

    Import-Module Az.Resources
    
    $parameters = @{
        TypeName = "Microsoft.Azure.Commands.Resources.Models.Authorization.PSRoleDefinition"
        Property = @{
            Name = "Azure Cosmos DB Control Plane Owner"
            Description = "Can perform all control plane actions for an Azure Cosmos DB account."
            IsCustom = $true
            Actions = @(
                "Microsoft.DocumentDb/*"
            )
            AssignableScopes = @(
                "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
            )
        }
    }
    $role = New-Object @parameters
    
    New-AzRoleDefinition -Role $role
    

    この例では、前の手順で記録した /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example 値を使用します。 実際のリソース識別子は異なる場合があります。

  6. 定義作成コマンドからの出力を確認します。 出力の Name プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    Name             : Azure Cosmos DB Control Plane Owner
    Id               : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
    IsCustom         : True
    Description      : Can perform all control plane actions for an Azure Cosmos DB account.
    Actions          : {Microsoft.DocumentDb/*}
    AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example}
    

    この例では、 Name 値が Azure Cosmos DB Control Plane Ownerされます。 この例は、わかりやすくするために、デプロイの一般的な出力のサブセットです。

  7. 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
    
  8. コマンドからの出力を確認します。 出力には、RoleAssignmentId プロパティに関する割り当ての一意な識別子が含まれます。

    RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa
    RoleAssignmentId   : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1
    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
    

    この例では、 RoleAssignmentId プロパティは /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1です。これはもう 1 つの架空の例です。 この例は、わかりやすくするために、デプロイの一般的な出力のサブセットです。

  9. 使用する他の ID からアカウントへのアクセスを許可するには、次の手順を繰り返します。

    ヒント

    必要な数の ID に対して、これらの手順を繰り返すことができます。 通常、これらの手順は少なくとも繰り返され、開発者は自分の人間の ID を使用してアカウントにアクセスでき、アプリケーションはマネージド ID を使用してデータにアクセスできます。

Important

ロール定義を割り当てるには、ロールベースのアクセス制御権限を付与したい ID の一意識別子をすでに取得している必要があります。

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

アプリケーション コードと Azure Management SDK を使用して、アクセス権を正しく付与したことを検証します。

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);
const { CosmosDBManagementClient } = require('@azure/arm-cosmosdb');
const { DefaultAzureCredential } = require('@azure/identity');

const subscriptionId = "<subscription-id>";

const credential = new DefaultAzureCredential();

const client = new CosmosDBManagementClient(credential, subscriptionId);
import { CosmosDBManagementClient } from '@azure/arm-cosmosdb';
import { TokenCredential, DefaultAzureCredential } from '@azure/identity';

let subscriptionId: string = "<subscription-id>";

let credential: TokenCredential = new DefaultAzureCredential();

const client: CosmosDBManagementClient = new CosmosDBManagementClient(credential, subscriptionId);
from azure.mgmt.cosmosdb import CosmosDBManagementClient
from azure.identity import DefaultAzureCredential

subscription_id = "<subscription-id>"

credential = DefaultAzureCredential()

client = CosmosDBManagementClient(credential=credential, subscription=subscription_id)
package main

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/cosmos/armcosmos"
)

const subscriptionId = "<subscription-id>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    
    client, _ := armcosmos.NewDatabaseClient(subscriptionId, credential, nil)
}
package com.example;

import com.azure.core.management.profile.AzureProfile;
import com.azure.core.management.AzureEnvironment;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.resourcemanager.cosmos.CosmosManager;

public class CosmosDB {
    public static void main(String[] args) {
        AzureProfile profile = new AzureProfile(AzureEnvironment.AZURE);
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
          .build();

        CosmosManager manager = CosmosManager.authenticate(credential, profile);
    }
}

データ プレーンのロールベースのアクセス権を付与する

データ プレーン アクセスとは、アカウント内のリソースを管理することなく、Azure サービス内でデータの読み取りと書き込みを行う機能を指します。 たとえば、Azure Cosmos DB データ プレーンへのアクセスには、次の機能が含まれる場合があります。

  • アカウントとリソースのメタデータを読み取る
  • アイテムの作成、読み取り、更新、修正プログラムの適用、削除
  • NoSQL クエリの実行
  • コンテナーの変更フィードからの読み取り
  • ストアド プロシージャの実行
  • 競合フィードで競合を管理する

まず、Azure Cosmos DB for NoSQL のデータの読み取り、クエリ、管理へのアクセスを許可する dataActions の一覧を含むロール定義を準備する必要があります。 このガイドでは、組み込みロールとカスタム ロールを準備します。 次に、アプリケーションが Azure Cosmos DB for NoSQL のデータにアクセスできるように、新しく定義されたロールを ID に割り当てます。

Important

既存のデータ プレーン ロール定義を取得するには、次のコントロール プレーンのアクセス許可が必要です。

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read

新しいデータ プレーン ロール定義を作成するには、次のコントロール プレーンのアクセス許可が必要です。

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write

新しいデータ プレーン ロールの割り当てを作成するには、次のコントロール プレーンのアクセス許可が必要です。

  • Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
  • Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write

Warnung

Azure Cosmos DB for NoSQL のネイティブ ロールベースのアクセス制御では、 notDataActions プロパティはサポートされていません。 許可された dataAction として指定されていないアクションは、自動的に除外されます。

  1. az cosmosdb sql role definition listを使用して、Azure Cosmos DB for NoSQL アカウントに関連付けられているすべてのロール定義を一覧表示します。

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  2. 出力を確認し、 Cosmos DB 組み込みデータ共同作成者という名前のロール定義を見つけます。 出力の id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    [
      ...,
      {
        "assignableScopes": [
          "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
        ],
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002",
        "name": "00000000-0000-0000-0000-000000000002",
        "permissions": [
          {
            "dataActions": [
              "Microsoft.DocumentDB/databaseAccounts/readMetadata",
              "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
            ],
            "notDataActions": []
          }
        ],
        "resourceGroup": "msdocs-identity-example",
        "roleName": "Cosmos DB Built-in Data Contributor",
        "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
        "typePropertiesType": "BuiltInRole"
      }
      ...
    ]
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002されます。 この例では架空のデータを使用します。識別子はこの例とは異なります。

  3. role-definition.jsonという名前の新しい JSON ファイル を作成します 。 このファイルで、次に示すデータ アクションを指定するリソース定義を作成します。

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata アカウント レベルのメタデータを読み取ることができます
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* コンテナー レベルのデータ操作を実行できます
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* コンテナーを含む項目に対して任意の操作を実行できます
    {
      "RoleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
      "Type": "CustomRole",
      "AssignableScopes": [
        "/"
      ],
      "Permissions": [
        {
          "DataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
          ]
        }
      ]
    }
    
  4. 次に、 az cosmosdb sql role definition create を使用してロール定義を作成します。 引数の入力としてrole-definition.jsonを使用します。

    az cosmosdb sql role definition create \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>" \
        --body "@role-definition.json"
    
  5. 次に、 az cosmosdb sql role definition listを使用して、Azure Cosmos DB for NoSQL アカウントに関連付けられているすべてのロール定義を一覧表示します。

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  6. 前のコマンドからの出力を確認します。 作成した Azure Cosmos DB for NOSQL データ プレーン所有者という名前のロール定義を見つけてください。 出力の id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    {
      "assignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
      ],
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc",
      "name": "bbbbbbbb-1111-2222-3333-cccccccccccc",
      "permissions": [
        {
          "dataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
          ],
          "notDataActions": []
        }
      ],
      "resourceGroup": "msdocs-identity-example",
      "roleName": "Azure Cosmos DB for NoSQL Data Plane Owner",
      "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
      "typePropertiesType": "CustomRole"
    }
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-ccccccccccccされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。

  7. az cosmosdb showを使用して、現在のアカウントの一意の識別子を取得します。

    az cosmosdb show \
        --resource-group "<name-of-existing-resource-group>" \
        --name "<name-of-existing-nosql-account>" \
        --query "{id:id}"
    
  8. 前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このアカウントの id プロパティの値を記録します。

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    }
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosqlされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。

  9. az cosmosdb sql role assignment createを使用して新しいロールを割り当てます。 先ほどメモしたロールの定義識別子を --role-definition-id 引数に使用し、自分の ID の一意識別子を --principal-id 引数に使用します。 最後に、 --scope 引数にアカウントの識別子を使用します。

    az cosmosdb sql role assignment create \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>" \
        --role-definition-id "<id-of-new-role-definition>" \
        --principal-id "<id-of-existing-identity>" \
        --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    

    ヒント

    データ プレーンのロールベースのアクセス制御を自分の ID に付与しようとしている場合は、次のコマンドを使用して ID を取得できます。

    az ad signed-in-user show
    

    詳細については、az ad signed-in-userを参照してください。

    ヒント

    Azure Cosmos DB のロールベースのアクセス制御のネイティブ実装では、 スコープ とは、アクセス許可を適用するアカウント内のリソースの粒度を指します。 最上位レベルでは、最大のスコープを使用して、データ プレーンのロールベースのアクセス制御の割り当てをアカウント全体にスコープ設定できます。 このスコープには、アカウント内のすべてのデータベースとコンテナーが含まれます。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    または、データ プレーン ロールの割り当てのスコープを特定のデータベースに設定することもできます。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    最後に、割り当てのスコープを 1 つのコンテナーに設定できます。最も詳細なスコープは次のとおりです。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    多くの場合、完全修飾スコープではなく相対スコープを使用できます。 たとえば、この相対スコープを使用して、Azure CLI コマンドからデータ プレーンロールベースのアクセス制御アクセス許可を特定のデータベースとコンテナーに付与できます。

    /dbs/<database-name>/colls/<container-name>
    

    また、次の相対スコープを使用して、すべてのデータベースとコンテナーへのユニバーサル アクセスを許可することもできます。

    /
    
  10. az cosmosdb sql role assignment listを使用して、Azure Cosmos DB for NoSQL アカウントのすべてのロールの割り当てを一覧表示します。 出力を確認して、ロールの割り当てが作成されたことを確認します。

    az cosmosdb sql role assignment list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  1. az cosmosdb sql role definition listを使用して、Azure Cosmos DB for NoSQL アカウントに関連付けられているすべてのロール定義を一覧表示します。

    az cosmosdb sql role definition list \
        --resource-group "<name-of-existing-resource-group>" \
        --account-name "<name-of-existing-nosql-account>"
    
  2. 出力を確認し、 Cosmos DB 組み込みデータ共同作成者という名前のロール定義を見つけます。 出力の id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    [
      ...,
      {
        "assignableScopes": [
          "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
        ],
        "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002",
        "name": "00000000-0000-0000-0000-000000000002",
        "permissions": [
          {
            "dataActions": [
              "Microsoft.DocumentDB/databaseAccounts/readMetadata",
              "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
              "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
            ],
            "notDataActions": []
          }
        ],
        "resourceGroup": "msdocs-identity-example",
        "roleName": "Cosmos DB Built-in Data Contributor",
        "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
        "typePropertiesType": "BuiltInRole"
      }
      ...
    ]
    

    この例では、 id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002されます。 この例では架空のデータを使用します。識別子はこの例とは異なります。

  3. ロール定義を定義する新しい Bicep ファイルを作成します。 ファイルに data-plane-role-definition.bicep という名前を付けます。 次の dataActions を定義に追加します。

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata アカウント レベルのメタデータを読み取ることができます
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* コンテナー レベルのデータ操作を実行できます
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* コンテナーを含む項目に対して任意の操作を実行できます
    metadata description = 'Create RBAC definition for data plane access to Azure Cosmos DB for NoSQL.'
    
    @description('Name of the Azure Cosmos DB for NoSQL account.')
    param accountName string
    
    @description('Name of the role definition.')
    param roleDefinitionName string = 'Azure Cosmos DB for NoSQL Data Plane Owner'
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = {
      name: accountName
    }
    
    resource definition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-05-15' = {
      name: guid(account.id, roleDefinitionName)
      parent: account
      properties: {
        roleName: roleDefinitionName
        type: 'CustomRole'
        assignableScopes: [
          account.id
        ]
        permissions: [
          {
            dataActions: [
              'Microsoft.DocumentDB/databaseAccounts/readMetadata'
              'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*'
              'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*'
            ]
          }
        ]
      }
    }
    
    output definitionId string = definition.id
    

    ヒント

    Azure Cosmos DB のロールベースのアクセス制御のネイティブ実装では、 スコープ とは、アクセス許可を適用するアカウント内のリソースの粒度を指します。 最上位レベルでは、最大のスコープを使用して、データ プレーンのロールベースのアクセス制御の割り当てをアカウント全体にスコープ設定できます。 このスコープには、アカウント内のすべてのデータベースとコンテナーが含まれます。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    または、データ プレーン ロールの割り当てのスコープを特定のデータベースに設定することもできます。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    最後に、割り当てのスコープを 1 つのコンテナーに設定できます。最も詳細なスコープは次のとおりです。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    多くの場合、完全修飾スコープではなく相対スコープを使用できます。 たとえば、この相対スコープを使用して、Azure CLI コマンドからデータ プレーンロールベースのアクセス制御アクセス許可を特定のデータベースとコンテナーに付与できます。

    /dbs/<database-name>/colls/<container-name>
    

    また、次の相対スコープを使用して、すべてのデータベースとコンテナーへのユニバーサル アクセスを許可することもできます。

    /
    
  4. data-plane-role-definition.bicepparam という名前の新しい Bicep パラメーター ファイルを作成します。 このパラメーター ファイルで、既存の Azure Cosmos DB for NoSQL アカウントの名前を accountName パラメーターに割り当てます。

    using './data-plane-role-definition.bicep'
    
    param accountName = '<name-of-existing-nosql-account>'
    
  5. az deployment group createを使用して Bicep テンプレートをデプロイします。

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters data-plane-role-definition.bicepparam \
        --template-file data-plane-role-definition.bicep
    
  6. ロールの割り当てを定義する新しい Bicep ファイルを作成します。 ファイルに data-plane-role-assignment.bicep という名前を付けます

    metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.'
    
    @description('Name of the Azure Cosmos DB for NoSQL account.')
    param accountName string
    
    @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 = deployer().objectId
    
    resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = {
      name: accountName
    }
    
    resource assignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-05-15' = {
      name: guid(roleDefinitionId, identityId, account.id)
      parent: account
      properties: {
        principalId: identityId
        roleDefinitionId: roleDefinitionId
        scope: account.id
      }
    }
    
    output assignmentId string = assignment.id
    
  7. data-plane-role-assignment.bicepparam という名前の新しい Bicep パラメーター ファイルを作成します。 このパラメーター ファイルで、既存の Azure Cosmos DB for NoSQL アカウントの名前を accountName パラメーターに割り当て、以前に記録したロール定義識別子を roleDefinitionId パラメーターに割り当て、id の一意識別子を identityId パラメーターに割り当てます。

    using './data-plane-role-assignment.bicep'
    
    param accountName = '<name-of-existing-nosql-account>'
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    

    ヒント

    データ プレーンのロールベースのアクセス制御を独自の ID に付与しようとしている場合は、 identityId パラメーターを省略できます。 その後、Bicep テンプレートは deployer().objectId を使用して、テンプレートをデプロイしたプリンシパルの ID を取得します。 詳細については、deployerを参照してください。

  8. az deployment group createを使用して Bicep テンプレートをデプロイします。

    az deployment group create \
        --resource-group "<name-of-existing-resource-group>" \
        --parameters data-plane-role-assignment.bicepparam \
        --template-file data-plane-role-assignment.bicep
    
  9. 使用する他の ID からアカウントへのアクセスを許可するには、次の手順を繰り返します。

    ヒント

    必要な数の ID に対して、これらの手順を繰り返すことができます。 通常、これらの手順は少なくとも繰り返され、開発者は自分の人間の ID を使用してアカウントにアクセスできます。 これらの手順を繰り返して、アプリケーションがマネージド ID を使用してリソースにアクセスできるようにすることもできます。

  1. Get-AzCosmosDBSqlRoleDefinitionを使用して、Azure Cosmos DB for NoSQL アカウントに関連付けられているすべてのロール定義を一覧表示します。

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleDefinition @parameters
    
  2. 出力を確認し、 Cosmos DB 組み込みデータ共同作成者という名前のロール定義を見つけます。 出力の Id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    Id                         : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
    RoleName                   : Cosmos DB Built-in Data Contributor
    Type                       : BuiltInRole
    AssignableScopes           : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccountsmsdocs-identity-example-nosql}
    Permissions.DataActions    : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*}
    Permissions.NotDataActions : 
    

    この例では、 Id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002されます。 この例では架空のデータを使用します。識別子はこの例とは異なります。 ただし、識別子 (00000000-0000-0000-0000-000000000002) は、アカウント内のすべてのロール定義で一意です。

  3. New-AzCosmosDBSqlRoleDefinitionを使用して新しいロール定義を作成します。 DataAction パラメーターには、次に示すデータ アクションを指定します。

    Description
    Microsoft.DocumentDB/databaseAccounts/readMetadata アカウント レベルのメタデータを読み取ることができます
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/* コンテナー レベルのデータ操作を実行できます
    Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/* コンテナーを含む項目に対して任意の操作を実行できます
    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
        RoleName = "Azure Cosmos DB for NoSQL Data Plane Owner"
        Type = "CustomRole"
        AssignableScope = @(
            "/"
        )
        DataAction = @(
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
        )
    }
    New-AzCosmosDBSqlRoleDefinition @parameters
    

    ヒント

    Azure Cosmos DB のロールベースのアクセス制御のネイティブ実装では、 スコープ とは、アクセス許可を適用するアカウント内のリソースの粒度を指します。 最上位レベルでは、最大のスコープを使用して、データ プレーンのロールベースのアクセス制御の割り当てをアカウント全体にスコープ設定できます。 このスコープには、アカウント内のすべてのデータベースとコンテナーが含まれます。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
    

    または、データ プレーン ロールの割り当てのスコープを特定のデータベースに設定することもできます。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>
    

    最後に、割り当てのスコープを 1 つのコンテナーに設定できます。最も詳細なスコープは次のとおりです。

    /subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/<database-name>/colls/<container-name>
    

    多くの場合、完全修飾スコープではなく相対スコープを使用できます。 たとえば、この相対スコープを使用して、Azure CLI コマンドからデータ プレーンロールベースのアクセス制御アクセス許可を特定のデータベースとコンテナーに付与できます。

    /dbs/<database-name>/colls/<container-name>
    

    また、次の相対スコープを使用して、すべてのデータベースとコンテナーへのユニバーサル アクセスを許可することもできます。

    /
    
  4. Get-AzCosmosDBSqlRoleDefinitionを使用して、Azure Cosmos DB for NoSQL アカウントに関連付けられているすべてのロール定義を一覧表示します。

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleDefinition @parameters    
    
  5. 前のコマンドからの出力を確認します。 作成した Azure Cosmos DB for NOSQL データ プレーン所有者という名前のロール定義を見つけてください。 出力の Id プロパティには、ロールの定義の一意識別子が含まれます。 このガイドの後半の割り当て手順で使用する必要があるため、この値を記録します。

    Id                         : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-cccccccccccc
    RoleName                   : Azure Cosmos DB for NoSQL Data Plane Owner
    Type                       : CustomRole
    AssignableScopes           : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql}
    Permissions.DataActions    : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*}
    Permissions.NotDataActions :
    

    この例では、 Id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/bbbbbbbb-1111-2222-3333-ccccccccccccされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。

  6. Get-AzCosmosDBAccountを使用して、現在のアカウントのメタデータを取得します。

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        Name = "<name-of-existing-nosql-account>"
    }    
    Get-AzCosmosDBAccount @parameters | Select -Property Id
    
  7. 前のコマンドの出力を確認します。 次の手順で使用する必要があるため、このアカウントの Id プロパティの値を記録します。

    Id
    --    
    /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
    

    この例では、 Id 値が /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosqlされます。 この例では架空のデータを使用します。識別子はこの例とは異なります。

  8. New-AzCosmosDBSqlRoleAssignmentを使用して新しいロールを割り当てます。 先ほどメモしたロールの定義識別子を RoleDefinitionId パラメーターに使用し、自分の ID の一意識別子を PrincipalId パラメーターに使用します。 最後に、 Scope パラメーターにアカウントの識別子を使用します。

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
        RoleDefinitionId = "<id-of-new-role-definition>"
        PrincipalId = "<id-of-existing-identity>"
        Scope = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
    }    
    New-AzCosmosDBSqlRoleAssignment @parameters
    

    ヒント

    データ プレーンのロールベースのアクセス制御を自分の ID に付与しようとしている場合は、次のコマンドを使用して ID を取得できます。

    Get-AzADUser -SignedIn | Format-List `
        -Property Id, DisplayName, Mail, UserPrincipalName
    

    詳細については、Get-AzADUserを参照してください。

  9. Get-AzCosmosDBSqlRoleAssignmentを使用して、Azure Cosmos DB for NoSQL アカウントのすべてのロールの割り当てを一覧表示します。 出力を確認して、ロールの割り当てが作成されたことを確認します。

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        AccountName = "<name-of-existing-nosql-account>"
    }
    Get-AzCosmosDBSqlRoleAssignment @parameters
    

Warnung

Azure portal では、データ プレーンのロールベースのアクセス制御の管理はサポートされていません。

コードでデータ プレーンロールベースのアクセスを検証する

アプリケーション コードと Azure SDK を使用してアクセス権を正しく付与したことを検証します。

using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;

string endpoint = "<account-endpoint>";

TokenCredential credential = new DefaultAzureCredential();

CosmosClient client = new(endpoint, credential);

Container container = client.GetContainer("<database-name>", "<container-name>");

await container.ReadItemAsync<dynamic>("<item-id>", new PartitionKey("<partition-key>"));
const { CosmosClient } = require('@azure/cosmos');
const { DefaultAzureCredential } = require('@azure/identity');

const endpoint = '<account-endpoint>';

const credential = new DefaultAzureCredential();

const client = new CosmosClient({ endpoint, aadCredentials:credential});

const container = client.database('<database-name>').container('<container-name>');

await container.item('<item-id>', '<partition-key>').read<String>();
import { Container, CosmosClient, CosmosClientOptions } from '@azure/cosmos'
import { TokenCredential, DefaultAzureCredential } from '@azure/identity'

let endpoint: string = '<account-endpoint>';

let credential: TokenCredential = new DefaultAzureCredential();

let options: CosmosClientOptions = {
  endpoint: endpoint,
  aadCredentials: credential
};

const client: CosmosClient = new CosmosClient(options);

const container: Container = client.database('<database-name>').container('<container-name>');

await container.item('<item-id>', '<partition-key>').read<String>();
from azure.cosmos import CosmosClient
from azure.identity import DefaultAzureCredential

endpoint = "<account-endpoint>"

credential = DefaultAzureCredential()

client = CosmosClient(endpoint, credential=credential)

container = client.get_database_client("<database-name>").get_container_client("<container-name>")

container.read_item(
    item="<item-id>",
    partition_key="<partition-key>",
)
import (
    "context"
    
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    "github.com/Azure/azure-sdk-for-go/sdk/data/azcosmos"
)

const endpoint = "<account-endpoint>"

func main() {
    credential, _ := azidentity.NewDefaultAzureCredential(nil)
    client, _ := azcosmos.NewClient(endpoint, credential, nil)
    
    database, _ := client.NewDatabase("<database-name>")
    container, _ := database.NewContainer("<container-name>")
    
    _, err := container.ReadItem(context.TODO(), azcosmos.NewPartitionKeyString("<partition-key>"), "<item-id>", nil)
    if err != nil {
        panic(err)
    }
}
import com.azure.cosmos.CosmosClient;
import com.azure.cosmos.CosmosClientBuilder;
import com.azure.cosmos.CosmosContainer;
import com.azure.cosmos.models.PartitionKey;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;

public class NoSQL {
    public static void main(String[] args) {   
        DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
            .build();
            
        CosmosClient client = new CosmosClientBuilder()
            .endpoint("<account-endpoint>")
            .credential(credential)
            .buildClient();

        CosmosContainer container = client.getDatabase("<database-name>").getContainer("<container-name>");

        container.readItem("<item-id>", new PartitionKey("<partition-key>"), Object.class);
    }
}
use azure_data_cosmos::CosmosClient;
use azure_identity::DefaultAzureCredential;

fn main() {
    let credential = DefaultAzureCredential::new().unwrap();
    let client = CosmosClient::new("<account-endpoint>", credential, None).unwrap();

    let container = client.database_client("<database-name>").container_client("<container-name>");

    let response = container.read_item("<partition-key>", "<item-id>", None);
    tokio::runtime::Runtime::new().unwrap().block_on(response).unwrap();
}