背景
Cosmos DB をアプリから操作する際に出たエラーの対処の記録
エラー自体はこんな感じ。
principal [principal id] does not have required RBAC permissions to perform action [Microsoft.DocumentDB/databaseAccounts/readMetadata] on
resource [/]. Learn more: https://aka.ms/cosmos-native-rbac.
単なる RBAC 化と思い、 Azure Portal でサクッと解決するかと思ったが、ちょっと違ったって話。
コントロールプレーンではなく、データプレーンでの RBAC を行う必要があった。
結論
cosmosdb 用の Role をアサインする。
- Read
az cosmosdb sql role assignment create -a <cosmosdbName> -g <resourceGroupName> -s "/" -p <principalId> -d 00000000-0000-0000-0000-000000000001
- Read/Write
az cosmosdb sql role assignment create -a <cosmosdbName> -g <resourceGroupName> -s "/" -p <principalId> -d 00000000-0000-0000-0000-000000000002
カスタムロールも作成して適用可能。
詳細
Resource から IAM で設定できるRBAC とは違って、Cosmos DB に対しての Role があるそうな。
現状は以下の理解
- 管理プレーン(コントロールプレーン)
- ARM によって制御されるリソース管理の仕組み
- データプレーン
- 各リソースにおける機能管理の仕組み
詳細は以下で。
で、cosmos DB については、以下
Blog での言及が以下
あとがき
RBAC をなんとなく理解したと思ってたら、control plane and data plane という未知なる扉が