クラスターユーザーの管理(SDK)
Zilliz Cloud では、クラスターユーザーを作成し、クラスターロールを割り当てて権限を定義することで、データセキュリティを実現できます。
このガイドでは、クラスターユーザーの作成、ユーザーへのロールの付与、ユーザーからのロールの取り消し、最後にユーザーの削除という一連の手順を説明します。クラスターロールの詳細については、クラスターロールの管理(コンソール) を参照してください。
ユーザーを作成する
次の例は、ユーザー名 user_1 とパスワード P@ssw0rd でユーザーを作成する方法を示しています。ユーザーのユーザー名とパスワードは、次のルールに従う必要があります。
-
ユーザー名:英字で始まる必要があり、大文字または小文字の英字、数字、アンダースコアのみを含めることができます。
-
パスワード:長さが 8-64 文字である必要があり、大文字の英字、小文字の英字、数字、特殊文字のうち 3 種類以上を含める必要があります。
-
(任意)説明:最大 1024(UTF-8 バイト単位)。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
client.create_user(user_name="user_1", password="P@ssw0rd", description="a new user in the developers team")
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.rbac.request.CreateUserReq;
ConnectConfig connectConfig = ConnectConfig.builder()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN")
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
CreateUserReq createUserReq = CreateUserReq.builder()
.userName("user_1")
.password("P@ssw0rd")
.description("a new user in the developers team")
.build();
client.createUser(createUserReq);
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
ctx := context.Background()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "YOUR_CLUSTER_ENDPOINT",
APIKey: "YOUR_CLUSTER_TOKEN",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
err = client.CreateUser(ctx, milvusclient.NewCreateUserOption("user_1", "P@ssw0rd").
WithDescription("a new user in the developers team"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2 as sdk;
use milvus::v2::error::Result;
use milvus::v2::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let client = ClientV2::new(
&ConnectConfig::new()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN"),
).await?;
client.create_user(
sdk::request::rbac::CreateUserRequest::builder()
.username("user_1")
.password("P@ssw0rd")
.description("a new user in the developers team")
.build()?,
).await?;
Ok(())
}
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto client = milvus::MilvusClientV2::Create();
auto status = client->Connect(milvus::ConnectParam("YOUR_CLUSTER_ENDPOINT").WithToken("YOUR_CLUSTER_TOKEN"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
status = client->CreateUser(milvus::CreateUserRequest()
.WithUserName("user_1")
.WithPassword("P@ssw0rd")
.WithDescription("a new user in the developers team"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node");
const address = "YOUR_CLUSTER_ENDPOINT";
const token = "YOUR_CLUSTER_TOKEN";
const client = new MilvusClient({address, token});
await client.createUser({
username: 'user_1',
password: 'P@ssw0rd',
description: 'a new user in the developers team',
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"userName": "user_1",
"password": "P@ssw0rd",
"description": "a new user in the developers team"
}'
ユーザーを一覧表示する
複数のユーザーを作成した後、既存のすべてのユーザーを一覧表示して確認できます。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.list_users()
import java.util.List;
List<String> resp = client.listUsers();
users, err := client.ListUsers(ctx, milvusclient.NewListUserOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
let users = client.list_users(
sdk::request::rbac::ListUsersRequest::builder().build()?,
).await?;
milvus::ListUsersRequest request;
milvus::ListUsersResponse response;
auto status = client->ListUsers(request, response);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.listUsers();
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{}'
以下は出力例です。root は自動的に生成されるデフォルトユーザーです。user_1 は作成したばかりの新しいユーザーです。
['root', 'user_1']
ユーザーにロールを付与する
次の例は、ユーザー user_1 にロール role_a を付与する方法を示しています。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
client.grant_role(user_name="user_1", role_name="role_a")
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.rbac.request.GrantRoleReq;
String CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT";
String TOKEN = "YOUR_CLUSTER_TOKEN";
ConnectConfig connectConfig = ConnectConfig.builder()
.uri(CLUSTER_ENDPOINT)
.token(TOKEN)
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
GrantRoleReq grantRoleReq = GrantRoleReq.builder()
.roleName("role_a")
.userName("user_1")
.build();
client.grantRole(grantRoleReq);
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
ctx := context.Background()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "YOUR_CLUSTER_ENDPOINT",
APIKey: "YOUR_CLUSTER_TOKEN",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
err = client.GrantRole(ctx, milvusclient.NewGrantRoleOption("user_1", "role_a"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2 as sdk;
use milvus::v2::error::Result;
use milvus::v2::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let client = ClientV2::new(
&ConnectConfig::new()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN"),
).await?;
client.grant_role(
sdk::request::rbac::GrantRoleRequest::builder()
.username("user_1")
.role_name("role_a")
.build()?,
).await?;
Ok(())
}
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto client = milvus::MilvusClientV2::Create();
auto status = client->Connect(milvus::ConnectParam("YOUR_CLUSTER_ENDPOINT").WithToken("YOUR_CLUSTER_TOKEN"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
status = client->GrantRole(milvus::GrantRoleRequest()
.WithUserName("user_1")
.WithRoleName("role_a"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node");
const address = "YOUR_CLUSTER_ENDPOINT";
const token = "YOUR_CLUSTER_TOKEN";
const client = new MilvusClient({address, token});
await client.grantRole({
username: 'user_1',
roleName: 'role_a'
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/grant_role" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"userName": "user_1"
}'
ユーザーを記述する
ユーザーにロールを付与した後、describe_user() メソッドを使用して、付与操作が成功したかどうかを確認できます。
次の例は、ユーザー user_1 のロールを確認する方法を示しています。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.describe_user(user_name="user_1")
import io.milvus.v2.service.rbac.request.DescribeUserReq;
import io.milvus.v2.service.rbac.response.DescribeUserResp;
DescribeUserReq describeUserReq = DescribeUserReq.builder()
.userName("user_1")
.build();
DescribeUserResp describeUserResp = client.describeUser(describeUserReq);
user, err := client.DescribeUser(ctx, milvusclient.NewDescribeUserOption("user_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
let user = client.describe_user(
sdk::request::rbac::DescribeUserRequest::builder()
.username("user_1")
.build()?,
).await?;
milvus::DescribeUserResponse response;
auto status = client->DescribeUser(
milvus::DescribeUserRequest().WithUserName("user_1"), response);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.describeUser({username: 'user_1'});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/describe" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"userName": "user_1"
}'
以下は出力例です。
{'user_name': 'user_1', 'description':'a new user in the developers team', 'roles': 'role_a'}
ロールを取り消す
ユーザーに割り当てられたロールを取り消すこともできます。
次の例は、ユーザー user_1 に割り当てられたロール role_a を取り消す方法を示しています。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.revoke_role(
user_name='user_1',
role_name='role_a'
)
import io.milvus.v2.service.rbac.request.RevokeRoleReq;
client.revokeRole(RevokeRoleReq.builder()
.userName("user_1")
.roleName("role_a")
.build());
err = client.RevokeRole(ctx, milvusclient.NewRevokeRoleOption("user_1", "role_a"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
client.revoke_role(
sdk::request::rbac::RevokeRoleRequest::builder()
.username("user_1")
.role_name("role_a")
.build()?,
).await?;
auto status = client->RevokeRole(milvus::RevokeRoleRequest()
.WithUserName("user_1")
.WithRoleName("role_a"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.revokeRole({
username: 'user_1',
roleName: 'role_a'
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/revoke_role" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"userName": "user_1",
"roleName": "role_a"
}'
ユーザーを削除する
次の例は、ユーザー user_1 を削除する方法を示しています。
root ユーザーは削除できません。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)
# drop the user
client.drop_user(user_name="user_1")
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.rbac.request.DropUserReq;
ConnectConfig connectConfig = ConnectConfig.builder()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN")
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
DropUserReq dropUserReq = DropUserReq.builder()
.userName("user_1")
.build();
client.dropUser(dropUserReq);
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v3/milvusclient"
)
ctx := context.Background()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "YOUR_CLUSTER_ENDPOINT",
APIKey: "YOUR_CLUSTER_TOKEN",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
err = client.DropUser(ctx, milvusclient.NewDropUserOption("user_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
use milvus::v2 as sdk;
use milvus::v2::error::Result;
use milvus::v2::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let client = ClientV2::new(
&ConnectConfig::new()
.uri("YOUR_CLUSTER_ENDPOINT")
.token("YOUR_CLUSTER_TOKEN"),
).await?;
client.drop_user(
sdk::request::rbac::DropUserRequest::builder()
.username("user_1")
.build()?,
).await?;
Ok(())
}
#include <iostream>
#include "milvus/MilvusClientV2.h"
auto client = milvus::MilvusClientV2::Create();
auto status = client->Connect(milvus::ConnectParam("YOUR_CLUSTER_ENDPOINT").WithToken("YOUR_CLUSTER_TOKEN"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
status = client->DropUser(milvus::DropUserRequest().WithUserName("user_1"));
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node");
const address = "YOUR_CLUSTER_ENDPOINT";
const token = "YOUR_CLUSTER_TOKEN";
const client = new MilvusClient({address, token});
await client.deleteUser({
username: 'user_1'
});
export CLUSTER_ENDPOINT="YOUR_CLUSTER_ENDPOINT"
export TOKEN="YOUR_CLUSTER_TOKEN"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"userName": "user_1"
}'
ユーザーを削除した後、既存のすべてのユーザーを一覧表示して、削除操作が成功したかどうかを確認できます。
- Python
- Java
- Go
- Rust
- C++
- NodeJS
- cURL
from pymilvus import MilvusClient
client.list_users()
import java.util.List;
List<String> resp = client.listUsers();
users, err := client.ListUsers(ctx, milvusclient.NewListUserOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
let users = client.list_users(
sdk::request::rbac::ListUsersRequest::builder().build()?,
).await?;
milvus::ListUsersRequest request;
milvus::ListUsersResponse response;
auto status = client->ListUsers(request, response);
if (!status.IsOk()) {
std::cout << status.Message() << std::endl;
}
await client.listUsers();
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{}'
以下は出力例です。リストに user_1 は存在しません。削除操作は成功しています。
['root']