# Az - CosmosDB ポストエクスプロイテーション

{{#include ../../../banners/hacktricks-training.md}}

## CosmosDB ポストエクスプロイテーション
SQL Database に関する詳細情報は、以下を確認してください:

{{#ref}}
../az-services/az-cosmosDB.md
{{#endref}}

### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
この権限を持つことで、Azure Cosmos DB アカウントを作成または更新できます。これには、アカウントレベルの設定の変更、自動フェイルオーバーの有効化または無効化、ネットワークアクセス制御の管理、バックアップポリシーの設定、一貫性レベルの調整が含まれます。この権限を持つ攻撃者は、設定を変更してセキュリティ制御を弱体化させたり、可用性を妨害したり、ネットワークルールを変更してデータを抽出したりする可能性があります。
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```

```bash
az cosmosdb update \
--account-name <account_name> \
--resource-group <resource_group_name> \
--capabilities EnableMongoRoleBasedAccessControl
```
アカウントでマネージドアイデンティティを有効にすることもできます：
```bash
az cosmosdb identity assign \
--name <cosmosdb_account_name> \
--resource-group <resource_group_name>
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
この権限を持つことで、Azure Cosmos DB アカウントの SQL データベース内でコンテナ（コレクション）を作成または変更できます。コンテナはデータを保存するために使用され、その変更はデータベースの構造やアクセスパターンに影響を与える可能性があります。
```bash
# Create
az cosmosdb sql container create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--database-name <database_name> \
--name <container_name> \
--partition-key-path <partition_key_path>

#Update
az cosmosdb sql container update \
--account-name <account_name> \
--resource-group <resource_group_name> \
--database-name <database_name> \
--name <container_name> \
--ttl 3600
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/read`
この権限を使用すると、Azure Cosmos DB アカウント内で SQL データベースを作成または変更できます。これにより、データベースの構造を管理し、新しいデータベースをアカウントに追加できます。この権限はデータベースの作成を可能にしますが、不適切または無許可の使用は、不必要なリソース消費、コストの増加、または運用の非効率を引き起こす可能性があります。
```bash
az cosmosdb sql database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
### `Microsoft.DocumentDB/databaseAccounts/failoverPriorityChange/action`

この権限を使用すると、Azure Cosmos DB データベース アカウントのリージョンのフェイルオーバー優先度を変更できます。このアクションは、フェイルオーバー イベント中にリージョンがプライマリになる順序を決定します。この権限の不適切な使用は、データベースの高可用性を妨げたり、意図しない運用への影響を引き起こす可能性があります。
```bash
az cosmosdb failover-priority-change \
--name <database_account_name> \
--resource-group <resource_group_name> \
--failover-policies <region1=priority1> <region2=priority2>

```
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
この権限を使用すると、Azure Cosmos DB アカウントのプライマリキーまたはセカンダリキーを再生成できます。これは通常、古いキーを置き換えることでセキュリティを強化するために使用されますが、現在のキーに依存しているサービスやアプリケーションのアクセスを妨げる可能性があります。
```bash
az cosmosdb keys regenerate \
--name <account_name> \
--resource-group <resource_group_name> \
--key-kind <primary|secondary>

```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/userDefinedFunctions/read`

この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、操作に応じてサーバー側のロジックを実行することを可能にします。
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--database-name <sql_database_name> \
--container-name <container_name> \
--name <trigger_name> \
--body 'function trigger() { var context = getContext(); var request = context.getRequest(); request.setBody("Triggered operation!"); }' \
--type Pre \
--operation All
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内にストアドプロシージャを作成または変更できます。Cosmos DB のストアドプロシージャは、データを処理したり、データベース内で直接操作を実行するためのロジックをカプセル化するサーバーサイドの JavaScript 関数です。
```bash
az cosmosdb sql stored-procedure create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--database-name <sql_database_name> \
--container-name <container_name> \
--name <stored_procedure_name> \
--body 'function sample() { return "Hello, Cosmos!"; }'
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read`
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、挿入、更新、削除などの操作に応じてサーバー側のロジックを実行することを可能にします。
```bash
az cosmosdb sql trigger create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--database-name <sql_database_name> \
--container-name <container_name> \
--name <trigger_name> \
--body 'function trigger() { var context = getContext(); var request = context.getRequest(); request.setBody("Triggered operation!"); }' \
--type Pre \
--operation All
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/read` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/collections/write`
この権限を持つことで、Azure Cosmos DB アカウント内の MongoDB データベース内でコレクションを作成または変更できます。コレクションは、ドキュメントを保存し、データの構造とパーティショニングを定義するために使用されます。
```bash
az cosmosdb mongodb collection create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--database-name <mongodb_database_name> \
--name <collection_name>
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read`
この権限を使用すると、Azure Cosmos DB アカウント内に新しい MongoDB データベースを作成できます。これにより、コレクションやドキュメントを保存および管理するための新しいデータベースをプロビジョニングできます。
```bash
az cosmosdb mongodb database create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--name <database_name>
```
{{#include ../../../banners/hacktricks-training.md}}
