사용자와 역할 만들기 (Create Users & Roles)
Milvus는 RBAC(Role-Based Access Control, 역할 기반 접근 제어)를 통해 세분화된 접근 제어를 구현해요. 사용자와 역할을 먼저 만들고, 역할에 권한(privilege)이나 권한 그룹을 할당한 다음, 마지막으로 역할을 사용자에게 부여해 접근 제어를 관리할 수 있어요. 이 방식은 접근 관리의 효율성과 보안을 보장해 줘요. 이 페이지에서는 Milvus에서 사용자와 역할을 만드는 방법을 소개해요.
출처: Milvus 문서
본문
사용자 (User)
Milvus 인스턴스를 초기화한 뒤, 처음 Milvus에 연결할 때 인증을 위해 root 사용자가 자동으로 생성돼요. root 사용자의 사용자 이름은 root이고 비밀번호는 Milvus예요. root 사용자의 기본 역할은 admin이며 모든 리소스에 접근할 수 있어요. 데이터 보안을 위해 root 사용자의 자격 증명을 안전하게 보관해 무단 접근을 방지하세요.
일상 운영에서는 root 사용자 대신 사용자를 만들어 사용하는 것을 권장해요.
사용자 만들기 (Create a user)
다음 예시는 사용자 이름 user_1, 비밀번호 P@ssw0rd인 사용자를 만드는 방법을 보여 줘요. 사용자 이름과 비밀번호는 다음 규칙을 따라야 해요.
- 사용자 이름: 문자로 시작해야 하고, 대문자·소문자·숫자·밑줄만 포함할 수 있어요.
- 비밀번호: 8~64자여야 하고, 대문자·소문자·숫자·특수 문자 중 세 가지를 포함해야 해요.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
client.create_user(user_name="user_1", password="P@ssw0rd")
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("http://localhost:19530")
.token("root:Milvus")
.build();
MilvusClientV2 client = new MilvusClientV2(connectConfig);
CreateUserReq createUserReq = CreateUserReq.builder()
.userName("user_1")
.password("P@ssw0rd")
.build();
client.createUser(createUserReq);
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v2/milvusclient"
)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "localhost:19530",
APIKey: "root:Milvus",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
err = client.CreateUser(ctx, milvusclient.NewCreateUserOption("user_1", "P@ssw0rd"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node")
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
await client.createUser({
username: 'user_1',
password: 'P@ssw0rd',
});
export CLUSTER_ENDPOINT="http://localhost:19530"
export TOKEN="root:Milvus"
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"userName": "user_1",
"password": "P@ssw0rd"
}'
비밀번호 업데이트 (Update password)
사용자를 만든 뒤 비밀번호를 잊어버렸다면 업데이트할 수 있어요.
새 비밀번호도 다음 규칙을 따라야 해요.
- 8~64자여야 하고, 대문자·소문자·숫자·특수 문자 중 세 가지를 포함해야 해요.
다음 예시는 user_1 사용자의 비밀번호를 NewP@ssw0rd로 업데이트하는 방법을 보여 줘요.
from pymilvus import MilvusClient
client.update_password(
user_name="user_1",
old_password="P@ssw0rd",
new_password="NewP@ssw0rd"
)
import io.milvus.v2.service.rbac.request.UpdatePasswordReq;
UpdatePasswordReq updatePasswordReq = UpdatePasswordReq.builder()
.userName("user_1")
.password("P@ssw0rd")
.newPassword("NewP@ssw0rd")
.build();
client.updatePassword(updatePasswordReq);
err = client.UpdatePassword(ctx, milvusclient.NewUpdatePasswordOption("user_1", "P@ssw0rd", "NewP@ssw0rd"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node")
await client.updateUser({
username: 'user_1',
newPassword: 'P@ssw0rd',
oldPassword: 'NewP@ssw0rd',
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/update_password" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"newPassword": "P@ssw0rd!",
"userName": "user_1",
"password": "P@ssw0rd"
}'
사용자 나열 (List users)
여러 사용자를 만든 뒤 모든 기존 사용자를 나열하고 확인할 수 있어요.
from pymilvus import MilvusClient
client.list_users()
List<String> resp = client.listUsers();
users, err := client.ListUsers(ctx, milvusclient.NewListUserOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
await client.listUsers();
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/users/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{}'
아래는 예시 출력이에요. root는 Milvus에서 자동으로 생성된 기본 사용자이고, user_1은 방금 만든 새 사용자예요.
['root', 'user_1']
역할 (Role)
Milvus는 admin이라는 내장 역할을 제공해요. 이 역할은 모든 인스턴스 아래의 리소스에 접근할 수 있고 모든 연산에 대한 권한을 가진 관리자 역할이에요. 더 세분화된 접근 관리와 향상된 데이터 보안을 위해 필요에 따라 사용자 지정 역할을 만드는 것을 권장해요.
역할 만들기 (Create a role)
다음 예시는 role_a라는 역할을 만드는 방법을 보여 줘요.
역할 이름은 다음 규칙을 따라야 해요.
- 문자로 시작해야 하고, 대문자·소문자·숫자·밑줄만 포함할 수 있어요.
from pymilvus import MilvusClient
client.create_role(role_name="role_a")
import io.milvus.v2.service.rbac.request.CreateRoleReq;
CreateRoleReq createRoleReq = CreateRoleReq.builder()
.roleName("role_a")
.build();
err = client.CreateRole(ctx, milvusclient.NewCreateRoleOption("role_a"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
await client.createRole({
roleName: 'role_a',
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{
"roleName": "role_a"
}'
역할 나열 (List roles)
여러 역할을 만든 뒤 모든 기존 역할을 나열하고 확인할 수 있어요.
from pymilvus import MilvusClient
client.list_roles()
List<String> roles = client.listRoles();
roles, err := client.ListRoles(ctx, milvusclient.NewListRoleOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
await client.listRoles({
includeUserInfo: true
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
--header "Request-Timeout: 10" \
-d '{}'
아래는 예시 출력이에요. admin은 Milvus의 기본 역할이고, role_a는 방금 만든 새 역할이에요.
['admin', 'role_a']
이 페이지에서는 사용자와 역할의 생성·나열 방법을 다뤘어요. 역할에 권한을 부여(grant)하거나 사용자에게 역할을 할당하는 방법은 Milvus의 RBAC 관련 문서에서 이어서 확인할 수 있어요.
더 알아보기 (Learn more)
- Milvus RBAC — 역할에 권한 부여, 사용자에게 역할 할당
- Authenticate User Access — TLS 및 사용자 인증 구성
- Milvus 공식 문서 — 전체 권한 유형과 API 참조