クラスターリソースの権限と権限グループ
権限とは、クラスター、データベース、コレクションなど、特定の Zilliz Cloud リソースに対して特定の操作を実行するための許可を指します。権限はロールに割り当てられ、そのロールがユーザーに付与されることで、ユーザーがリソースに対して実行できる操作が定義されます。たとえば、collection_01 という名前のコレクションにデータを挿入する権限がこれに該当します。
権限グループは、個々の権限を組み合わせたものです。よく使用する権限をまとめた権限グループを作成すると、ロールの付与プロセスを簡素化できます。利便性のため、Zilliz Cloud では、コレクション、データベース、クラスターの各レベルに合計9つの組み込み権限グループを提供しています。
次の図は、権限と権限グループの付与プロセスの違いを示しています。

このトピックでは、Zilliz Cloud で利用可能な組み込み権限グループと権限について詳しく説明します。
権限グループ
組み込み権限グループ
Zilliz Cloud では、コレクション、データベース、クラスターの各レベルに合計9つの組み込み権限グループを提供しており、ロールの作成 時に直接付与できます。
これら3つのレベルの組み込み権限グループの間には、カスケード関係はありません。クラスターレベルで権限グループを設定しても、そのインスタンス下のすべてのデータベースおよびコレクションに権限が自動的に設定されるわけではありません。データベースレベルおよびコレクションレベルの権限は、手動で設定する必要があります。
コレクションレベルの権限グループ
-
CollectionReadOnly (COLL_RO): コレクションデータを読み取る権限が含まれます
-
CollectionReadWrite (COLL_RW): コレクションデータの読み取り・書き込みを行う権限が含まれます
-
CollectionAdmin (COLL_ADMIN): コレクションデータの読み取り・書き込み、およびコレクションの管理を行う権限が含まれます。
次の表は、コレクションレベルで提供される3つの組み込み権限グループに含まれる具体的な権限を示しています。
| 権限 | CollectionReadOnly | CollectionReadWrite | CollectionAdmin |
|---|---|---|---|
| Query | |||
| Search | |||
| IndexDetail | |||
| GetFlushState | |||
| GetLoadState | |||
| GetLoadingProgress | |||
| HasPartition | |||
| ShowPartitions | |||
| ListAliases | |||
| DescribeCollection | |||
| DescribeAlias | |||
| GetStatistics | |||
| CreateIndex | |||
| DropIndex | |||
| CreatePartition | |||
| DropPartition | |||
| Load | |||
| Release | |||
| Insert | |||
| Delete | |||
| Upsert | |||
| Import | |||
| Flush | |||
| Compaction | |||
| LoadBalance | |||
| CreateAlias | |||
| DropAlias | |||
| AddCollectionField |
データベースレベルの権限グループ
-
DatabaseReadOnly (DB_RO): データベースデータを読み取る権限が含まれます
-
DatabaseReadWrite (DB_RW): データベースデータの読み取り・書き込みを行う権限が含まれます
-
DatabaseAdmin (DB_Admin): データベースデータの読み取り・書き込み、およびデータベースの管理を行う権限が含まれます。
次の表は、データベースレベルで提供される3つの組み込み権限グループに含まれる具体的な権限を示しています。
| 権限 | DatabaseReadOnly | DatabaseReadWrite | DatabaseAdmin |
|---|---|---|---|
| ShowCollections | |||
| DescribeDatabase | |||
| CreateCollection | |||
| DropCollection | |||
| AlterDatabase |
クラスターレベルの権限グループ
-
ClusterReadOnly (Cluster_RO): インスタンスデータを読み取る権限が含まれます
-
ClusterReadWrite (Cluster_RW): インスタンスデータの読み取り・書き込みを行う権限が含まれます
-
ClusterAdmin (Cluster_Admin): インスタンスデータの読み取り・書き込み、およびインスタンスの管理を行う権限が含まれます。
次の表は、クラスターレベルで提供される3つの組み込み権限グループに含まれる具体的な権限を示しています。
| 権限 | ClusterReadOnly | ClusterReadWrite | ClusterAdmin |
|---|---|---|---|
| ListDatabases | |||
| RenameCollection | |||
| CreateOwnership | |||
| UpdateUser | |||
| DropOwnership | |||
| SelectOwnership | |||
| ManageOwnership | |||
| SelectUser | |||
| BackupRBAC | |||
| RestoreRBAC | |||
| CreateResourceGroup | |||
| DropResourceGroup | |||
| UpdateResourceGroups | |||
| DescribeResourceGroup | |||
| ListResourceGroups | |||
| TransferNode | |||
| TransferReplica | |||
| CreateDatabase | |||
| DropDatabase | |||
| FlushAll | |||
| CreatePrivilegeGroup | |||
| DropPrivilegeGroup | |||
| ListPrivilegeGroups | |||
| OperatePrivilegeGroup |
カスタム権限グループ | PRIVATE
組み込みの権限でニーズを満たせない場合は、SDK を使用してカスタム権限グループを作成し、指定した権限をその権限グループに追加できます。
これは Private Preview の機能です。この機能をリクエストするには、サポートチケットを作成 して、有効化を依頼してください。
カスタム権限グループを作成する
次の例では、privilege_group_1 という名前の権限グループを作成する方法を示します。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.create_privilege_group(group_name='privilege_group_1')
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus/client/v3/milvusclient"
err = client.CreatePrivilegeGroup(ctx, milvusclient.NewCreatePrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
client
.create_privilege_group(
CreatePrivilegeGroupRequest::builder()
.group_name("privilege_group_1")
.build()?,
)
.await?;
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto status = client->CreatePrivilegeGroup(milvus::CreatePrivilegeGroupRequest().WithGroupName("privilege_group_1"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.createPrivilegeGroup({
group_name: 'privilege_group_1',
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'
カスタム権限グループを作成したら、その権限グループに権限を追加できます。
カスタム権限グループに権限を追加する
次の例では、作成したばかりの権限グループ privilege_group_1 に権限 PrivilegeBackupRBAC および PrivilegeRestoreRBAC を追加する方法を示します。Zilliz Cloud で利用可能なすべての権限の詳細については、All privileges を参照してください。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.add_privileges_to_group(group_name='privilege_group_1', privileges=['Query', 'Search'])
import io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
import java.util.Arrays;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
import "github.com/milvus-io/milvus/client/v3/milvusclient"
privileges := []string{"Query", "Search"}
err = client.AddPrivilegesToGroup(ctx, milvusclient.NewAddPrivilegesToGroupOption("privilege_group_1", privileges...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
client
.add_privileges_to_group(
AddPrivilegesToGroupRequest::builder()
.group_name("privilege_group_1")
.privileges(["Query", "Search"])
.build()?,
)
.await?;
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto status = client->AddPrivilegesToGroup(milvus::AddPrivilegesToGroupRequest()
.WithGroupName("privilege_group_1")
.WithPrivileges({"Query", "Search"}));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.addPrivilegesToGroup({
group_name: "privilege_group_1",
privileges: ["Query", "Search"],
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/add_privileges_to_group" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Query", "Search"]
}'
権限グループに権限を追加したら、その権限グループをロールに付与できます。詳細については、Manage クラスター Roles (SDK) を参照してください。
カスタム権限グループから権限を削除する
次の例では、権限グループ privilege_group_1 から権限 PrivilegeRestoreRBAC を削除する方法を示します。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.remove_privileges_from_group(group_name='privilege_group_1', privileges=['Search'])
import io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
import java.util.Collections;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
import "github.com/milvus-io/milvus/client/v3/milvusclient"
err = client.RemovePrivilegesFromGroup(ctx, milvusclient.NewRemovePrivilegesFromGroupOption("privilege_group_1", []string{"Search"}...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
client
.remove_privileges_from_group(
RemovePrivilegesFromGroupRequest::builder()
.group_name("privilege_group_1")
.privileges(["Search"])
.build()?,
)
.await?;
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto status = client->RemovePrivilegesFromGroup(milvus::RemovePrivilegesFromGroupRequest()
.WithGroupName("privilege_group_1")
.WithPrivileges({"Search"}));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.removePrivilegesFromGroup({
group_name: "privilege_group_1",
privileges: ["Search"],
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/remove_privileges_from_group" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Search"]
}'
権限グループを一覧表示する
次の例では、既存のすべての権限グループを一覧表示する方法を示します。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.list_privilege_groups()
import io.milvus.v2.service.rbac.PrivilegeGroup;
import io.milvus.v2.service.rbac.request.ListPrivilegeGroupsReq;
import io.milvus.v2.service.rbac.response.ListPrivilegeGroupsResp;
import java.util.List;
ListPrivilegeGroupsResp resp = client.listPrivilegeGroups(ListPrivilegeGroupsReq.builder()
.build());
List<PrivilegeGroup> groups = resp.getPrivilegeGroups();
import "github.com/milvus-io/milvus/client/v3/milvusclient"
groups, err := client.ListPrivilegeGroups(ctx, milvusclient.NewListPrivilegeGroupsOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
for _, group := range groups {
fmt.Println(group.GroupName, group.Privileges)
}
use milvus::v2::prelude::*;
let resp = client
.list_privilege_groups(ListPrivilegeGroupsRequest::builder().build()?)
.await?;
for group in resp.groups() {
println!("{}: {:?}", group.get_group_name(), group.get_privileges());
}
#include <iostream>
#include "milvus/MilvusClientV2.h"
milvus::ListPrivilegeGroupsResponse resp;
auto status = client->ListPrivilegeGroups(milvus::ListPrivilegeGroupsRequest(), resp);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.listPrivilegeGroups();
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{}'
出力例を次に示します。
PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>
カスタム権限グループを削除する
次の例では、権限グループ privilege_group_1 を削除する方法を示します。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.drop_privilege_group(group_name='privilege_group_1')
import io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus/client/v3/milvusclient"
err = client.DropPrivilegeGroup(ctx, milvusclient.NewDropPrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2::prelude::*;
client
.drop_privilege_group(
DropPrivilegeGroupRequest::builder()
.group_name("privilege_group_1")
.build()?,
)
.await?;
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto status = client->DropPrivilegeGroup(milvus::DropPrivilegeGroupRequest().WithGroupName("privilege_group_1"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.dropPrivilegeGroup({group_name: 'privilege_group_1'});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'
すべての権限
次に、Zilliz Cloud で利用可能なすべての権限を示します。
以下に示す権限を使用して独自の権限グループを作成する場合、または権限を付与したカスタムロールを作成する場合は、お問い合わせください。
データベースの権限
| 権限 | 説明 |
|---|---|
| ListDatabases | 現在のインスタンス内のすべてのデータベースを表示します。 |
| DescribeDatabase | データベースの詳細を表示します。 |
| CreateDatabase | データベースを作成します。 |
| DropDatabase | データベースを削除します。 |
| AlterDatabase | データベースのプロパティを変更します。 |
コレクションの権限
| 権限 | 説明 |
|---|---|
| GetFlushState | コレクションのフラッシュ操作のステータスを確認します。 |
| GetLoadState | コレクションのロードステータスを確認します。 |
| GetLoadingProgress | コレクションのロード進捗を確認します。 |
| ShowCollections | コレクション権限を持つすべてのコレクションを表示します。 |
| ListAliases | コレクションのすべてのエイリアスを表示します。 |
| DescribeCollection | コレクションの詳細を表示します。 |
| DescribeAlias | エイリアスの詳細を表示します。 |
| GetStatistics | コレクションの統計情報(コレクション内のエンティティ数など)を取得します。 |
| CreateCollection | コレクションを作成します。 |
| DropCollection | コレクションを削除します。 |
| Load | コレクションをロードします。 |
| Release | コレクションをリリースします。 |
| Flush | コレクション内のすべてのエンティティをシールドセグメントに永続化します。フラッシュ操作後に挿入されたエンティティは、新しいセグメントに格納されます。 |
| Compaction | 手動で Compaction をトリガーします。 |
| RenameCollection | コレクションの名前を変更します。 |
| CreateAlias | コレクションのエイリアスを作成します。 |
| DropAlias | コレクションのエイリアスを削除します。 |
| FlushAll | データベース内のすべてのコレクションをフラッシュします。 |
| AddCollectionField | 既存のコレクションにフィールドを追加します。 |
パーティションの権限
| 権限 | 説明 |
|---|---|
| HasPartition | パーティションが存在するかどうかを確認します。 |
| ShowPartitions | コレクション内のすべてのパーティションを表示します。 |
| CreatePartition | パーティションを作成します。 |
| DropPartition | パーティションを削除します。 |
インデックスの権限
| 権限 | 説明 |
|---|---|
| IndexDetail | インデックスの詳細を表示します。 |
| CreateIndex | インデックスを作成します。 |
| DropIndex | インデックスを削除します。 |
リソース管理の権限
| 権限 | 説明 |
|---|---|
| LoadBalance | ロードバランスを実現します。 |
| CreateResourceGroup | リソースグループを作成します。 |
| DropResourceGroup | リソースグループを削除します。 |
| UpdateResourceGroups | リソースグループを更新します。 |
| DescribeResourceGroup | リソースグループの詳細を表示します。 |
| ListResourceGroups | 現在のインスタンス内のすべてのリソースグループを表示します。 |
| TransferNode | リソースグループ間でノードを転送します。 |
| TransferReplica | リソースグループ間でレプリカを転送します。 |
| BackupRBAC | 現在のインスタンス内のすべての RBAC 関連操作のバックアップを作成します。 |
| RestoreRBAC | 現在のインスタンス内のすべての RBAC 関連操作のバックアップを復元します。 |
エンティティの権限
| 権限 | 説明 |
|---|---|
| Query | クエリを実行します。 |
| Search | 検索を実行します。 |
| Insert | エンティティを挿入します。 |
| Delete | エンティティを削除します。 |
| Upsert | エンティティをアップサートします。 |
| Import | エンティティを一括挿入またはインポートします。 |
RBAC の権限
| 権限 | 説明 |
|---|---|
| CreateOwnership | ユーザーまたはロールを作成します。 |
| UpdateUser | ユーザーのパスワードを更新します。 |
| DropOwnership | ユーザーのパスワードまたはロールを削除します。 |
| SelectOwnership | 特定のロールが付与されているすべてのユーザーを表示します。 |
| ManageOwnership | ユーザーまたはロールを管理するか、ユーザーにロールを付与します。 |
| SelectUser | ユーザーに付与されているすべてのロールを表示します。 |
| CreatePrivilegeGroup | 権限グループを作成します。 |
| DropPrivilegeGroup | 権限グループを削除します。 |
| ListPrivilegeGroups | 現在のインスタンス内のすべての権限グループを表示します。 |
| OperatePrivilegeGroup | 権限グループに権限を追加するか、権限グループから権限を削除します。 |