이 페이지에서는 다음을 포함하여 쿼리 시 ABAC 정책을 평가하는 방법을 설명합니다.
- 여러 정책 간의 충돌 처리 방법
- 열 마스크 형식 캐스팅의 작동 방식
- 정책이 의존하는 태그 또는 함수가 삭제될 때 데이터 노출을 방지하는 보호 장치
정책 평가 및 적용
사용자가 테이블을 쿼리하면 ABAC 평가는 Unity 카탈로그의 정책 평가 및 Databricks 런타임의 정책 적용이라는 두 단계로 진행됩니다.
정책 평가는 사용자의 ID, 그룹 멤버 자격 및 액세스하는 데이터에 대한 태그에 따라 달라지므로 다른 사용자가 동일한 쿼리에서 다른 결과를 볼 수 있습니다. 그룹 멤버 자격 또는 태그 할당을 변경하면 쿼리 시 유효 정책이 동적으로 변경됩니다.
정책 평가 (Unity Catalog)
Unity 카탈로그는 보안 개체의 메타데이터(예: 제어 태그 할당) 및 쿼리 사용자의 ID 및 그룹 멤버 자격을 사용하여 다음 단계를 수행합니다.
- 범위가 쿼리된 테이블을 포함하는 모든 정책을 식별합니다.
- 이러한 각 정책에 대해 쿼리 사용자가
TO목록에 있지 않고EXCEPT목록에 있는지 확인합니다. - 각 정책에 대해 상속된 태그를 포함하여 쿼리된 개체의 태그에 대해 테이블 및 열 조건을 평가합니다. 열 조건은 최소한 하나의 열과 일치해야 합니다.
- 정책이 적용되는 경우 유효 행 필터 또는 열 마스크를 결정하고 테이블 메타데이터의 일부로 Databricks 런타임에 보냅니다.
정책 적용(Databricks 런타임)
Databricks 런타임 쿼리 플래너는 유효 행 필터 또는 열 마스크를 쿼리 실행 중에 필터링 및 마스킹을 적용하는 테이블 검색 위에 있는 보안 보기로 변환합니다. 이는 테이블 레벨의 행 필터와 열 마스크에 사용되는 동일한 적용 메커니즘입니다.
고장 시 닫힘 설계
ABAC는 실패 시 닫힘(fail-closed) 모델을 따릅니다. Azure Databricks는 기본적으로 보안을 확인할 수 없는 경우 액세스를 거부합니다. Azure Databricks 적용 가능한 모든 정책을 안전하게 적용할 수 있는 경우에만 ABAC 보안 테이블에 대한 액세스를 허용합니다. 지원되지 않는 컴퓨팅 버전, 기본 테이블 데이터에 대한 특정 작업 및 정책의 종속성(태그 또는 함수)이 제거된 상황에 적용됩니다.
지원되지 않는 컴퓨팅 버전
ABAC 정책에는 Databricks Runtime 16.4 이상 또는 서버리스 컴퓨팅이 필요합니다. 사용자가 지원되지 않는 버전에서 ABAC 보안 테이블에 액세스하려고 하면 보호되지 않는 데이터 노출을 방지하기 위해 쿼리가 닫힘(액세스 거부)되지 않습니다.
전용 액세스 모드에서 Azure Databricks는 세분화된 액세스 제어 설정이 적용되도록 서버리스 컴퓨팅에 대한 적용을 위임하여 보장합니다. 이전 런타임의 사용자가 이러한 테이블에 액세스할 수 있도록 하려면 정책에서 명시적으로 제외해야 합니다.
보호된 데이터에 대한 지원되지 않는 작업
특정 작업은 행 필터 또는 열 마스크와 호환되지 않습니다. 이러한 작업은 규칙 적용을 무시하기보다 실패합니다. 이를 실행하려면 모든 ABAC 정책의 절에 테이블에 적용되는 보안 주체가 나열되어야 합니다 EXCEPT. 제외 주체는 정책의 적용을 받지 않으므로 Azure Databricks 정책을 적용할 필요가 없으며 작업을 안전하게 허용할 수 있습니다.
실행 주체를 제외해야 하는 작업에는 파이프라인 새로 고침, 백업 프로세스 및 다음과 같은 관리 워크플로가 포함됩니다.
- 16.4 미만의 Databricks 런타임 버전을 실행하는 컴퓨팅에서 ABAC 보안 테이블에 액세스
- 시간 이동 질문
- 깊고 얕은 복제
- 델타 공유에서는 공유 소유자가 정책에서 제외되어야 하고 필요한 델타 공유 권한을 가지고 있어야 합니다. 정책은 받는 사람의 액세스를 제어하지 않습니다.
- 벡터 검색 인덱스 만들기 및 동기화
이러한 제한 사항 및 기타 제한 사항에 대한 자세한 내용은 ABAC 요구 사항, 할당량 및 제한 사항을 참조하세요.
제거된 정책 종속성
ABAC 정책은 관리되는 태그 및 UDF에 따라 달라집니다. 정책에서 해당 종속성을 계속 참조하는 동안 이러한 종속성이 제거되면 정책 범위의 테이블에 대한 쿼리가 실패합니다.
규제된 태그 삭제
ABAC 정책이 참조하는 관리되는 태그를 삭제하면 정책이 연결된 개체 및 해당 자식 개체에 대한 모든 쿼리가 INVALID_PARAMETER_VALUE.UC_ABAC_UNKNOWN_TAG_POLICY 오류로 실패합니다. 이는 태그가 쿼리된 테이블에 적용되지 않은 경우에도 발생합니다.
관리 태그가 삭제되면 관리되지 않는 태그가 됩니다. 허용된 값 제한이 제거되어 APPLY TAG 권한이 있는 모든 사용자가 ASSIGN 권한 없이 값을 수정할 수 있습니다.
경고
UI 및 API는 ABAC 정책에서 참조되는 관리 태그를 삭제하는 것을 방지하지 않습니다. 관리 태그를 삭제하기 전에 ABAC 정책이 이를 참조하지 않는지 확인합니다.
오류를 해결하려면 삭제된 태그를 복원하거나 해당 태그를 참조하는 정책을 업데이트하거나 삭제합니다. 관리 태그 만들기 및 관리를 참조하세요.
태그가 지정된 열 삭제
Azure Databricks는 관리 태그가 적용된 열의 삭제를 방지합니다. 열을 삭제하려면 ASSIGN 태그와 APPLY TAG 개체를 가진 사용자가 먼저 태그를 제거한 다음 열을 삭제할 수 있습니다.
이는 선언적 파이프라인 및 테이블 스키마를 수정하는 기타 자동화된 워크플로와 관련이 있습니다. 파이프라인이 태그가 지정된 열을 삭제하려고 하면 작업이 실패합니다. 파이프라인의 차단을 해제하려면 필요한 태그 권한이 있는 사용자는 태그를 제거하고, 스키마 변경이 성공하도록 파이프라인을 실행한 다음, 태그를 관련 열에 다시 적용해야 합니다. 태그를 다시 적용하지 않으면 정책이 여전히 범위에 있지만 필요한 태그가 더 이상 개체에 없기 때문에 데이터에 대한 쿼리가 실패합니다.
정책 참조 함수 삭제
정책이 여전히 범위에 있는 동안 정책에서 참조하는 UDF가 삭제되면 해당 범위의 테이블에 대한 쿼리가 실패합니다 UC_DEPENDENCY_DOES_NOT_EXIST. 해결하려면 함수를 복원하거나 다른 UDF를 참조하도록 정책을 업데이트합니다.
여러 필터 및 마스크에 대한 규칙
지정된 테이블 및 사용자에 대해 쿼리 시 하나의 고유 행 필터만 적용할 수 있습니다. 마찬가지로 지정된 열과 사용자에 대해 런타임에 열당 하나의 고유 열 마스크만 확인할 수 있습니다. 이렇게 하면 모호한 결과가 방지됩니다.
동일한 사용자 및 테이블(또는 열)에 여러 개의 고유 필터 또는 마스크가 적용되는 경우 Azure Databricks 액세스를 차단하고 오류를 반환합니다. 다음은 그 예입니다.
- 테이블 수준 필터 또는 마스크가 ABAC 정책과 충돌합니다. 이미 수동으로 적용된 행 필터 또는 열 마스크 가 있는 테이블 또는 열이 동일한 대상의 ABAC 정의 필터 또는 마스크와 충돌합니다.
- 행 필터의
USING COLUMNS절은 여러 열과 일치하는MATCH COLUMNS별칭을 참조합니다.USING COLUMNS구문은 열 값을 UDF에 전달합니다. 절의MATCH COLUMNS별칭이USING COLUMNS둘 이상의 열과 일치하는 경우 엔진은 UDF에 전달할 열을 결정할 수 없으며 오류가 발생하여 쿼리가 실패합니다. - 마스킹된 열은 다른 정책의
USING COLUMNS절에서 참조됩니다. 한 정책이 열을 마스킹하는 경우 다른 정책의 절에서USING COLUMNS입력 인수로 사용할 수 없습니다.
여러 ABAC 정책이 동일한 유효 필터 또는 마스크를 생성할 경우 동일한 테이블 또는 열에 대해 공존할 수 있습니다. 예를 들어 동일한 인수를 사용하여 동일한 UDF를 참조하는 두 정책은 동일한 필터 또는 마스크로 확인되며 충돌하지 않습니다.
정책 충돌 문제 해결
Azure Databricks 지정된 사용자에 대한 정책 평가 중에 여러 개의 고유 필터 또는 마스크를 검색하면 INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS 또는 COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS 오류를 throw하고 충돌이 해결될 때까지 테이블에 대한 액세스를 차단합니다.
진단 및 해결 방법:
- 테이블에 적용되는 모든 정책을 확인하는 데 사용합니다
SHOW EFFECTIVE POLICIES. -
INFORMATION_SCHEMA.ROW_FILTERS및INFORMATION_SCHEMA.COLUMN_MASKS를 확인하여 충돌할 수 있는 테이블 수준의 행 필터나 열 마스크가 있는지 식별합니다. - 정책의
TO/EXCEPT주요 요소 및WHEN/MATCH COLUMNS조건이 어떻게 겹치는지 확인합니다. - 해결 기한:
- 정책 조건 구체화 특정 정책이 서로 다른 테이블이나 열을 대상으로 하도록
WHEN또는MATCH COLUMNS절을 보다 구체적으로 업데이트합니다. - 제어 태그 조정 의도하지 않은 정책 일치를 트리거하는 열 또는 테이블에서 태그 할당을 검토하고 제거하거나 업데이트합니다.
- 원칙 조정 테이블당 행 필터 또는 열당 열 마스크 각각을 통해 각 사용자가 최대 하나의 정책으로 커버되도록
TO/EXCEPT절을 업데이트합니다. - 구조조정 정책. 겹치는 정책을 단일 정책으로 통합하거나 광범위한 정책을 명시적으로 대상으로 하는 별도의 정책으로 분할합니다.
- 정책 조건 구체화 특정 정책이 서로 다른 테이블이나 열을 대상으로 하도록
열 마스크에 대한 자동 형식 캐스팅
Azure Databricks ABAC 정책에서 확인된 열 마스크 함수의 입력 및 출력을 자동으로 캐스팅합니다. 입력 열 값은 마스크 함수의 매개 변수 형식과 일치하도록 캐스팅되고, 함수 출력은 대상 열의 데이터 형식과 일치하도록 캐스팅됩니다. 이렇게 하면 열을 마스킹할 때 형식 일관성과 안정적인 쿼리 동작이 보장됩니다. 자동 캐스팅은 다음과 같이 작동합니다.
- 마스킹 함수 실행: 정책 평가에서 마스킹이 적용되는 것으로 확인되면 마스킹 함수는 일치하는 열 값에서 실행됩니다.
- 자체 형식 캐스팅: Azure Databricks 입력 열 값을 함수의 매개 변수 형식과 일치하도록 캐스팅하고 대상 열의 데이터 형식과 일치하도록 함수 출력을 캐스팅합니다.
- 결과 반환: 올바르게 입력된 결과가 쿼리에 반환됩니다.
입력 또는 출력 형식이 호환되지 않으면 캐스트가 실패하고 쿼리가 런타임 오류를 반환합니다. 캐스팅은 CAST 작업에서 ANSI SQL 표준(전체 호환성 세부 정보)을 따르며, 하나의 추가 사항이 있습니다: Databricks Runtime 18.1 이상에서는 일반 SQL에서는 지원되지 않는 ABAC 열 마스크 정책으로 구조체를 VARIANT로 캐스팅할 수 있습니다.
마스크 함수가 대상 열과 호환되는 형식을 반환하는지 확인해야 합니다. 열 형식에서 유연한 마스킹에 대한 예제 및 VARIANT 접근 방식은 캐스트 호환 마스킹 함수 를 참조하세요.