ロックを使用して Azure Cosmos DB リソースを保護する
適用対象: NoSQL
MongoDB
Cassandra
Gremlin
Table
管理者として、Azure Cosmos DB アカウント、データベース、またはコンテナーをロックする必要がある場合があります。 ロックにより、組織内の他のユーザーが重要なリソースを誤って削除または変更することを防ぎます。 ロック レベルは、CanNotDelete
または ReadOnly
に設定できます。
Level | 説明 |
---|---|
CanNotDelete |
許可されているユーザーはリソースの読み取りと変更はできますが、リソースを削除することはできません。 |
ReadOnly |
許可されているユーザーはリソースの読み取りはできますが、リソースを削除または更新することはできません。 このロックの適用は、すべての正規ユーザーのアクセス許可を、閲覧者ロールによって与えられるアクセス許可に制限することに似ています。 |
前提条件
- 既存の Azure Cosmos DB アカウント。
- Azure サブスクリプションをお持ちの場合は、新しいアカウントを作成します。
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- または、コミットする前に Azure Cosmos DB を無料で試すこともできます。
ロックが適用されるしくみ
親スコープでロックを適用すると、そのスコープ内のすべてのリソースは同じロックを継承します。 後で追加するリソースも、親からロックを継承します。 継承されるロックの中で最も制限の厳しいロックが優先されます。
Azure ロールベースのアクセス制御とは異なり、管理ロックを使用すると、すべてのユーザーとロールに対して制限を適用することができます。 Azure Cosmos DB のロールベースのアクセス制御の詳細については、「Azure Cosmos DB の Azure ロールベースのアクセス制御」を参照してください。
Resource Manager のロックは、管理ウィンドウで実行され、https://management.azure.com
に送信される操作で構成される操作のみに適用されます。 ロックは、リソースが独自の機能を実行する方法を制限しません。 リソースの変更は制限されますが、リソースの操作は制限されません。 たとえば、Azure Cosmos DB コンテナーに ReadOnly ロックを設定すると、コンテナーの削除または変更を実行できなくなります。 コンテナー内のデータの作成、更新、または削除は実行できます。 データのトランザクションは https://management.azure.com
に送信されないため、これらの操作は許可されます。
ロックの管理
リソース ロックは、先に disableKeyBasedMetadataWriteAccess
プロパティを有効にして Azure Cosmos DB アカウントをロックしておかない限り、アカウント キーを使用して Azure Cosmos DB にアクセスするユーザーによる変更に対しては機能しません。 SDK、Azure portal、またはサード パーティ製のツールを使ってリソースに変更を加える既存のアプリケーションが、このプロパティによって中断されないことを確認します。 このプロパティを有効にすると、アカウント キーを介して接続してリソースを変更するアプリケーションが中断されます。 これらの変更には、スループットの変更やインデックス ポリシーの更新などが含まれることがあります。詳細について、およびアプリケーションが引き続き機能することを確認するためのチェックリストについては、「Azure Cosmos DB SDK からの変更の防止」を参照してください
$RESOURCE_GROUP_NAME = "<resource-group>"
$ACCOUNT_NAME = "<account-name>"
$LOCK_NAME = "$ACCOUNT_NAME-lock"
最初に、アカウント キーを介して接続するものによる変更を防ぐために、アカウントを更新します。
$parameters = @{
Name = $ACCOUNT_NAME
ResourceGroupName = $RESOURCE_GROUP_NAME
DisableKeyBasedMetadataWriteAccess = true
}
Update-AzCosmosDBAccount @parameters
Azure Cosmos DB アカウント リソースとすべての子リソースの削除ロックを作成します。
$parameters = @{
ResourceGroupName = $RESOURCE_GROUP_NAME
ResourceName = $ACCOUNT_NAME
LockName = $LOCK_NAME
ApiVersion = "2020-04-01"
ResourceType = "Microsoft.DocumentDB/databaseAccounts"
LockLevel = "CanNotDelete"
}
New-AzResourceLock @parameters
Template
Azure Cosmos DB リソースにロックを適用する場合、Microsoft.Authorization/locks
Azure Resource Manager (ARM) リソースを使います。
{
"type": "Microsoft.Authorization/locks",
"apiVersion": "2017-04-01",
"name": "cosmoslock",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]"
],
"properties": {
"level": "CanNotDelete",
"notes": "Do not delete Azure Cosmos DB account."
},
"scope": "[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('accountName'))]"
}
サンプル
Azure Cosmos DB のリソース ロックを管理します。
- Cassandra API のキースペースとテーブル Azure CLI | Azure PowerShell
- Gremlin API のデータベースとグラフ Azure CLI | Azure PowerShell
- MongoDB API のデータベースとコレクション Azure CLI| Azure PowerShell
- NoSQL API のデータベースとコンテナー Azure CLI | Azure PowerShell
- Table API のテーブル Azure CLI | Azure PowerShell