Important
이 기능은 베타 버전으로 제공됩니다. 사용하려면 작업 공간 관리자가 Previews 페이지에서 에이전트 메모리 세션을 켜야 합니다. Azure Databricks 미리 보기 관리를 참조하세요.
에이전트 메모리 저장소와 세션 저장소는 동일한 저장소 수준 권한 모델을 사용합니다. 권한은 저장소의 내용에 적용되며, 메모리 저장소의 모든 메모리 항목 또는 세션 저장소 내 모든 세션 및 모든 세션 항목에 적용됩니다.
Azure Databricks 사용자나 서비스 주체에게 접근 권한을 부여할 수 있습니다. 사용자는 이메일로, 서비스 주체는 애플리케이션(클라이언트) ID로 식별합니다. 스토어 권한이 그룹을 지원하지 않습니다.
Requirements
- 기존 메모리 저장소 또는 세션 저장소입니다.
- Agent Bricks CLI 또는 AgentKit SDK 예제의 경우, Python 3.10 이상 및
databricks-agentbricks0.8.0 이상이 필요합니다.
스토어 수준 접근 모델
스토어는 보안 경계입니다.
session_id, path, metadata, actor_id와 같은 필드는 데이터를 정리하고 필터링하지만, 접근 권한을 제한하지는 않습니다. 스토어 접근 권한이 있는 프린시펄은 스토어 내 모든 액터의 데이터를 접근할 수 있습니다. 테넌트나 사용자 간 데이터를 격리하기 위해 각 보안 경계마다 별도의 저장소를 생성하세요.
스토어 권한 수준은 다음과 같습니다:
| Permission | 저장소 데이터 읽기 | 저장소 데이터 쓰기 |
|---|---|---|
READ |
Yes | No |
WRITE |
Yes | Yes.
WRITE에는 READ가 포함됩니다. |
| 액세스 권한 없음 | No | No. 이 상태를 부여할 수 없습니다. 주체의 명시적 접근 권한을 제거하려면 Revoke 작업을 사용하세요. Get 작업은 이 상태를 PERMISSION_LEVEL_UNSPECIFIED로 보고합니다. |
권한은 스토어 생성자와 워크스페이스 관리자만 관리할 수 있습니다:
- 스토어 생성자는 암묵적
WRITE접근 권한을 가지고 권한을 부여, 목록 조회, 취소할 수 있습니다. 창작자의 소유자 자격은 취소할 수 없습니다. - 워크스페이스 관리자는 워크스페이스 내 모든 스토어에 대해 권한을 부여, 조회, 취소할 수 있습니다. 워크스페이스 관리자라고 해서 데이터 접근권이 부여되는 것은 아닙니다. 기존 데이터 접근 권한이 없는 관리자는 스토어를 사용하려면 스스로
READ또는WRITE권한을 부여해야 합니다. -
READ또는WRITE권한이 있는 사용자나 서비스 주체는 스토어를 사용할 수 있지만 해당 권한을 관리할 수는 없습니다.
상속된 접근권은 기반이 되는 Lakebase 프로젝트의 Postgres 역할 멤버십에서 얻습니다(예: databricks_superuser). 스토어 허가 작업은 그 역할 멤버십을 바꾸지 않습니다.
Postgres 역할의 권한 관리를 참조하세요.
권한 작업
스토어 권한은 네 가지 작업을 지원합니다:
| Operation | Behavior |
|---|---|
| Grant |
READ 또는 WRITE 권한을 한 명의 사용자 또는 서비스 주체에 부여합니다. 작업이 멱등적입니다.
READ이 있는 주체에 WRITE를 부여해도 기존 권한 부여는 하향 조정되지 않습니다. |
| Get | 인증된 호출자는 Get을 실행할 수 있습니다. 호출자의 실질적인 권한만을 반환하며, 여기에는 암묵적 생성자 접근과 상속 접근 권한도 포함됩니다. 호출자에게 접근 권한이 없으면 PERMISSION_LEVEL_UNSPECIFIED를 반환합니다. |
| List | 사용자 및 서비스 프린시펄에 대한 명시적 권한 부여를 반환합니다. 창작자의 암묵적 접근 권한, 작업 공간 관리자 관리 권한, 상속된 접근 권한을 제외합니다. 비어 있는 결과는 어떤 보안 주체도 저장소에 접근할 수 없다는 것을 증명하지 않습니다. |
| Revoke | 한 주체에서 명시적 READ 및 WRITE 권한 부여를 모두 제거합니다. 작업이 멱등적입니다. 소유권이나 상속된 접근 권한을 제거하지 않습니다. |
List REST API는 기본 페이지 크기로 100개의 그랜트를 사용하며, 페이지당 최대 1,000개의 그랜트를 지원합니다. AgentKit SDK는 모든 페이지를 자동으로 추적합니다. Agent Bricks CLI에서 --all를 사용하여 모든 페이지를 반환합니다.
주체를 WRITE에서 READ로 하향 조정하려면 기존 권한 부여를 취소한 후 READ를 부여합니다. 이 연산들은 원자적이지 않기 때문에 프린시펄은 두 호출 간에 명시적 접근 권한이 없습니다.
스토어 권한 관리
다음 예시들은 메모리 저장소의 권한을 관리합니다. 세션 스토어의 경우 Agent Bricks CLI에서는 client.session_stores.get("<store-name>") 대신 session-stores/<store-name>을(를) 사용하고, AgentKit SDK에서는 sessions stores을(를) 사용하거나, REST API 경로에서는 memory stores을(를) 사용하세요.
에이전트 브릭스
권한 명령어는 다른 스토어 명령어와 동일한 스토어 식별자를 받습니다. 메모리 저장소는 저장소 ID, 자원 이름 또는 명확한 디스플레이 이름을 수용합니다. 세션 저장소는 스토어 이름이나 리소스 이름을 받아들입니다.
사용자에게 읽기 권한을 부여하려면 다음을 실행하세요:
agentbricks memory stores permissions grant <store-id> \
--user teammate@example.com --permission READ
서비스 주체에게 쓰기 권한을 부여하려면 다음을 실행하세요. 서비스 주체의 애플리케이션 ID를 전달하세요:
agentbricks memory stores permissions grant <store-id> \
--service-principal <application-id> --permission WRITE
본인의 유효 권한을 확인하려면 다음을 실행하세요:
agentbricks memory stores permissions get <store-id>
모든 명시적으로 부여된 권한을 나열하려면 스토어 생성자 또는 작업 공간 관리자로서 다음을 실행하세요:
agentbricks memory stores permissions list <store-id> --all
사용자의 명시적 접근 권한을 취소하려면 다음을 실행하세요.
--yes 이 옵션은 확인 프롬프트를 건너뛸습니다:
agentbricks memory stores permissions revoke <store-id> \
--user teammate@example.com --yes
AgentKit SDK
권한 메서드는 SessionStore 및 MemoryStore 객체 모두에서 사용할 수 있습니다. 다음 예시는 권한 수준과 보안 주체 유형을 명시적으로 전달합니다:
from databricks.sdk import WorkspaceClient
from databricks_agentkit import AgentKitClient
client = AgentKitClient(WorkspaceClient())
store = client.memory_stores.get("<store-id>")
# Grant a user read access.
store.grant_permission(
"teammate@example.com",
principal_type="USER",
permission="READ",
)
# Return the authenticated caller's effective permission.
permission = store.get_permission()
print(permission.principal.name, permission.permission)
# List every explicit grant.
for grant in store.list_permissions(page_size=100):
print(grant.principal.name, grant.principal.principal_type, grant.permission)
# Remove the user's explicit READ and WRITE grants.
store.revoke_permission("teammate@example.com", principal_type="USER")
grant_permission() 및 revoke_permission()은(는) SERVICE_PRINCIPAL를 기본 주체 유형으로 사용합니다.
grant_permission()는 기본 권한으로 WRITE를 사용합니다. 사용자 접근 권한이나 읽기 전용 권한을 부여할 때 두 인자 모두를 명시적으로 전달하세요.
REST API
권한 엔드포인트는 /api/2.0/agents/memory-stores/<store-id>/permissions 아래에 있습니다. 요청 본문은 USER로 사용자를 식별하고 SERVICE_PRINCIPAL로 서비스 주체를 식별합니다.
https://을(를) DATABRICKS_TOKEN을(를) 포함한 사용자의 작업 공간 URL로 설정하고, DATABRICKS_HOST을(를) 사용자의 액세스 토큰으로 설정하세요.
사용자에게 읽기 권한을 부여하려면 Grant 연산을 호출하세요:
curl -X POST "${DATABRICKS_HOST}/api/2.0/agents/memory-stores/<store-id>/permissions:grant" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"principal": {"principal_type": "USER", "name": "teammate@example.com"},
"permission": "READ"
}'
인증된 발신자의 유효 권한을 얻으려면 Get 작업을 호출하세요:
curl "${DATABRICKS_HOST}/api/2.0/agents/memory-stores/<store-id>/permissions/self" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}"
명시적 부여를 나열하려면 스토어 생성자 또는 작업 공간 관리자로서 List 작업을 호출하세요:
curl "${DATABRICKS_HOST}/api/2.0/agents/memory-stores/<store-id>/permissions?page_size=100" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}"
사용자의 명시적 접근 권한을 취소하려면 Revoke 작업을 호출하세요:
curl -X POST "${DATABRICKS_HOST}/api/2.0/agents/memory-stores/<store-id>/permissions:revoke" \
-H "Authorization: Bearer ${DATABRICKS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"principal": {"principal_type": "USER", "name": "teammate@example.com"}
}'
그랜트 및 리보크 작업은 권한 객체를 반환하지 않습니다. 변경 사항을 확인하려면 스토어 생성자 또는 작업 공간 관리자로 List를 실행하세요. 유효 접근 권한을 확인하려면 영향을 받은 주체로 인증하고 Get을 실행하세요.
에이전트 배포로 관리되는 권한
에이전트 프로젝트가 메모리 또는 세션 저장소를 선언하면, 배포된 앱의 서비스 주체에 agentbricks deploy 해당 저장소에 대한 액세스 권한이 부여됩니다. 나중에 배포하면 수동으로 취소한 접근 권한을 복구할 수 있습니다.
저장소를 언바인딩하면 에이전트 프로젝트에서 바인딩이 제거됩니다. 앱의 서비스 주체에 이미 부여된 접근 권한을 취소하지 않습니다. Revoke 작업을 사용해 그 접근 권한을 제거하세요.
추가 리소스
| Resource | Description |
|---|---|
| 에이전트 메모리 | 에이전트에게 별도의 대화에도 지속되는 장기 기억을 부여하세요. |
| 에이전트 세션 | 에이전트의 대화 기록을 저장해 턴을 넘어 상호작용을 재개할 수 있게 하세요. |