JDBC를 통해 외부 데이터 원본에 액세스할 때 인증이 필요한 경우가 많습니다. 자격 증명을 Notebook에 직접 입력하는 대신 Databricks 비밀을 사용하여 자격 증명을 안전하게 저장하고 Notebook 및 작업에서 참조할 수 있습니다. 이 방법은 보안을 강화하고 자격 증명 관리를 간소화합니다. 이 페이지에서는 Databricks 비밀에 대한 개요를 제공합니다.
비고
Databricks는 Unity 카탈로그를 사용하여 클라우드 스토리지의 데이터에 대한 액세스를 구성하는 것이 좋습니다. Unity 카탈로그를 사용하여 클라우드 개체 스토리지에 연결을 참조하세요.
비밀 개요
비밀을 구성하고 사용하려면 다음을 수행합니다.
- 비밀 범위를 만듭니다. 비밀 범위는 이름으로 식별되는 비밀의 컬렉션입니다.
- 범위에 비밀 추가
- 비밀 범위에 대한 권한을 할당합니다.
- 코드에서 비밀을 참조합니다.
워크플로에서 비밀을 사용하는 방법에 대한 엔드 투 엔드 예제는 자습서: Databricks 비밀 만들기 및 사용을 참조하세요. Spark 구성 속성 또는 환경 변수에서 비밀을 사용하려면 Spark 구성 속성 또는 환경 변수에서 비밀 사용을 참조하세요.
경고
작업 영역 관리자, 비밀 작성자 및 권한이 부여된 사용자는 Databricks 비밀에 액세스하고 읽을 수 있습니다. Databricks는 Notebook 출력에서 비밀 값을 수정하려고 시도하지만 이러한 사용자가 비밀 콘텐츠를 볼 수 없도록 완전히 방지할 수는 없습니다. 중요한 정보를 보호하기 위해 항상 비밀 액세스 권한을 신중하게 할당합니다.
비밀 범위 관리
비밀 범위는 이름으로 식별되는 비밀의 컬렉션입니다. Databricks는 비밀 범위를 개인이 아닌 역할 또는 애플리케이션에 맞추는 것이 좋습니다.
다음과 같은 두 가지 유형의 비밀 범위가 있습니다.
- Azure Key Vault로 지원되는: Azure Key Vault에 저장된 비밀을 Azure Key Vault로 지원되는 비밀 범위를 통해 참조할 수 있습니다. Azure Key Vault로 지원되는 비밀 범위는 Key Vault에 대한 읽기 전용 인터페이스입니다. Azure의 Key Vault 지원 비밀 저장소 범위에서 비밀을 관리해야 합니다.
- Databricks로 지원되는: Databricks로 지원되는 비밀 범위는 Azure Databricks가 소유하고 관리하는 암호화된 데이터베이스에 저장됩니다.
비밀 범위를 만든 후 사용자에게 비밀 범위를 읽고 쓰고 관리할 수 있는 액세스 권한을 부여할 수 있는 권한을 할당할 수 있습니다.
Azure Key Vault 지원 비밀 범위 만들기
이 섹션에서는 Azure Portal 및 Azure Databricks 작업 영역 UI를 사용하여 Azure Key Vault 지원 비밀 범위를 만드는 방법을 설명합니다. Databricks CLI를 사용하여 Azure Key Vault 지원 비밀 범위를 만들 수도 있습니다.
요구 사항
- Azure Key Vault 인스턴스가 있어야 합니다. 키 자격 증명 모음 인스턴스가 없는 경우 Azure Portal을 사용하여 Key Vault 만들기의 지침을 따릅니다.
- 사용하려는 Azure Key Vault 인스턴스에 대해 Key Vault 기여자, 기여자 또는 소유자 역할이 있어야 비밀 범위를 백업할 수 있습니다.
비고
Azure Key Vault 지원 비밀 범위를 만들려면 Azure Databricks 서비스에 이전에 키 자격 증명 모음에 대한 액세스 권한이 부여된 경우에도 Azure Key Vault 인스턴스에 대한 기여자 또는 소유자 역할이 필요합니다.
키 자격 증명 모음이 Azure Databricks 작업 영역과 다른 테넌트에 있는 경우 비밀 범위를 만드는 Azure AD 사용자에게는 키 자격 증명 모음의 테넌트에 서비스 주체를 만들 수 있는 권한이 있어야 합니다. 그렇지 않으면 다음 오류가 발생합니다.
Unable to grant read/list permission to Databricks service principal to KeyVault 'https://xxxxx.vault.azure.net/': Status code 403, {"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."},"requestId":"XXXXX","date":"YYYY-MM-DDTHH:MM:SS"}}
Azure Databricks에 대한 Azure Key Vault 인스턴스 구성
Azure Portal에 로그인하고 Azure Key Vault 인스턴스를 찾아 선택합니다.
설정에서 [액세스 구성] 탭을 클릭합니다.
권한 모델을 자격 증명 모음 액세스 정책으로 설정합니다.
비고
Azure Key Vault로 지원되는 비밀 범위 역할을 만들면 키 볼트 액세스 정책을 사용하여 Azure Databricks 서비스의 애플리케이션 ID에 조회 및 목록화 권한이 부여됩니다. Azure 역할 기반 액세스 제어 권한 모델은 Azure Databricks에서 지원되지 않습니다.
설정에서 네트워킹을 선택합니다.
방화벽 및 가상 네트워크에서 액세스 허용:을 특정 가상 네트워크 및 IP 주소에서 공용 액세스 허용으로 설정합니다.
예외에서 신뢰할 수 있는 Microsoft 서비스를 이 방화벽을 우회하도록 허용을 선택합니다.
비고
액세스 허용:을 모든 네트워크에서 공용 액세스를 허용으로 설정할 수도 있습니다.
Azure Key Vault 지원 비밀 범위 만들기
https://<databricks-instance>#secrets/createScope로 이동합니다.<databricks-instance>를 Azure Databricks 배포의 작업 공간 URL로 교체하십시오. 이 URL은 대/소문자를 구분합니다. 예를 들어scope의createScope는 대문자S를 사용해야 합니다.
비밀 범위의 이름을 입력합니다. 비밀 범위 이름은 대/소문자를 구분하지 않습니다.
관리 주체에서 비밀 범위에 MANAGE 권한이 있는 사용자를 지정하려면, 작성자 또는 모든 작업 영역 사용자를 선택하십시오.
MANAGE 권한을 사용하면 사용자가 범위에 대한 권한을 읽고 쓰고 부여할 수 있습니다. 작성자를 선택하려면 계정에 프리미엄 플랜이 있어야 합니다.
DNS 이름(예:
https://databrickskv.vault.azure.net/) 및 리소스 ID를 입력합니다. 예를 들면 다음과 같습니다./subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/databricks-rg/providers/Microsoft.KeyVault/vaults/databricksKV이러한 속성은 Azure Portal에 있는 Azure Key Vault의 설정 > 속성 탭에서 사용할 수 있습니다.
만들기를 클릭합니다.
Databricks CLI
databricks secrets list-scopes명령을 사용하여 범위가 성공적으로 생성되었는지 확인합니다.
Databricks로 지원되는 비밀 스코프 만들기
이 섹션에서는 Databricks CLI(버전 0.205 이상)를 사용하여 비밀 범위를 만드는 방법을 설명합니다. 비밀 API를 사용할 수도 있습니다.
비밀 범위 이름:
- 작업 영역 내에서 고유해야 합니다.
- 영숫자 문자, 대시, 언더스코어
@, 마침표로 구성되어야 하며 128자를 초과할 수 없습니다. - 대/소문자를 구분하지 않습니다.
비밀 범위 이름은 민감하지 않은 것으로 간주되며 작업 영역의 모든 사용자가 읽을 수 있습니다.
Databricks CLI를 사용하여 범위를 만들려면 다음을 수행합니다.
databricks secrets create-scope <scope-name>
기본적으로 범위는 범위를 만든 사용자에 대한 MANAGE 권한으로 만들어집니다. Databricks 지원 비밀 범위를 만든 후에는 비밀을 추가할 수 있습니다.
비밀 범위 목록 확인
CLI를 사용하여 작업 영역의 기존 범위를 나열하려면 다음을 수행합니다.
databricks secrets list-scopes
비밀 API사용하여 비밀 범위를 나열할 수도 있습니다.
비밀 범위 삭제
비밀 범위를 삭제하면 범위에 적용된 모든 비밀과 ACL이 삭제됩니다. CLI를 사용하여 범위를 삭제하려면 다음을 실행합니다.
databricks secrets delete-scope <scope-name>
비밀 API를 사용하여 비밀 범위를 삭제할 수도 있습니다.
비밀 관리
비밀은 비밀 범위 내에서 고유한 키 이름을 사용하여 중요한 자료를 저장하는 키-값 쌍입니다.
이 섹션에서는 Databricks CLI(버전 0.205 이상)를 사용하여 비밀 범위를 만드는 방법을 설명합니다. 비밀 API를 사용할 수도 있습니다. 비밀 이름은 대/소문자를 구분하지 않습니다.
비밀 만들기
비밀을 만드는 방법은 Azure Key Vault 지원 범위 또는 Databricks 지원 범위를 사용하는지 여부에 따라 달라집니다.
Azure Key Vault 지원 범위에서 비밀 만들기
Azure Key Vault에서 비밀을 생성하려면 Azure Portal 또는 Azure Set Secret REST API를 사용합니다. 예를 들어 4단계: Azure Key Vault에 클라이언트 암호 추가를 참조하세요.
Databricks에서 지원하는 범위에 비밀 생성하기
이 섹션에서는 Databricks CLI(버전 0.205 이상) 또는 Python용 Databricks SDK를 사용하여 Notebook에서비밀을 만드는 방법을 설명합니다. 비밀 API를 사용할 수도 있습니다. 비밀 이름은 대/소문자를 구분하지 않습니다.
Databricks 명령줄 인터페이스 (CLI)
Databricks 지원 범위에서 비밀을 만들 때 다음 세 가지 방법 중 하나로 비밀 값을 지정할 수 있습니다.
- –string-value 플래그를 사용하여 값을 문자열로 지정합니다.
- 대화형으로 메시지가 표시되면 비밀을 입력합니다(한 줄 비밀).
- 표준 입력(여러 줄 비밀)을 사용하여 비밀을 전달합니다.
다음은 그 예입니다.
databricks secrets put-secret --json '{
"scope": "<scope-name>",
"key": "<key-name>",
"string_value": "<secret>"
}'
여러 줄 비밀을 만드는 경우 표준 입력을 사용하여 비밀을 전달할 수 있습니다. 다음은 그 예입니다.
(cat << EOF
this
is
a
multi
line
secret
EOF
) | databricks secrets put-secret <scope-name> <key-name>
Python용 Databricks SDK
from databricks.sdk import WorkspaceClient
w = WorkspaceClient()
w.secrets.put_secret("<secret_scope>","<key-name>",string_value ="<secret>")
비밀 읽기
이 섹션에서는 Databricks CLI (버전 0.205 이상) 또는 비밀 유틸리티(dbutils.secrets)를 사용하여 Notebook에서 비밀을 읽는 방법을 설명합니다.
Databricks 명령줄 인터페이스 (CLI)
Databricks CLI를 사용하여 비밀 값을 읽으려면 base64로 인코딩된 값을 디코딩해야 합니다. 값을 추출하는 데 jq를 사용하고 이를 디코딩하는 데 base --decode를 사용할 수 있습니다.
databricks secrets get-secret <scope-name> <key-name> | jq -r .value | base64 --decode
비밀 관리 유틸리티(dbutils.secrets)
password = dbutils.secrets.get(scope = "<scope-name>", key = "<key-name>")
비밀 목록 작성
지정된 범위에서 비밀을 나열하려면 다음을 수행합니다.
databricks secrets list-secrets <scope-name>
응답은 비밀의 키 이름과 같은 비밀에 대한 메타데이터 정보를 표시합니다. Notebook 또는 작업에서 비밀 유틸리티(dbutils.secrets) 사용하여 이 메타데이터를 나열합니다. 다음은 그 예입니다.
dbutils.secrets.list('my-scope')
비밀 삭제
Databricks CLI를 사용하여 범위에서 비밀을 삭제하려면 다음을 수행합니다.
databricks secrets delete-secret <scope-name> <key-name>
비밀 API를 사용할 수도 있습니다.
Azure Key Vault에서 지원되는 범위에서 비밀을 삭제하려면 Azure SetSecret REST API 또는 Azure Portal UI를 사용합니다.
비밀 범위 권한 관리
기본적으로 비밀 범위를 만드는 사용자에게는 MANAGE 권한이 부여됩니다. 이렇게 하면 범위 작성자가 범위에서 비밀을 읽고, 범위에 비밀을 쓰고, 범위에 대한 권한을 관리할 수 있습니다.
비고
비밀 접근 제어 목록은 범위 수준에서 설정됩니다. Azure Key Vault 지원 범위를 사용하는 경우 범위에 대한 액세스 권한이 부여된 사용자는 Azure Key Vault의 모든 비밀에 액세스할 수 있습니다. 액세스를 제한하려면 별도의 Azure Key Vault 인스턴스를 사용합니다.
이 섹션에서는 Databricks CLI(버전 0.205 이상)를 사용하여 비밀 액세스 제어를 관리하는 방법을 설명합니다. 비밀 API를 사용할 수도 있습니다. 비밀 권한 수준은 비밀 ACL을 참조하세요.
비밀 범위에 대한 사용자 권한 부여
Databricks CLI를 사용하여 비밀 범위에 대한 사용자 권한을 부여하려면 다음을 수행합니다.
databricks secrets put-acl <scope-name> <principal> <permission>
이미 권한이 적용된 주체에 대해 'put' 요청을 만들면 기존 권한 수준을 덮어씁니다.
principal 필드는 기존 Azure Databricks 보안 주체를 지정합니다. 사용자는 전자 메일 주소, 해당 applicationId 값을 사용하는 서비스 주체 및 그룹 이름을 사용하는 그룹을 사용하여 지정됩니다. 자세한 내용은 주체를 참조하세요.
비밀 범위 권한 보기
지정된 비밀 범위에 대한 모든 비밀 범위 권한을 보려면 다음을 수행합니다.
databricks secrets list-acls <scope-name>
지정된 비밀 스코프에 대한 주체에 적용된 비밀 스코프 권한을 얻으려면 다음을 수행합니다.
databricks secrets get-acl <scope-name> <principal>
지정된 보안 주체 및 범위에 대한 ACL이 없으면 이 요청이 실패합니다.
비밀 범위 권한 삭제
지정된 비밀 범위에 대한 주체의 비밀 범위 권한을 삭제하려면 다음을 수행합니다.
databricks secrets delete-acl <scope-name> <principal>
비밀 편집
자격 증명을 Azure Databricks 비밀로 저장하면 Notebook 및 작업을 실행할 때 자격 증명을 쉽게 보호할 수 있습니다. 그러나 실수로 비밀을 표준 출력 버퍼에 인쇄하거나 변수 할당 중에 값을 표시하는 것은 쉽습니다.
이를 방지하기 위해 Azure Databricks는 Spark 구성 속성에서 읽혀지고 dbutils.secrets.get()에 참조되는 모든 비밀 값을 숨깁니다. 표시되면 비밀 값이 .로 [REDACTED]바뀝니다.
예를 들어 dbutils.secrets.get() 사용하여 변수를 비밀 값으로 설정한 다음 해당 변수를 인쇄하면 해당 변수가 [REDACTED]바뀝니다.
경고
편집은 리터럴 비밀 값에만 적용됩니다. 비밀 편집 기능은 비밀 리터럴의 의도적이고 임의적인 변환을 방지하지 않습니다. 비밀을 적절하게 제어하려면 액세스 제어 목록 사용하여 명령을 실행할 수 있는 권한을 제한해야 합니다. 이렇게 하면 공유 전자 필기장 컨텍스트에 무단으로 액세스할 수 없습니다.
SQL의 비밀 편집
Azure Databricks는 참조된 뷰 및 사용자 정의 함수를 포함하여 비밀 함수를 호출하는 모든 SQL DQL(데이터 쿼리 언어) 명령을 수정하려고 시도합니다. 함수를 secret 사용할 때 가능하면 출력이 [REDACTED]으로 대체됩니다. Notebook 편집과 마찬가지로 변환되거나 간접적으로 참조되는 비밀에는 적용되지 않고 리터럴 값에만 적용됩니다.
SQL DML(데이터 조작 언어) 명령의 경우, Azure Databricks는 비밀이 안전한 것으로 간주되는 경우 비밀을 조회할 수 있습니다. 예를 들어, sha() 또는 aes_encrypt()과 같은 암호화 함수로 포장되어 원시 값이 암호화되지 않은 형태로 저장되지 않도록 합니다.
SQL의 비밀 유효성 검사
Azure Databricks는 암호화되지 않은 비밀이 테이블에 저장될 수 있는 SQL DML 명령을 차단하기 위해 유효성 검사를 적용합니다. 쿼리 분석기는 이러한 시나리오를 식별하고 방지하려고 시도하므로 중요한 정보가 실수로 일반 텍스트로 저장되지 않도록 방지할 수 있습니다.