Azure Cosmos DBのARM対応更新とは?DB/コンテナーコマンドの変更点と確認ポイント

Azure Cosmos DBの今回の更新で押さえるべき結論は、データベースとコンテナーを操作するCosmosDBShellの管理系コマンドが、Entra IDなどでARMコンテキストを利用できる場合はAzure Resource Manager(ARM)経由を優先するようになったことです。一方で、ドキュメントや実装上、アイテム単位の読み書き・更新・削除は引き続きCosmos DBのデータプレーンを使います。アカウントキー、エミュレーター、静的トークンでの接続は従来どおりデータプレーンへフォールバックするため、すぐに全利用者の運用が壊れる変更ではありません。(GitHub)

ただし、Entra ID、マネージドID、DefaultAzureCredential、MCP/Copilot系のワークフローでCosmosDBShellを使っている管理者・開発者は、「管理系操作には管理プレーン権限、アイテム操作にはデータプレーンRBACが必要になる」という権限設計を見直す必要があります。特にCI/CDや複数サブスクリプション環境では、--subscription と --resource-group を明示しないと、意図しない探索や権限不足で詰まる可能性があります。

目次

Azure Cosmos DBの今回の更新は何が変わったのか

2026年5月19日にAzure/CosmosDBShellのPull Request #75がマージされ、データベース・コンテナー管理コマンドでAzure Resource Managerを優先する変更が反映されました。PRの要約では、ARMコンテキストが利用できる場合はデータベースとコンテナーのコマンドをARM経由で実行し、利用できない場合はCosmos DBデータプレーンへフォールバックすると説明されています。(GitHub)

この変更を一言でいうと、CosmosDBShellが「管理する操作」と「データを扱う操作」をより明確に分けるようになったということです。

Azureでは、リソース作成や設定変更などの管理操作はコントロールプレーン、実データの読み書きはデータプレーンとして扱われます。Microsoft Learnでも、Azure Cosmos DBデータベースの作成はコントロールプレーン、データベース内のデータ照会はデータプレーンの例として説明されています。(Microsoft Learn)

今回のCosmosDBShell更新は、この考え方に沿って、データベースやコンテナーの管理操作をARMに寄せるものです。

操作の種類代表例変更後の主な実行経路
データベース管理mkdb、rmdb、データベース一覧ARMコンテキストがあればARM、なければデータプレーン
コンテナー管理mkcon、rmcon、settings <con>、indexpolicyARMコンテキストがあればARM、なければデータプレーン
ナビゲーション・補完ls、cd、入力補完、存在確認DB/コンテナー対象はARM優先
アイテム操作rm、replace、コンテナー内のアイテム一覧データプレーン
アカウント概要設定settingsデータプレーン

PRのルーティング表でも、ls、cd、mkdb、mkcon、rmdb、rmcon、settings <con>、indexpolicyなどはARM優先になり、rm、replace、アイテムのlsなどはデータプレーンに残ると整理されています。(GitHub)

影響を受ける利用者と、影響が小さい利用者

今回の更新は、Azure Cosmos DBそのもののデータモデルやAPIを突然変えるものではありません。主に影響するのは、CosmosDBShellを使ってデータベースやコンテナーを作成・削除・確認している人です。

影響が大きいケース

次のような環境では、確認をおすすめします。

利用パターン確認すべきポイント
Entra IDでCosmosDBShellに接続しているARM経由の管理操作に必要なAzure RBAC権限があるか
マネージドIDを使っている管理プレーン権限とデータプレーン権限を分けて付与しているか
DefaultAzureCredentialで接続している実行環境でどのIDが選ばれているか
CI/CDでCosmosDBShellを使う--connect-subscription、--connect-resource-groupを明示しているか
複数サブスクリプションを扱う自動探索ではなく明示的なARM座標指定にしているか
MCP/Copilot系のクライアントからCosmosDBShellを使うAIクライアントに渡る出力や削除操作の承認フローを確認しているか

CosmosDBShellの接続ドキュメントでは、ARMコンテキストが付与されるのは、Visual Studio Code Credential、Managed Identity、Interactive Browser、Device Code、DefaultAzureCredentialなどのEntra ID系フローとされています。アカウントキー、エミュレーター、COSMOSDB_SHELL_TOKENではARMコンテキストは付与されず、データプレーンへフォールバックします。(GitHub)

影響が比較的小さいケース

一方で、次の利用者は大きな影響を受けにくいと考えられます。

利用パターン理由
Cosmos DBエミュレーターだけで検証しているARMコンテキストを使わず、従来どおりデータプレーンへフォールバックする
アカウントキー接続のみを使っているARM優先にはならず、既存のデータプレーン権限で動く
アイテムのクエリや更新だけを行っているアイテム操作は引き続きデータプレーン
Azure CLIやBicepなど別手段でDB/コンテナーを管理しているCosmosDBShellの管理系コマンドを使わなければ直接影響は限定的

ただし、「影響が小さい」は「確認不要」という意味ではありません。特に本番環境でキー認証を避け、Entra IDとRBAC中心の設計にしている場合は、権限不足やフォールバック時の挙動を事前にテストしておくべきです。

ARM優先になるコマンドと、データプレーンのままのコマンド

今回の更新で混乱しやすいのは、「CosmosDBShell全体がARMに切り替わる」と誤解してしまう点です。実際には、データベース・コンテナーというリソース管理に近い操作だけがARM優先になります。

ARM優先になる主な管理系コマンド

CosmosDBShellのコマンドドキュメントでは、データベースとコンテナー管理コマンドは、ARMコンテキストがある場合にAzure Resource Managerを優先すると説明されています。Entra ID接続では、必要に応じて--subscriptionと--resource-groupを指定して明示的に対象アカウントを決められます。(GitHub)

代表的なコマンドは次のとおりです。

コマンド用途確認ポイント
lsデータベース・コンテナー一覧アイテム一覧とは実行経路が異なる場合がある
cdデータベース・コンテナーへの移動存在確認でARMが使われる可能性がある
mkdbデータベース作成管理プレーンの作成権限が必要
mkconコンテナー作成パーティションキー指定と管理権限を確認
rmdbデータベース削除削除権限と承認フローが重要
rmconコンテナー削除本番環境では誤削除防止策が必須
settings <con>コンテナー設定確認ARM経由とデータプレーン経由で取得できる項目差に注意
indexpolicyインデックスポリシー確認・更新設定変更として扱い、変更管理に含める

データプレーンのままの主な操作

アイテムに対する操作は、引き続きCosmos DBデータプレーンを使います。

操作用途実務上の注意点
querySQLクエリ実行RU消費や取得件数を確認
printIDとパーティションキーでアイテム取得パーティションキーの型に注意
mkitemアイテム作成・Upsert本番データへの誤投入を防ぐ
replaceアイテム置換ETagや階層型パーティションキーに注意
patch部分更新配列操作や数値加算の対象を確認
rmアイテム削除パターン指定による削除範囲を必ず確認

PRの要約でも、アイテムレベルのコマンドはデータプレーンのままと明記されています。(GitHub)

なぜARMを使うようになったのか

ARMを優先するメリットは、単に「新しい経路に変わった」ことではありません。Azureの管理プレーンとして扱うことで、RBAC、Activity Log、Azure Policy、管理ロックなど、Azureリソース管理の文脈に乗せやすくなります。Microsoft Learnでは、ARMがコントロールプレーン要求を処理し、Azure RBAC、Azure Policy、管理ロック、Activity Logsなどの管理機能を適用できると説明されています。(Microsoft Learn)

Azure Cosmos DBのデータベースやコンテナーは、アプリケーションの実データを保持する一方で、作成・削除・設定変更はインフラ変更に近い操作です。これらをARM経由に寄せることで、次のような運用上の利点があります。

権限を「管理」と「データアクセス」に分けやすい

たとえば、開発者にはコンテナー内のアイテム読み書きだけを許可し、データベースやコンテナーの削除は運用管理者だけに許可する、といった設計がしやすくなります。

逆に、これまでアカウントキーで何でもできる前提の運用をしていた場合は、権限設計の粗さが表面化します。これは不便に見えますが、本番環境では望ましい方向です。

監査しやすくなる

データベース作成、コンテナー削除、インデックスポリシー変更のような操作は、障害やコスト増に直結します。ARM経由に寄せることで、Azure側の管理ログや権限設計と整合しやすくなります。

Entra IDベースの運用と相性がよい

Microsoft LearnのCosmos DB RBACドキュメントでは、本番やセキュリティ重視のワークロードではキーベース認証を無効化し、Entra IDとデータプレーンRBACを使うことが推奨されています。CosmosDBShellの接続ドキュメントでも同様に、Azure AD/Entra IDとRBACを使う方向が説明されています。(GitHub)

管理者が確認すべき設定

今回の更新後に管理者が見るべきポイントは、コマンドの成否だけではありません。誰が、どのIDで、どの経路から、どのリソースを管理できるのかを確認することが重要です。

管理プレーン権限を確認する

ARM経由でデータベースやコンテナーを扱う場合、対象IDには管理プレーン権限が必要です。CosmosDBShellの接続ドキュメントでは、ARM使用時には、アイテム操作向けのデータプレーンRBACに加えて、データベース・コンテナーリソース向けのAzure管理プレーン権限が必要になると説明されています。(GitHub)

実務では、次のように分けて確認すると整理しやすくなります。

確認項目見るべき内容
実行IDユーザー、サービスプリンシパル、マネージドIDのどれか
管理プレーン権限Cosmos DBアカウント、データベース、コンテナー管理に必要なAzure RBACがあるか
データプレーン権限アイテム読み書きに必要なCosmos DBネイティブRBACがあるか
スコープサブスクリプション全体ではなく、必要なリソースグループやアカウントに絞っているか
削除操作rmdb、rmconを誰が実行できるか

最小権限を重視するなら、「アプリケーション実行IDにコンテナー削除権限を持たせない」「CI/CD用IDだけに特定環境の作成・更新権限を付ける」など、役割ごとに分けるのが現実的です。

データプレーンRBACを確認する

アイテム操作はデータプレーンのままなので、ARM権限だけでは不十分です。

たとえば、mkconでコンテナーを作成できても、queryでアイテムを読めない場合があります。逆に、アイテムを読めても、mkdbやrmconが失敗する場合もあります。

Cosmos DBのネイティブデータプレーンRBACでは、スコープをアカウント全体、特定データベース、特定コンテナーなどに設定できます。Microsoft Learnでは、相対スコープとして/dbs/<database-name>/colls/<container-name>や、全データベース・コンテナーを示す/の例が示されています。(Microsoft Learn)

複数サブスクリプション環境ではARM座標を明示する

CosmosDBShellは、ARMコンテキストがある場合、接続中のデータプレーンエンドポイントとアクセス可能なサブスクリプションを照合してARMアカウントを探索できます。ただし、CI/CDや複数サブスクリプション環境では、対象を明示する方が安全です。ドキュメントでは、--subscriptionと--resource-groupを指定する例が掲載されています。(GitHub)

例:

connect https://myaccount.documents.azure.com:443/ \
  --tenant=<tenant-id> \
  --subscription=<subscription-id> \
  --resource-group=<resource-group>

起動時に接続する場合は、次のように指定できます。

cosmosdbshell \
  --connect https://myaccount.documents.azure.com:443/ \
  --connect-tenant=<tenant-id> \
  --connect-subscription=<subscription-id> \
  --connect-resource-group=<resource-group>

本番環境では、サブスクリプションやリソースグループを省略して「自動で見つかるはず」という運用にしない方が安全です。探索対象が広がると、権限不足、曖昧な一致、意図しないアカウント選択の原因になります。

開発者が確認すべき移行・展開上の注意点

開発者がまず確認すべきなのは、日常的に使っているCosmosDBShellコマンドが、管理系なのか、アイテム操作なのかです。失敗時の原因も、今後は「Cosmos DBに接続できない」だけではなく、「ARM側の権限がない」「データプレーンRBACがない」「ARMコンテキストが付いていない」などに分かれます。

接続方式ごとの挙動を理解する

接続方式ARMコンテキスト管理系コマンドの挙動
Entra IDの対話ログイン付与されるARM優先
Managed Identity付与されるARM優先
DefaultAzureCredential付与されるARM優先
Visual Studio Code Credential付与されるARM優先
AccountKey付与されないデータプレーンへフォールバック
COSMOSDB_SHELL_TOKEN付与されないデータプレーンへフォールバック
Emulator付与されないデータプレーンへフォールバック

この違いを知らないと、ローカルではアカウントキーで成功したのに、CI/CDのマネージドIDでは権限不足で失敗する、といった問題が起きます。

エラーの切り分け方

管理系コマンドが失敗した場合は、次の順に確認すると効率的です。

症状主な原因確認すること
mkdbやmkconが失敗する管理プレーン権限不足Azure RBACでCosmos DB管理権限があるか
queryやprintが失敗するデータプレーンRBAC不足Cosmos DBネイティブRBACのスコープとDataActions
アカウント探索に時間がかかる複数サブスクリプション探索--subscription、--resource-groupを明示
キー無効化環境で管理コマンドが失敗する非Entra接続でARMに届いていないEntra ID接続に切り替える
MCP経由の操作が危険に見えるAIクライアントが削除系コマンドを実行可能削除操作の手動承認、権限の縮小

ローカル検証と本番運用を同じ前提にしない

ローカルではエミュレーターやアカウントキー接続を使うことがあります。この場合、管理系コマンドはデータプレーンへフォールバックするため、ARM優先の挙動を十分に検証できません。

本番に近い検証をするなら、少なくともステージング環境で次を確認してください。

connect https://myaccount.documents.azure.com:443/ \
  --tenant=<tenant-id> \
  --subscription=<subscription-id> \
  --resource-group=<resource-group>

ls
mkdb TestDb
mkcon TestContainer /tenantId
settings TestContainer
rmcon TestContainer
rmdb TestDb

削除コマンドを試す場合は、必ず検証用リソースで実行してください。rmdbやrmconは、失敗すれば権限不足を見つけられますが、成功すれば実際に削除されます。

キー認証を無効化している環境で注意すべきこと

セキュリティ重視の環境では、キーベース認証を無効化し、Entra IDとRBACでCosmos DBを使う構成が増えています。この場合、今回の更新は特に重要です。

CosmosDBShellの接続ドキュメントでは、アカウントキー、静的トークン、エミュレーター接続ではARMコンテキストが付かないため、mkdb、mkcon、rmdb、rmcon、indexpolicy、コンテナーsettingsなどのリソースコマンドはデータプレーンへフォールバックすると説明されています。さらに、実Azure Cosmos DBアカウントでネイティブデータプレーンRBACが強制され、キー認証やコントロールプレーン書き込みが無効化されている場合、それらのコマンドはサービス側で拒否される可能性があるとされています。(GitHub)

つまり、次のような運用は避けるべきです。

# キー無効化・RBAC強制の本番アカウントで、静的トークンやキー前提の操作を続ける
connect "AccountEndpoint=https://myaccount.documents.azure.com:443/;AccountKey=..."
mkcon Orders /tenantId

推奨される方向は、Entra IDベースで接続し、必要に応じてARM座標を明示することです。

connect https://myaccount.documents.azure.com:443/ \
  --tenant=<tenant-id> \
  --subscription=<subscription-id> \
  --resource-group=<resource-group>

このとき、実行IDには次の2種類の権限が必要です。

権限必要な場面
Azure管理プレーン権限DB/コンテナーの作成、削除、設定変更
Cosmos DBデータプレーンRBACアイテムの読み取り、作成、更新、削除、クエリ

「ARM権限を付けたからクエリも通る」「データプレーンContributorを付けたからコンテナー作成も通る」と考えると、切り分けで時間を失います。

MCP/Copilot連携での注意点

今回の更新は、CosmosDBShellをMCPサーバーとして使う場合にも関係します。MCPドキュメントでは、MCPサーバーはローカルでユーザー権限により動作し、接続クライアントはデータベース・コンテナーメタデータの読み取り、ドキュメントの取得、リソースの作成・更新・削除などを実行できると説明されています。また、ARMコンテキストが付いているEntra ID接続では、データベース・コンテナーのリソース操作がARM経由で実行されます。(GitHub)

ここで重要なのは、AIやCopilot系のクライアントが「便利な操作窓口」になるだけでなく、削除や設定変更を実行できる操作面にもなることです。

MCP/Copilot連携を使う場合は、次の対策を実施してください。

リスク対策
プロンプト経由で削除操作が実行されるrmdb、rmconなどは手動承認を必須にする
出力に機密データが含まれるクエリ結果やファイル内容を外部LLMに送る前提で扱う
過剰権限のIDでMCPを起動する読み取り専用、検証用、管理用でIDを分ける
ポート公開による不正操作ローカルホストに限定し、不要時はMCPを無効化
複数サブスクリプションで対象が曖昧--connect-subscriptionと--connect-resource-groupを明示

MCPドキュメントでも、外部LLMへコマンド出力やクエリ結果が送信される可能性、最小権限RBAC、削除操作の承認、不要時のMCP無効化などがベストプラクティスとして示されています。(GitHub)

展開前チェックリスト

今回の更新を受けて、管理者と開発者は次の順番で確認すると実務に落とし込みやすくなります。

確認項目実施内容優先度
CosmosDBShellの利用箇所ローカル、CI/CD、MCP、運用手順書で使っているか洗い出す高
接続方式Entra ID、Managed Identity、DefaultAzureCredential、AccountKey、Token、Emulatorを分類高
管理系コマンドmkdb、mkcon、rmdb、rmcon、settings、indexpolicyの利用有無を確認高
ARM座標CI/CDと複数サブスクリプション環境で明示指定する高
Azure RBAC管理プレーン権限が過不足なく付いているか確認高
データプレーンRBACアイテム操作に必要なロールとスコープを確認高
キー無効化環境非Entra接続で管理系コマンドを使っていないか確認中
MCP/Copilot削除操作の承認、出力データの取り扱い、起動IDの権限を確認中
監査ログ変更操作の記録とレビュー手順を確認中
ロールバック手順変更前の設定、権限、手順書を保存中

特に本番運用では、CosmosDBShellのバージョン更新やドキュメント更新だけを見て終わらせず、実際の接続方式ごとにコマンドを実行して確認することが重要です。

よくある誤解と失敗しやすいポイント

「ARMになったのでデータ操作もAzure RBACだけでよい」は誤解

今回ARM優先になったのは、データベースやコンテナーの管理系操作です。アイテムの読み書きやクエリはデータプレーンのままです。

そのため、Azure管理プレーンのロールだけを付与しても、queryやprintが成功するとは限りません。データプレーンRBACを別途確認してください。

「アカウントキーなら今までどおり安全」は誤解

アカウントキー接続は従来どおり動きやすい一方で、権限を細かく分けにくい運用です。セキュリティ重視の本番環境では、キー無効化とEntra IDベースのRBACを検討する価値があります。

ただし、既存スクリプトを急にEntra IDへ切り替えると、管理プレーン権限とデータプレーン権限の不足が顕在化します。段階的に検証しましょう。

「CI/CDでは自動探索で十分」は危険

複数サブスクリプションを扱う組織では、自動探索に任せるとトラブルの原因になります。CI/CDでは、対象のsubscription、resource group、アカウントエンドポイントを明示し、実行IDの権限を最小限に絞る方が安全です。

「MCP/Copilotは読み取り補助だけ」は危険

MCP経由のCosmosDBShellは、設定次第で作成・更新・削除も実行できます。AIアシスタントに自然文で指示できることは便利ですが、権限が強すぎると誤操作の影響も大きくなります。

本番アカウントでは、MCP用IDを分離し、削除系コマンドは承認なしに実行できない運用にしてください。

今回の更新を受けて次にやるべきこと

Azure Cosmos DBの今回のCosmosDBShell更新は、単なるコマンド実装の変更ではなく、Cosmos DB運用を管理プレーンとデータプレーンに分けて整理するきっかけになります。

まず、CosmosDBShellをどこで使っているかを洗い出してください。次に、接続方式ごとにARMコンテキストが付くかを確認し、管理系コマンドに必要なAzure RBACと、アイテム操作に必要なCosmos DBデータプレーンRBACを分けて点検します。

特に優先すべき対応は次の3つです。

  • CI/CDや複数サブスクリプション環境では、--subscriptionと--resource-groupを明示する
  • Entra ID接続では、管理プレーン権限とデータプレーンRBACを両方確認する
  • MCP/Copilot連携では、削除操作の承認と出力データの取り扱いを見直す

この3点を押さえておけば、今回のARM優先化を安全に取り込みつつ、Azure Cosmos DBの運用をより監査しやすく、最小権限に近い形へ改善できます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次