RBAC 활성화
RBAC를 활성화하면 특정 Milvus 리소스(예: 컬렉션 또는 파티션)에 대한 액세스 또는 사용자 역할 및 권한에 따른 권한을 제어할 수 있습니다. 현재 이 기능은 Python과 Java에서만 사용할 수 있습니다.
이 주제에서는 RBAC를 활성화하고 사용자 및 역할을 관리하는 방법에 대해 설명합니다.
이 페이지의 코드 스니펫은 새로운 MilvusClient (Python)를 사용하여 Milvus와 상호 작용합니다. 다른 언어에 대한 새로운 MilvusClient SDK는 향후 업데이트를 통해 출시될 예정입니다.
1. Milvus 클라이언트를 시작하여 연결 설정하기
사용자 인증을 활성화한 후 사용자 이름과 비밀번호로 구성된 token
을 사용하여 Milvus 인스턴스에 연결합니다. 기본적으로 Milvus는 root
사용자와 비밀번호 Milvus
를 사용합니다.
from pymilvus import MilvusClient
client = MilvusClient(
uri='http://localhost:19530', # replace with your own Milvus server address
token='root:Milvus' # replace with your own Milvus server token
)
2. 사용자 만들기
user_1
라는 이름의 사용자와 P@ssw0rd
이라는 비밀번호를 생성합니다:
client.create_user(
user_name='user_1',
password='P@ssw0rd'
)
사용자를 생성한 후 다음을 수행할 수 있습니다:
- 사용자 비밀번호를 업데이트합니다. 기존 비밀번호와 새 비밀번호를 모두 입력해야 합니다.
client.update_password(
user_name='user_1',
old_password='P@ssw0rd',
new_password='P@ssw0rd123'
)
- 모든 사용자를 나열합니다.
client.list_users()
# output:
# ['root', 'user_1']
- 특정 사용자의 역할을 확인합니다.
client.describe_user(user_name='user_1')
# output:
# {'user_name': 'user_1', 'roles': ()}
3. 역할 만들기
다음 예에서는 roleA
라는 이름의 역할을 만듭니다.
client.create_role(
role_name="roleA",
)
역할을 만든 후에는 다음과 같이 할 수 있습니다:
- 모든 역할을 나열합니다.
client.list_roles()
# output:
# ['admin', 'public', 'roleA']
4. 역할에 권한 부여하기
다음 예는 roleA
이라는 역할에 모든 컬렉션을 검색할 수 있는 권한을 부여하는 방법을 보여줍니다.
object_type
은 리소스 유형으로도 이해할 수 있는 객체 유형을 지정합니다. 현재 유효한 값으로는 컬렉션/사용자/글로벌 등이 있으며, 여기서 글로벌은 특정 리소스 유형이 없음을 의미합니다. object_name
은 리소스 이름입니다. 객체 유형이Collection인 경우 객체 이름은 특정 컬렉션 이름을 참조하거나 *를 사용하여 모든 컬렉션을 지정할 수 있습니다.개체유형이Global인 경우에는 개체 이름을 *로만 지정할 수 있습니다. 부여할 수 있는 다른 유형의 권한은 사용자 및 역할을 참조하세요.
역할 권한을 관리하기 전에 사용자 인증을 사용 설정했는지 확인하세요. 그렇지 않으면 오류가 발생할 수 있습니다. 사용자 인증을 사용 설정하는 방법에 대한 자세한 내용은 사용자 액세스 인증하기를 참조하세요.
# grant privilege to a role
client.grant_privilege(
role_name='roleA',
object_type='User', # value here can be Global, Collection or User, object type also depends on the API defined in privilegeName
object_name='user_1', # value here can be * or a specific user name if object type is 'User'
privilege='SelectUser'
)
역할에 권한을 부여한 후에는 다음과 같이 할 수 있습니다:
- 역할에 부여된 권한을 봅니다.
client.describe_role(
role_name='roleA'
)
# output:
# {'role': 'roleA',
# 'privileges': [{'object_type': 'User',
# 'object_name': 'user_1',
# 'db_name': 'default',
# 'role_name': 'roleA',
# 'privilege': 'SelectUser',
# 'grantor_name': 'root'}]}
5. 사용자에게 역할 부여하기
사용자에게 역할을 부여하여 이 사용자가 역할의 모든 권한을 상속받을 수 있도록 합니다.
# grant a role to a user
client.grant_role(
user_name='user_1',
role_name='roleA'
)
역할을 부여한 후 역할이 부여되었는지 확인합니다:
client.describe_user(
user_name='user_1'
)
# output:
# {'user_name': 'user_1', 'roles': ('roleA')}
6. 권한 취소하기
다음 작업은 되돌릴 수 없으므로 수행할 때 주의하세요.
- 역할에서 권한 제거하기. 역할에 부여되지 않은 권한을 취소하면 오류가 발생합니다.
client.revoke_privilege(
role_name='roleA',
object_type='User', # value here can be Global, Collection or User, object type also depends on the API defined in privilegeName
object_name='user_1', # value here can be * or a specific user name if object type is 'User'
privilege='SelectUser'
)
- 역할에서 사용자를 제거합니다. 사용자에게 부여되지 않은 역할을 취소하면 오류가 발생합니다.
client.revoke_role(
user_name='user_1',
role_name='roleA'
)
- 역할을 삭제합니다.
client.drop_role(role_name='roleA')
- 사용자를 삭제합니다.
client.drop_user(user_name='user_1')