クラスタ資格情報(SDK)
Zilliz Cloudは、Web UI上でクラスター資格情報を管理するだけでなく、資格情報管理用のSDKを提供することで機能を拡張しています。この統合により、柔軟性が向上し、Web UI単体よりも多くのカスタマイズオプションが提供されます。
バックエンドには、3つの組み込みロールオプションがあります。
-
db_admin
:クラスタと関連リソースを完全に制御します。 -
db_rw
:クラスター内のコレクションとインデックスの読み取り、書き込み、および管理の許可。 -
db_ro
:ほとんどのクラスタリソースの表示権がありますが、作成、変更、削除の機能はありません。
詳細については、クラスタロールの管理(コンソール)を参照してください。
クラスターの役割とユーザーを一覧表示する
クラスタ内のすべての組み込みロールとユーザーを次のようにリストできます。
- Python
- Java
- NodeJS
from pymilvus import MilvusClient
CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT"
TOKEN = "YOUR_CLUSTER_TOKEN"
# 1. Set up a Milvus client
client = MilvusClient(
uri=CLUSTER_ENDPOINT,
token=TOKEN
)
# 2. List roles and users
roles = client.list_roles()
print(roles)
# Output
#
# ["db_admin", "db_ro", "db_rw"]
users = client.list_users()
print(users)
# Output
#
# ["db_admin"]
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
String CLUSTER_ENDPOINT = "YOUR_CLUSTER_ENDPOINT";
String TOKEN = "YOUR_CLUSTER_TOKEN";
// 1. Connect to Milvus server
ConnectConfig connectConfig = ConnectConfig.builder()
.uri(CLUSTER_ENDPOINT)
.token(TOKEN)
.secure(true)
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
// 2. List all users and roles
List<String> roleNames = client.listRoles();
System.out.println(roleNames);
// Output
//
// ["db_admin", "db_ro", "db_rw"]
List<String> userNames = client.listUsers();
System.out.println(userNames);
// Output
//
// ["db_admin"]
const { MilvusClient, DataType, sleep } = require("@zilliz/milvus2-sdk-node")
const address = "YOUR_CLUSTER_ENDPOINT"
const token = "YOUR_CLUSTER_TOKEN"
async function main() {
// 1. Connect to the cluster
const client = new MilvusClient({address, token})
// 2. List roles and users
var res = await client.listRoles()
console.log(res.results.map(r => r.role.name))
// Output
//
// ["db_admin", "db_ro", "db_rw"]
res = await client.listUsers()
console.log(res.usernames)
// Output
//
// ["db_admin"]
クラスタユーザの作成
クラスターユーザーを作成するには、次のコードスニペットを使用します。
- Python
- Java
- NodeJS
# 3. Create a user
if 'user1' not in users:
client.create_user(
user_name="user1",
password="p@ssw0rd!"
)
users = client.list_users()
print(users)
# Output
#
# ["db_admin", "user1"]
import io.milvus.v2.service.rbac.request.DropUserReq;
import io.milvus.v2.service.rbac.request.CreateUserReq;
// 3. Create a user
CreateUserReq createUserReq = CreateUserReq.builder()
.userName("user1")
.password("p@ssw0rd!")
.build();
client.createUser(createUserReq);
userNames = client.listUsers();
System.out.println(userNames);
// Output
//
// ["db_admin", "user1"]
// 3. Create a user
if (!res.usernames.includes("user1")) {
await client.createUser({
username: "user1",
password: "p@ssw0rd!"
})
}
res = await client.listUsers()
console.log(res.usernames)
// Output
//
// ["db_admin", "user1"]
クラスターユーザーを作成したら、そのユーザー名とパスワードを使用してクラスターに接続できます。詳細については、Clusterに接続を参照してください。詳細については、Authenticate User Access and Enable RBAC を参照してください。
ユーザーの資格情報を更新する
ユーザーのパスワードを更新するには、以下のコードを使用してください
- Python
- Java
- NodeJS
# 4. Update a user credentials
client.update_password(
user_name="user1",
old_password="p@ssw0rd!",
new_password="p@ssw0rd123!"
)
import io.milvus.v2.service.rbac.request.UpdatePasswordReq;
// 4. Update user password
UpdatePasswordReq updatePasswordReq = UpdatePasswordReq.builder()
.userName("user1")
.password("p@ssw0rd!")
.newPassword("p@ssw0rd123!")
.build();
client.updatePassword(updatePasswordReq);
// 4. Update a user credentials
await client.updateUser({
username: "user1",
oldPassword: "p@ssw0rd!",
newPassword: "p@ssw0rd123!"
})
役割を説明する
ユーザーにロールを割り当てる前に、ロールが持つ権限を確認することをお勧めします。Zilliz Cloudには、異なる権限を持つdb_ro
、db_admin
、db_rw
の3つのプリセットロールがあります。
次のコードスニペットは、db_ro
ロールの詳細を示しています。
- Python
- Java
- NodeJS
# 5. Describe the role
res = client.describe_role(role_name="db_ro")
print(res)
# Output
#
# {
# "role": "db_ro",
# "privileges": [
# {
# "object_type": "Collection",
# "object_name": "*",
# "db_name": "default",
# "role_name": "db_ro",
# "privilege": "GetLoadState"
# },
# {
# "object_type": "Collection",
# "object_name": "*",
# "db_name": "default",
# "role_name": "db_ro",
# "privilege": "GetLoadingProgress"
# },
# {
# "object_type": "Collection",
# "object_name": "*",
# "db_name": "default",
# "role_name": "db_ro",
# "privilege": "HasPartition"
# },
# "(10 more items hidden)"
# ]
# }
import io.milvus.v2.service.rbac.request.DescribeRoleReq;
// 5. Describe the role
DescribeRoleReq describeRoleReq = DescribeRoleReq.builder()
.roleName("db_ro")
.build();
DescribeRoleResp describeRoleResp = client.describeRole(describeRoleReq);
System.out.println(JSONObject.toJSON(describeRoleResp));
// Output:
// {"grantInfos": [
// {
// "dbName": "default",
// "objectName": "*",
// "grantor": "",
// "privilege": "GetLoadState",
// "objectType": "Collection"
// },
// {
// "dbName": "default",
// "objectName": "*",
// "grantor": "",
// "privilege": "GetLoadingProgress",
// "objectType": "Collection"
// },
// {
// "dbName": "default",
// "objectName": "*",
// "grantor": "",
// "privilege": "HasPartition",
// "objectType": "Collection"
// },
// "(10 elements are hidden)"
// ]}
// 5. Describe the role
var res = await client.describeRole({
roleName: "db_ro"
})
console.log(res.results)
// Output
//
// [ { users: [], role: { name: 'db_ro' } } ]
//
クラスターユーザーに役割を割り当てる
user 1にdb_ro
ロールを割り当てる
:
- Python
- Java
- NodeJS
# 6. Assign a role to a user
client.grant_role(
user_name="user1",
role_name="db_ro"
)
# 7. Describe a user
user_info = client.describe_user(
user_name="user1"
)
print(user_info)
# Output
#
# {
# "user_name": "user1",
# "roles": "(\"db_ro\")"
# }
import io.milvus.v2.service.rbac.request.GrantRoleReq;
// 6. Assign a role to a user
GrantRoleReq grantRoleReq = GrantRoleReq.builder()
.userName("user1")
.roleName("db_ro")
.build();
client.grantRole(grantRoleReq);
// 7. Describe the user
DescribeUserReq describeUserReq = DescribeUserReq.builder()
.userName("user1")
.build();
DescribeUserResp describeUserResp = client.describeUser(describeUserReq);
System.out.println(JSONObject.toJSON(describeUserResp));
// Output:
// {"roles": ["db_ro"]}
// 6. Assign a role to a user
await client.grantRole({
username: "user1",
roleName: "db_ro"
})
// 7. Describe a user
res = await client.describeUser({
username: "user1"
})
console.log(res.results)
// Output
//
// [ { roles: [ [Object] ], user: { name: 'user1' } } ]
//
ユーザーから役割を取り消す
ユーザーからロールを取り消すには:
- Python
- Java
- NodeJS
# 8. Revoke a role from a user
client.revoke_role(
user_name="user1",
role_name="db_ro"
)
import io.milvus.v2.service.rbac.request.RevokeRoleReq;
// 8. Revoke a role from a user
RevokeRoleReq revokeRoleReq = RevokeRoleReq.builder()
.userName("user1")
.roleName("db_ro")
.build();
client.revokeRole(revokeRoleReq);
// 8. Revoke a role from a user
await client.revokeRole({
username: "user1",
roleName: "db_ro"
})
ユーザーを削除
ユーザーが不要になった場合は、以下のように削除してください:
- Python
- Java
- NodeJS
# 9. Drop a user
client.drop_user(
user_name="user1"
)
import io.milvus.v2.service.rbac.request.DropUserReq;
// 9. Drop the user
DropUserReq dropUserReq = DropUserReq.builder()
.userName("user1")
.build();
client.dropUser(dropUserReq);
userNames = client.listUsers();
System.out.println(userNames);
// Output:
// ["db_admin"]
// 9. Drop a user
await client.dropUser({
username: "user1"
})