다음을 통해 공유


자습서: ABAC 구성

중요합니다

이 기능은 공개 미리보기 단계에 있습니다.

이 자습서에서는 Unity 카탈로그에서 행 필터 및 열 마스크 ABAC(특성 기반 액세스 제어) 정책을 구성하는 방법을 소개합니다.

이 예제에서는 미국 분석 팀이 EU 고객 레코드 또는 SSN에 액세스할 수 없어야 합니다. 그러나 동일한 테이블의 다른 고객 및 고객 데이터에 액세스할 수 있어야 합니다. 이 자습서에는 다음 단계가 포함되어 있습니다.

  1. 관리 태그 만들기
  2. Unity 카탈로그, 스키마 및 테이블 만들기
  3. 열에 제어 태그 적용
  4. EU 회원국의 데이터를 숨기기 위한 UDF 만들기
  5. 행 필터 정책 만들기
  6. SSN을 숨기기 위한 UDF 만들기
  7. 열 마스크 정책을 만들기
  8. 정책을 사용하여 테이블 선택

ABAC 구성 데모는 Unity 카탈로그를 사용하여 ABAC(Attribute-Based Access Control) 검색을 참조하세요.

컴퓨팅 요구 사항

  • Databricks Runtime 16.4 이상에서 컴퓨팅을 사용해야 합니다.
  • 서버리스 컴퓨팅은 항상 ABAC에서 작동합니다.

이전 런타임을 실행하는 컴퓨팅은 ABAC로 보호되는 테이블에 액세스할 수 없습니다. 임시 해결 방법으로 특정 그룹에만 적용하도록 ABAC를 구성할 수 있습니다. 해당 그룹으로 제한하려는 사용자를 추가합니다. 그룹에 없는 사용자는 테이블에 계속 액세스할 수 있습니다.

1단계: 관리 태그 만들기

관리 태그를 만들려면 계정 수준에서 관리 태그 CREATE 권한이 있어야 합니다. 계정 및 작업 영역 관리자는 기본적으로 CREATE를 사용합니다.

  1. Azure Databricks 작업 영역에서 데이터 아이콘을 클릭합니다.카탈로그.

  2. 관리 태그 > 단추를 클릭합니다.

  3. 관리 태그 만들기를 클릭합니다.

  4. 태그 키를 입력합니다 pii.

  5. 관리 태그에 대한 설명을 입력합니다.

  6. 태그 ssn 에 허용되는 값을 입력합니다 address. 이러한 값만 이 태그 키에 할당할 수 있습니다.

    자습서: 태그 정책을 만듭니다.

  7. 만들기를 클릭합니다.

경고

태그 데이터는 일반 텍스트로 저장되며 전역적으로 복제될 수 있습니다. 리소스의 보안을 손상시킬 수 있는 태그 이름, 값 또는 설명자를 사용하지 마세요. 예를 들어 개인 정보나 중요한 정보가 포함된 태그 이름, 값 또는 설명자는 사용하지 마세요.

2단계: 고객 테이블 만들기

이러한 단계를 수행하려면 Unity 카탈로그 메타스토어에 대한 권한이 있어야 합니다 CREATE CATALOG . 사용 권한이 있는 스키마 CREATE TABLE 에서 테이블을 만들 수도 있습니다.

  1. 사이드바에서 +새로운>노트북을 클릭하세요.
  2. 전자 필기장 언어로 선택합니다 SQL .
  3. 연결을 클릭하고 Notebook을 컴퓨팅 리소스에 연결합니다.
  4. Notebook에 다음 명령을 추가하고 실행합니다.
-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac;
USE CATALOG abac;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;

-- Create table
CREATE TABLE IF NOT EXISTS profiles (
    First_Name STRING,
    Last_Name STRING,
    Phone_Number STRING,
    Address STRING,
    SSN STRING
)
USING DELTA;

-- Insert data
INSERT INTO profiles (First_Name, Last_Name, Phone_Number, Address, SSN)
VALUES
('John', 'Doe', '123-456-7890', '123 Main St, NY', '123-45-6789'),
('Jane', 'Smith', '234-567-8901', '456 Oak St, CA', '234-56-7890'),
('Alice', 'Johnson', '345-678-9012', '789 Pine St, TX', '345-67-8901'),
('Bob', 'Brown', '456-789-0123', '321 Maple St, FL', '456-78-9012'),
('Charlie', 'Davis', '567-890-1234', '654 Cedar St, IL', '567-89-0123'),
('Emily', 'White', '678-901-2345', '987 Birch St, WA', '678-90-1234'),
('Frank', 'Miller', '789-012-3456', '741 Spruce St, WA', '789-01-2345'),
('Grace', 'Wilson', '890-123-4567', '852 Elm St, NV', '890-12-3456'),
('Hank', 'Moore', '901-234-5678', '963 Walnut St, CO', '901-23-4567'),
('Ivy', 'Taylor', '012-345-6789', '159 Aspen St, AZ', '012-34-5678'),
('Liam', 'Connor', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333'),
('Sophie', 'Dubois', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444'),
('Hans', 'Müller', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555'),
('Elena', 'Rossi', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666'),
('Johan', 'Andersson', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777');

3단계: PII 열에 관리 태그 추가

  1. Notebook에 다음 명령을 추가하고 실행합니다.
-- Add the governed tag to ssn column
ALTER TABLE abac.customers.profiles
ALTER COLUMN SSN
SET TAGS ('pii' = 'ssn');

-- Add governed tag to address column
ALTER TABLE abac.customers.profiles
ALTER COLUMN Address
SET TAGS ('pii' = 'address');

4단계: EU 주소를 찾는 UDF 만들기

  1. Notebook에 다음 명령을 추가하고 실행합니다.
-- Determine if an address is not in the EU
CREATE OR REPLACE FUNCTION is_not_eu_address(address STRING)
RETURNS BOOLEAN
RETURN (
    SELECT CASE
        WHEN LOWER(address) LIKE '%eu%'
          OR LOWER(address) LIKE '%e.u.%'
          OR LOWER(address) LIKE '%europe%'
        THEN FALSE
        ELSE TRUE
    END
);

이 UDF는 지정된 문자열이 유럽 또는 EU를 참조하는 것으로 보이지 않는지 확인합니다. 이러한 부분 문자열이 있으면 FALSE(EU 주소)를 반환합니다. 부분 문자열을 찾을 수 없는 경우 TRUE를 반환합니다(EU 주소가 아님).

5단계: 행 필터 정책 만들기

개체에 대한 정책을 만들려면 개체에 MANAGE 또는 개체의 소유권이 있어야 합니다. 정책에 UDF를 추가하려면 EXECUTE가 UDF에 있어야 하며, Unity 카탈로그에 등록되어 있어야 합니다.

  1. 데이터 아이콘 을 클릭합니다.카탈로그.

  2. 이전에 만든 abac 카탈로그를 클릭하세요.

  3. 정책 탭을 클릭합니다.

  4. 새 정책을 클릭합니다.

  5. 일반:

    • 이름hide_eu_customers를 입력합니다.
    • 설명의 경우 정책에 대한 설명을 입력합니다.
    • 적용 대상...의 경우 정책이 적용되는 보안 주체를 찾아 선택하세요. 이 예제에서는 모든 계정 사용자 그룹을 사용할 수 있습니다.
    • 제외...를 빈칸으로 둡니다.
    • 범위에서 abac 카탈로그 및 전체 스키마를 선택합니다.

    일반 섹션에 대한 ABAC 행 필터 정책 설정 예제입니다.

  6. 용도테이블 행 숨기기를 선택합니다.

  7. 조건에서기존 항목 선택을 클릭합니다. 그런 다음 함수 아이콘을 클릭합니다.함수를 선택합니다.

  8. 함수 선택 메뉴에서 abac 카탈로그를, customers 스키마를, 그런 다음 이전에 만든 is_not_eu_address 함수를 클릭합니다.

  9. 선택을 클릭합니다.

    조건 섹션에 대한 ABAC 행 필터 정책 설정 예제입니다.

  10. 필요에 따라 테스트 함수를 확장하고 입력을 제공하여 마스킹 함수를 테스트 할 수 있습니다. 예를 들어 78 Berliner Str., Berlin, Germany E.U.을 입력하고 실행 테스트를 클릭하면 FALSE (Hide row)이 올바르게 반환됩니다.

    예제 ABAC 행 필터 마스킹 함수 테스트입니다.

  11. 함수 매개 변수에서:

    • 특정 태그가 있는 경우 매개 변수에 매핑 열을 선택합니다.
    • pii를 검색합니다. pii : address를 선택합니다.

    함수 매개 변수 섹션에 대한 ABAC 행 필터 정책 설정 예제입니다.

  12. 정책 만들기를 클릭합니다.

6단계: 정책 테스트

  1. Notebook으로 돌아가서 다음 명령을 실행합니다.
SELECT DISTINCT * FROM abac.customers.profiles

비유럽연합 비거주자 행만 반환됩니다.

First_Name 성씨 전화번호 주소 주민등록번호
은혜 윌슨 890-123-4567 852 엘름 스트리트, NV 890-12-3456
앨리스 존슨 345-678-9012 789 파인 스트리트, TX 345-67-8901
아이비 테일러 012-345-6789 159 아스펜 스트리트, AZ 012-34-5678
솔직하다 밀러 789-012-3456 741 스프루스 스트리트, 워싱턴주 789-01-2345
제인 스미스 234-567-8901 456 오크 스트리트, 캘리포니아 234-56-7890
John 123-456-7890 123 메인 스트리트, 뉴욕주 123-45-6789
찰리 데이비스 567-890-1234 654 시더 스트리트, IL 567-89-0123
에밀리 흰색 678-901-2345 987 버치 스트리트, 워싱턴주 678-90-1234
행크 무어 901-234-5678 963 월넛 스트리트, CO 901-23-4567
밤색 456-789-0123 321 메이플 스트리트, 플로리다 456-78-9012

열 마스크 정책을 계속해서 만들 수 있습니다.

7단계: SSN을 마스킹하는 UDF 만들기

  1. Notebook에 다음 명령을 추가하고 실행합니다.
-- Masks any SSN input by returning a fully masked value
CREATE FUNCTION mask_SSN(ssn STRING)
RETURN '***-**-****' ;

이 UDF는 완전히 마스킹된 SSN 문자열('***-**-****')을 반환합니다.

8단계: 열 마스크 정책을 생성하기

개체에 대한 정책을 만들려면 개체에 MANAGE 또는 개체의 소유권이 있어야 합니다. 정책에 UDF를 추가하려면 EXECUTE가 UDF에 있어야 하며, Unity 카탈로그에 등록되어 있어야 합니다.

  1. 데이터 아이콘 을 클릭합니다.카탈로그.

  2. 이전에 만든 abac 카탈로그를 클릭하세요.

  3. 정책 탭을 클릭합니다.

  4. 새 정책을 클릭합니다.

  5. 일반:

    • 이름mask_ssn를 입력합니다.
    • 설명의 경우 정책에 대한 설명을 입력합니다.
    • 적용 대상...의 경우 정책이 적용되는 보안 주체를 찾아 선택하세요. 이 예제에서는 모든 계정 사용자 그룹을 사용할 수 있습니다.
    • 제외...를 빈칸으로 둡니다.
    • 범위에서 abac 카탈로그 및 전체 스키마를 선택합니다.

    일반 섹션에 대한 ABAC 열 마스크 정책 설정 예제입니다.

  6. 목적을 위해 열 데이터 마스킹을 선택합니다.

  7. 조건:

    • 특정 태그가 있는 경우 마스크 열을 선택합니다. pii를 검색하고 pii : ssn을 선택합니다.
    • 기존 항목 선택을 클릭합니다. 그런 다음 함수 아이콘을 클릭합니다.함수를 선택합니다.
    • 함수 선택 메뉴에서 abac 카탈로그를, customers 스키마를, 그런 다음 이전에 만든 mask_ssn 함수를 클릭합니다.
  8. 선택을 클릭합니다.

    조건 섹션에 대한 ABAC 열 마스크 정책 설정 예제입니다.

  9. 필요에 따라 테스트 함수를 확장하고 입력을 제공하여 마스킹 함수를 테스트 할 수 있습니다. 예를 들어 901-234-5678을 입력하고 실행 테스트를 클릭하면 ***-**-****이 올바르게 반환됩니다.

    예제 ABAC 열 마스크 함수 테스트입니다.

  10. 정책 만들기를 클릭합니다.

9단계: 정책 테스트

  1. Notebook으로 돌아가서 다음 명령을 실행합니다.
SELECT * FROM abac.customers.profiles

이제 SSN이 ***-***-***로 반환됩니다. 행 필터 마스크도 사용하도록 설정되었으므로 비 EU 거주자만 반환됩니다.

First_Name 성씨 전화번호 주소 주민등록번호
제인 스미스 234-567-8901 456 오크 스트리트, 캘리포니아 ***-**-****
앨리스 존슨 345-678-9012 789 파인 스트리트, TX ***-**-****
찰리 데이비스 567-890-1234 654 시더 스트리트, IL ***-**-****
은혜 윌슨 890-123-4567 852 엘름 스트리트, NV ***-**-****
밤색 456-789-0123 321 메이플 스트리트, 플로리다 ***-**-****
행크 무어 901-234-5678 963 월넛 스트리트, CO ***-**-****
아이비 테일러 012-345-6789 159 아스펜 스트리트, AZ ***-**-****
에밀리 흰색 678-901-2345 987 버치 스트리트, 워싱턴주 ***-**-****
솔직하다 밀러 789-012-3456 741 스프루스 스트리트, 워싱턴주 ***-**-****
John 123-456-7890 123 메인 스트리트, 뉴욕주 ***-**-****