비밀 액세스 제어

기본적으로 모든 가격 책정 계획의 모든 사용자는 비밀 및 비밀 범위를 만들 수 있습니다. Azure Databricks 프리미엄 플랜에서 사용할 수 있는 비밀 액세스 제어를 사용하여 액세스 제어를 관리하기 위한 세분화된 권한을 구성할 수 있습니다. 이 가이드에서는 이러한 컨트롤을 설정하는 방법을 설명합니다.

참고

  • 액세스 제어는 Azure Databricks 프리미엄 플랜에서만 사용할 수 있습니다. 계정에 표준 계획이 있는 경우 비밀 범위를 만들 때 "사용자"(모든 사용자) 그룹에 명시적으로 MANAGE 권한을 부여해야 합니다.

  • 이 문서에서는 Databricks CLI(버전 0.7.1 이상)를 사용하여 비밀 액세스 제어를 관리하는 방법을 설명합니다. 또는 비밀 API 2.0을 사용할 수 있습니다.

비밀 액세스 제어

비밀에 대한 액세스 제어는 비밀 범위 수준에서 관리됩니다. ACL(액세스 제어 목록)은 Azure Databricks 보안 주체(사용자 또는 그룹), 비밀 범위 및 권한 수준 간의 관계를 정의합니다. 일반적으로 사용자는 사용 가능한 가장 강력한 권한을 사용합니다(사용 권한 수준 참조).

비밀 유틸리티(dbutils.secrets)를 사용하여 Notebook을 통해 비밀을 읽는 경우 명령을 실행하는 사용자에 따라 사용자의 권한이 적용되며 최소한 READ 권한이 있어야 합니다.

범위를 만들면 초기 MANAGE 권한 수준 ACL이 범위에 적용됩니다. 후속 액세스 제어 구성은 해당 보안 주체에서 수행할 수 있습니다.

권한 수준

비밀 액세스 권한은 다음과 같습니다.

  • MANAGE - ACL을 변경하고 이 비밀 범위를 읽고 쓸 수 있습니다.
  • WRITE - 이 비밀 범위를 읽고 쓸 수 있습니다.
  • READ - 이 비밀 범위를 읽고 사용할 수 있는 비밀을 나열할 수 있습니다.

각 권한 수준은 이전 수준의 권한의 하위 집합입니다(즉, 지정된 범위에 대한 WRITE 권한이 있는 보안 주체는 READ 권한이 필요한 모든 작업을 수행할 수 있음).

참고

Databricks 관리자는 작업 영역의 모든 비밀 범위에 대한 MANAGE 권한을 갖습니다.

비밀 ACL 만들기

Databricks CLI(버전 0.7.1 이상)를 사용하여 지정된 비밀 범위에 대한 비밀 ACL을 만들려면 다음을 실행합니다.

databricks secrets put-acl --scope <scope-name> --principal <principal> --permission <permission>

이미 적용된 권한이 있는 보안 주체에 대한 put 요청을 만들면 기존 권한 수준을 덮어씁니다.

비밀 ACL 보기

지정된 비밀 범위에 대한 모든 비밀 ACL을 보려면 다음을 수행합니다.

databricks secrets list-acls --scope <scope-name>

지정된 비밀 범위에 대한 보안 주체에 적용된 비밀 ACL을 가져오려면 다음을 수행합니다.

databricks secrets get-acl --scope <scope-name> --principal <principal>

지정된 보안 주체 및 범위에 대한 ACL이 없으면 이 요청이 실패합니다.

비밀 ACL 삭제

지정된 비밀 범위에 대한 보안 주체에 적용된 비밀 ACL을 삭제하려면 다음을 수행합니다.

databricks secrets delete-acl --scope <scope-name> --principal <principal>

Terraform 통합

Databricks Terraform 공급자databricks_secret_acl을 사용하여 완전 자동화된 설정에서 권한을 관리할 수 있습니다.

resource "databricks_group" "ds" {
  display_name = "data-scientists"
}

resource "databricks_secret_scope" "app" {
  name = "app-secret-scope"
}

resource "databricks_secret_acl" "my_secret_acl" {
  principal = databricks_group.ds.display_name
  permission = "READ"
  scope = databricks_secret_scope.app.name
}

resource "databricks_secret" "publishing_api" {
  key = "publishing_api"
  string_value = "SECRET_API_TOKEN_HERE"
  scope = databricks_secret_scope.app.name
}