Öğretici: SQL ile ABAC'yi yapılandırma

Bu öğreticide, SQL kullanarak Unity Kataloğu'nda satır filtresi ve sütun maskesi ABAC ilkelerini yapılandırma gösterilmektedir. Katalog Gezgini kullanıcı arabirimi tabanlı sürüm için bkz . Öğretici: ABAC'yi Yapılandırma.

Bu örnekte analiz ekibi AB müşteri kayıtlarına erişemez ve SSN'ler her zaman maskelenir. Veri paylaşımını onaylayan müşterilerin tam e-postaları gösterilir. Diğerleri yalnızca maskelenmiş bir sürüm görür.

Bu eğitim aşağıdaki adımları içerir:

  1. İdare edilen etiketler oluşturma
  2. Unity Catalog için bir katalog, şema ve tablo oluşturun
  3. Sütunlara yönetilen etiketler uygulayın
  4. AB adreslerini algılamak için UDF oluşturma
  5. Satır filtresi ilkesi oluştur
  6. Satır filtresini test edin
  7. SSN'leri maskeleme amacıyla UDF oluşturma
  8. Sütun maskesi ilkesi oluşturma
  9. Sütun maskesini test edin

Bu adımları tamamladıktan sonra, isteğe bağlı olarak öğreticiyi koşullu e-posta maskeleme (10-12 arası adımlar) ile genişletebilirsiniz.

Prerequisites

  • Databricks Runtime 16.4 veya üzeri ya da sunucusuz işlem.
  • Hesap yöneticisi veya çalışma alanı yöneticisi izinleri (idare edilen etiketler oluşturmak için).
  • MANAGE üzerinde hedef katalog veya şemada izin.
  • EXECUTE UDF'lerde.

Eski çalışma zamanlarını çalıştıran işlem, ABAC tarafından güvenliği sağlanan tablolara erişemez.

1. Adım: İdare edilen etiketler oluşturma

İdare edilen etiketler , hesap düzeyinde tanımlanan anahtar-değer çiftleridir. ABAC ilkeleri, hangi sütunların filtreleneceği veya maskeleneceği bulmak için bunları kullanır. Bu öğreticide iki yönetilen etiket oluşturacaksınız:

  • pii İzin verilen üç değere sahip bir etiket: ssn, addressveemail
  • consent Onay sütunlarını tanımlamak için yalnızca anahtar etiketi (izin verilen değer yok)

yönetilen etiket oluşturmak için, hesap düzeyinde yönetilen etiket CREATE iznine sahip olmanız gerekir. Hesap ve çalışma alanı yöneticileri varsayılan olarak CREATE'ye sahiptir.

  1. Azure Databricks çalışma alanınızda Veri simgesine tıklayın.Katalog'a gidin.
  2. Kalkan simgesine tıklayın. İdare düğmesi.
  3. Açılan menüde Yönetilen Etiketler'e tıklayın.
  4. yönetilen etiket oluştur'a tıklayın.
  5. Etiket anahtarı için girin pii.
  6. İdare edilen etiket için bir açıklama girin.
  7. İzin verilen değerler için şunu girin: ssn, addressve email. Bu etiket anahtarına yalnızca bu değerler atanabilir.
  8. Oluştur'a tıklayın.
  9. anahtarıyla consentikinci bir yönetilen etiket oluşturmak için 4-8 arasındaki adımları yineleyin. İzin verilen değerleri boş bırakın (yalnızca anahtar etiketi).

Uyarı

Etiket verileri düz metin olarak depolanır ve genel olarak çoğaltılabilir. Kaynaklarınızın güvenliğini tehlikeye atabilecek etiket adlarını, değerleri veya tanımlayıcıları kullanmayın. Örneğin, kişisel veya hassas bilgiler içeren etiket adlarını, değerlerini veya tanımlayıcılarını kullanmayın.

2. Adım: Müşteriler tablosunu oluşturma

Müşteri profilleriyle bir katalog, şema ve tablo oluşturun. Sütun has_consent daha sonra koşullu e-posta maskeleme için kullanılır. OnayTRUE () veren müşterilerin tam e-postaları gösterilir.

Databricks Runtime 16.4 veya üzeri üzerinde işlem için ekli bir not defterinde aşağıdaki komutları çalıştırın:

-- Create catalog (if not already exists)
CREATE CATALOG IF NOT EXISTS abac_tutorial;
USE CATALOG abac_tutorial;

-- Create schema
CREATE SCHEMA IF NOT EXISTS customers;
USE SCHEMA customers;
CREATE OR REPLACE TABLE profiles (
    first_name STRING,
    last_name STRING,
    email STRING,
    phone_number STRING,
    home_address STRING,
    ssn_number STRING,
    has_consent BOOLEAN
);
INSERT INTO profiles (first_name, last_name, email, phone_number, home_address, ssn_number, has_consent)
VALUES
('John', 'Doe', 'john.doe@example.com', '123-456-7890', '123 Main St, NY', '123-45-6789', TRUE),
('Jane', 'Smith', 'jane.smith@example.com', '234-567-8901', '456 Oak St, CA', '234-56-7890', FALSE),
('Alice', 'Johnson', 'alice.j@example.com', '345-678-9012', '789 Pine St, TX', '345-67-8901', TRUE),
('Bob', 'Brown', 'bob.brown@example.com', '456-789-0123', '321 Maple St, FL', '456-78-9012', FALSE),
('Charlie', 'Davis', 'charlie.d@example.com', '567-890-1234', '654 Cedar St, IL', '567-89-0123', TRUE),
('Emily', 'White', 'emily.w@example.com', '678-901-2345', '987 Birch St, WA', '678-90-1234', FALSE),
('Frank', 'Miller', 'frank.m@example.com', '789-012-3456', '741 Spruce St, WA', '789-01-2345', TRUE),
('Grace', 'Wilson', 'grace.w@example.com', '890-123-4567', '852 Elm St, NV', '890-12-3456', TRUE),
('Hank', 'Moore', 'hank.moore@example.com', '901-234-5678', '963 Walnut St, CO', '901-23-4567', FALSE),
('Ivy', 'Taylor', 'ivy.taylor@example.com', '012-345-6789', '159 Aspen St, AZ', '012-34-5678', TRUE),
('Liam', 'Connor', 'liam.c@example.com', '111-222-3333', '12 Abbey Street, Dublin, Ireland EU', '111-22-3333', TRUE),
('Sophie', 'Dubois', 'sophie.d@example.com', '222-333-4444', '45 Rue de Rivoli, Paris, France Europe', '222-33-4444', FALSE),
('Hans', 'Müller', 'hans.m@example.com', '333-444-5555', '78 Berliner Str., Berlin, Germany E.U.', '333-44-5555', TRUE),
('Elena', 'Rossi', 'elena.r@example.com', '444-555-6666', '23 Via Roma, Milan, Italy Europe', '444-55-6666', FALSE),
('Johan', 'Andersson', 'johan.a@example.com', '555-666-7777', '56 Drottninggatan, Stockholm, Sweden EU', '555-66-7777', TRUE);

3. Adım: Sütunlara yönetilen etiketler ekleme

ssn_number, home_address ve email sütunlarını pii yönetilen etiketle etiketleyin. ABAC ilkeleri, sütunları ada göre değil etikete göre eşleştirer.

Sütun has_consent, yönetilen etiketle consent etiketlenmiştir. Bu, 11. Adım'da has_consent aracılığıyla UDF'ye geçen, onay farkındalığına sahip maskeleme ilkesi için gereklidir.

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN ssn_number
SET TAGS ('pii' = 'ssn');

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN home_address
SET TAGS ('pii' = 'address');

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN email
SET TAGS ('pii' = 'email');

ALTER TABLE abac_tutorial.customers.profiles
ALTER COLUMN has_consent
SET TAGS ('consent' = '');

4. Adım: AB adreslerini algılamak için UDF oluşturma

Bu UDF'ye pii = address etiketli her sütunun değeri iletilir ve şunu döndürür:

  • FALSE adres EU, E.U. veya Europe içeriyorsa, satır gizlenir.
  • TRUE aksi takdirde, satır gösterilir.
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
);

Note

Bu, gösterim amacıyla basitleştirilmiş bir denetimdir. Üretimde, bölgeyi belirlemek için ülke kodu sütunu veya arama tablosu gibi daha sağlam bir yöntem kullanın.

5. Adım: Satır filtresi ilkesi oluşturma

İlke oluşturmak için, nesne üzerinde veya nesnenin sahipliği üzerinde MANAGE'a sahip olmalısınız. Bir ilkeye UDF eklemek için UDF üzerinde EXECUTE yetkisine sahip olmanız gerekir.

CREATE POLICY hide_eu_customers
ON SCHEMA abac_tutorial.customers
ROW FILTER is_not_eu_address
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'address') AS addr_col
USING COLUMNS (addr_col);

Ayrıca, Katalog Gezgini kullanıcı arabirimi aracılığıyla da ilke oluşturabilirsiniz. Ayrıntılar için bkz. Satır filtresi ve sütun maskesi ilkelerini oluşturma ve yönetme .

6. Adım: Satır filtresini test edin

Satır filtresi ilkesinin çalıştığını doğrulamak için aşağıdaki sorguyu çalıştırın.

SELECT * FROM abac_tutorial.customers.profiles;

Yalnızca AB dışı yerleşik 10 satır döndürülür. Beş AB müşterisi (Liam, Sophie, Hans, Elena ve Johan) gizlidir.

7. Adım: SSN'leri maskeleme amacıyla UDF oluşturma

Bu UDF, kendisine iletilen tüm SSN değerleri için tamamen sansürlenmiş bir yer tutucu döndürür.

CREATE OR REPLACE FUNCTION redact_ssn(ssn STRING)
RETURNS STRING
RETURN '***-**-****';

8. Adım: Sütun maskesi ilkesi oluşturma

pii = ssn etiketli tüm sütunları hedef alan ve her birine redact_ssn işlevini uygulayan bir ilke oluşturun.

CREATE POLICY redact_ssn_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK redact_ssn
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'ssn') AS ssn_col
ON COLUMN ssn_col;

9. Adım: Sütun maskesini test edin

Hem satır filtresinin hem de sütun maskesinin etkin olduğunu doğrulamak için aşağıdaki sorguyu çalıştırın.

SELECT * FROM abac_tutorial.customers.profiles;

SSN'ler artık ***-**-**** olarak döndürülmektedir. Satır filtresi de etkin olduğundan yalnızca AB dışı yerleşikler döndürülür.

Genişletme: Koşullu e-posta maskeleme

Aşağıdaki adımlar, onay farkındalığına sahip e-posta maskeleme ile öğreticiyi genişletir. Opt-in'yi kabul eden müşterilerin (has_consent = TRUE) tam e-postaları gösterilir; diğerleri yalnızca ilk karakteri ve etki alanını görür.

Bu UDF iki bağımsız değişken (parametre) alır:

  • email: eşleşen sütundaki gerçek e-posta değeri
  • consent: aynı satırdaki has_consent sütunun değeri
CREATE OR REPLACE FUNCTION mask_email_by_consent(email STRING, consent BOOLEAN)
RETURNS STRING
RETURN CASE
  WHEN consent = TRUE THEN email
  ELSE CONCAT(LEFT(email, 1), '***@', SUBSTRING_INDEX(email, '@', -1))
END;

11. Adım: Koşullu e-posta maskeleme ilkesini oluşturma

Bu ilke etiketlenmiş pii = email sütunları hedefler ve has_consent sütununu UDF'ye geçirir.

Note

Sütun, has_consentconsent yönetilen etiketle etiketlenmiştir. Bu gereklidir çünkü USING COLUMNS yalnızca aracılığıyla MATCH COLUMNSeşleşen sütunlara başvurabilir. Maskelenmiyor olsa da has_consent, politikanın değerini UDF'ye geçirebilmesi için etiketlenmesi gerekir.

CREATE POLICY mask_email_by_consent_policy
ON SCHEMA abac_tutorial.customers
COLUMN MASK mask_email_by_consent
TO `account users`
FOR TABLES
MATCH COLUMNS has_tag_value('pii', 'email') AS email_col,
  has_tag('consent') AS consent_col
ON COLUMN email_col
USING COLUMNS (consent_col);

12. Adım: Koşullu e-posta maskeleme test etme

Üç ilkenin de birlikte çalıştığını doğrulamak için aşağıdaki sorguyu çalıştırın.

SELECT * FROM abac_tutorial.customers.profiles;

has_consent = TRUE olan müşterilerin tam e-postaları gösterilir. has_consent = FALSE olan müşteriler maskelenmiş bir sürüm görür. SSN'ler tamamen maskelenmiş olarak kalır ve yalnızca AB üyesi olmayan müşteriler döndürülür.

ilk ad izin_var e-posta Sosyal Güvenlik Numarası
John TRUE john.doe@example.com ***-**-****
Jane FALSE j***@example.com ***-**-****
Alice TRUE alice.j@example.com ***-**-****
Bob FALSE b***@example.com ***-**-****
Charlie TRUE charlie.d@example.com ***-**-****
Emily FALSE e***@example.com ***-**-****
Frenk TRUE frank.m@example.com ***-**-****
Zarafet TRUE grace.w@example.com ***-**-****
Hank FALSE h***@example.com ***-**-****
Sarmaşık TRUE ivy.taylor@example.com ***-**-****

Özet

Bu öğreticide üç ABAC modeli gösterildi:

  • Satır filtreleme: yönetilen etiketlerle eşleşen sütun değerlerine göre satırları gizleme
  • Sütun maskeleme: yönetilen etiketlerle eşleşen sütunları maskeleme
  • Koşullu maskeleme: Bağlam sütununu etiketleyip aracılığıyla UDF'ye geçirerek sütunu aynı satırdaki başka bir sütunun değerine göre maskeleme USING COLUMNS

Temizleme

Bu öğreticide oluşturulan tüm nesneleri kaldırmak için aşağıdakileri çalıştırın. Koşullu e-posta maskeleme adımlarını atladıysanız ve DROP POLICY mask_email_by_consent_policyDROP FUNCTION mask_email_by_consent deyimleri başarısız olur ve bu beklenen bir durumdur.

DROP POLICY hide_eu_customers ON SCHEMA abac_tutorial.customers;
DROP POLICY redact_ssn_policy ON SCHEMA abac_tutorial.customers;
DROP POLICY mask_email_by_consent_policy ON SCHEMA abac_tutorial.customers;
DROP FUNCTION IF EXISTS abac_tutorial.customers.is_not_eu_address;
DROP FUNCTION IF EXISTS abac_tutorial.customers.redact_ssn;
DROP FUNCTION IF EXISTS abac_tutorial.customers.mask_email_by_consent;
DROP TABLE IF EXISTS abac_tutorial.customers.profiles;
DROP SCHEMA IF EXISTS abac_tutorial.customers CASCADE;

pii ve consent yönetilen etiketleri kaldırmak için Katalog Gezgini kullanıcı arabirimini kullanın.