Verbundberechtigungen für Amazon Redshift — Beispiele end-to-end - Amazon Redshift

Amazon Redshift wird UDFs ab dem 1. November 2025 die Erstellung von neuem Python nicht mehr unterstützen. Wenn Sie Python verwenden möchten UDFs, erstellen Sie das UDFs vor diesem Datum liegende. Bestehendes Python UDFs wird weiterhin wie gewohnt funktionieren. Weitere Informationen finden Sie im Blog-Posting.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verbundberechtigungen für Amazon Redshift — Beispiele end-to-end

Das folgende end-to-end Beispiel zeigt, wie Sie mithilfe von Amazon Redshift Federated Permissions umfassende Datenverwaltungsrichtlinien erstellen und verwalten können. Zu diesen Richtlinien gehören Row Level Security (RLS), Dynamic Data Masking (DDM) und Column Level Permissions (CLP), die zusammenarbeiten, um den Datenzugriff auf der Grundlage von Benutzerrollen und -bedingungen zu steuern.

Sie müssen die sys:secadmin-Rolle besitzen superuser oder über die Rolle sys:secadmin verfügen, um dieses Beispiel ausführen zu können.

Voraussetzungen

In den Beispielen wird davon ausgegangen, dass die unten aufgeführten Rollen „iamr:role_name“ bereits im Konto vorhanden sind. Falls nicht, erstellen Sie sie bitte. Darüber hinaus ist das Redshift Data Warehouse AWS Glue Data Catalog mit dem Namen „catalog_name“ registriert und verfügt über eine Datenbank mit „db_name“.

Weisen Sie auf der Kataloginstanz der entsprechenden IAM-Rolle die Rolle sys:secadmin zu

-- Grant sys:secadmin role to relevant user (must be run on Redshift catalog instance) GRANT ROLE sys:secadmin TO "IAMR:AccountSecurityAdminrole_name";

Der Rest wird im Redshift Compute Warehouse ausgeführt

Wenn Sie IAM- oder IdC-Benutzer verwenden, können Sie die folgenden zwei Schritte zum Erstellen von lokalen Warehouse-Benutzern und zur globalen Identitätszuweisung überspringen.

Schritt 1: Erstellen des lokalen Warehouses, die für das Testen der Governance-Richtlinien erforderlich sind

-- Create test users. CREATE USER alice WITH PASSWORD 'Alice_pass_1'; CREATE USER oscar WITH PASSWORD 'Oscar_pass_1'; CREATE USER sierra WITH PASSWORD 'Sierra_pass_1';

Schritt 2: Einrichtung der IAM-Rollenzuordnung von Global Identity

-- Map local users to IAM roles (executed by superuser). -- Make user sierra a sys:secadmin by setting the global identity -- to `IAMR:AccountSecurityAdmin`. -- This role has been granted secadmin privilege on Redshift catalog instance. ALTER USER sierra SET GLOBAL IDENTITY IAM_ROLE 'arn:aws:iam::123456789012:role/AccountSecurityAdmin'; ALTER USER alice SET GLOBAL IDENTITY IAM_ROLE 'arn:aws:iam::123456789012:role/Analyst'; ALTER USER oscar SET GLOBAL IDENTITY IAM_ROLE 'arn:aws:iam::123456789012:role/Operator'; -- Verify global identity settings. SET SESSION AUTHORIZATION sierra; SHOW GLOBAL IDENTITY; SET SESSION AUTHORIZATION alice; SHOW GLOBAL IDENTITY; SET SESSION AUTHORIZATION oscar; SHOW GLOBAL IDENTITY; -- Reset to default session. RESET SESSION AUTHORIZATION;

Einrichtung der Umgebung

Erstellen Sie zunächst Tabellen und füllen Sie sie mit Beispielkundendaten und Nachschlagetabellen für Governance-Richtlinien.

-- Create the main customer table. CREATE TABLE db_name@catalog_name.public.customers ( id INTEGER, name VARCHAR(50), email VARCHAR(100), region VARCHAR(20), revenue DECIMAL(10,2) ); -- Populate with sample customer data. INSERT INTO db_name@catalog_name.public.customers VALUES (1, 'John Smith', 'john@email.com', 'US', 1000.00), (2, 'Jane Doe', 'jane@email.com', 'EU', 500.00), (3, 'Mike Johnson', 'mike@email.com', 'US', 2000.00); -- Grant basic table access. GRANT ALL ON db_name@catalog_name.public.customers TO PUBLIC; -- Create lookup table for region-based policies. CREATE TABLE db_name@catalog_name.public.lookup_regions ( region_code VARCHAR(20), allowed BOOLEAN ); INSERT INTO db_name@catalog_name.public.lookup_regions VALUES ('US', TRUE), ('EU', FALSE), ('APAC', TRUE); GRANT ALL ON db_name@catalog_name.public.lookup_regions TO PUBLIC; -- Create lookup table for revenue-based masking. CREATE TABLE db_name@catalog_name.public.lookup_revenue_tiers (base_revenue INTEGER); INSERT INTO db_name@catalog_name.public.lookup_revenue_tiers VALUES (1000), (2000); GRANT ALL ON db_name@catalog_name.public.lookup_revenue_tiers TO PUBLIC;

Berechtigungen auf Spaltenebene (CLP) einrichten

Konfigurieren Sie den Zugriff auf Spaltenebene für verschiedene Benutzer, um zu steuern, auf welche Spalten Benutzer zugreifen können.

-- Grant specific column access to Analyst i.e. `alice`. GRANT SELECT (id, region) ON db_name@catalog_name.public.customers TO "IAMR:Analyst"; -- Grant different column access to Operator i.e. `oscar`. GRANT SELECT (id, name, revenue) ON db_name@catalog_name.public.customers TO "IAMR:operator";

Richtlinien für Sicherheit auf Zeilenebene (Row Level Security, RLS) erstellen

Erstellen Sie RLS-Richtlinien, um zu steuern, welche Zeilen Benutzer auf der Grundlage ihrer Berechtigungen und Datenbedingungen sehen können.

-- Switch to admin user to create policies. SET SESSION AUTHORIZATION sierra; -- Create simple RLS policy: Analysts see only US customers. CREATE RLS POLICY db_name@catalog_name.us_only WITH (region VARCHAR(20)) USING (region = 'US'); -- Attach the policy to the Analyst i.e. `alice`. ATTACH RLS POLICY db_name@catalog_name.us_only ON db_name@catalog_name.public.customers TO "IAMR:Analyst"; -- Enable row level security on the table. ALTER TABLE db_name@catalog_name.public.customers ROW LEVEL SECURITY ON; -- Create advanced RLS policy using lookup table. CREATE RLS POLICY db_name@catalog_name.region_lookup_policy WITH (region VARCHAR(20)) AS r USING (r.region IN ( SELECT region_code FROM public.lookup_regions WHERE allowed = TRUE )); -- Attach the lookup-based policy to Operator i.e. `oscar`. ATTACH RLS POLICY db_name@catalog_name.region_lookup_policy ON db_name@catalog_name.public.customers TO "IAMR:Operator";

Richtlinien für dynamische Datenmaskierung (DDM) erstellen

Erstellen Sie Maskierungsrichtlinien, um vertrauliche Daten auf der Grundlage von Benutzerrollen und -bedingungen zu verschleiern.

-- Create masking policy for PII data (names and emails). CREATE MASKING POLICY db_name@catalog_name.mask_pii WITH (DATA VARCHAR(100)) USING (SHA2(DATA + 'secret', 256)::TEXT); -- Attach masking to name and email columns for all users. ATTACH MASKING POLICY db_name@catalog_name.mask_pii ON db_name@catalog_name.public.customers (name) TO PUBLIC; ATTACH MASKING POLICY db_name@catalog_name.mask_pii ON db_name@catalog_name.public.customers (email) TO PUBLIC; -- Create conditional masking policy for revenue data. CREATE MASKING POLICY db_name@catalog_name.conditional_mask WITH (revenue DECIMAL(10,2)) USING (CASE WHEN revenue IN (SELECT base_revenue FROM public.lookup_revenue_tiers) THEN revenue ELSE 0.00 END); -- Attach conditional masking to Analyst i.e. `alice` with priority. ATTACH MASKING POLICY db_name@catalog_name.conditional_mask ON db_name@catalog_name.public.customers (revenue) TO "IAMR:Analyst" PRIORITY 20;

Available/Applied Richtlinien für die Überwachung

Verwenden Sie SHOW-Befehle, um zu überprüfen, ob Ihre Governance-Richtlinien ordnungsgemäß konfiguriert sind.

-- Show all RLS policies in the database. SHOW RLS POLICIES FROM DATABASE db_name@catalog_name LIMIT 10; -- Show RLS policies for specific users and tables. SHOW RLS POLICIES ON db_name@catalog_name.public.customers FOR "IAMR:Analyst" LIMIT 10; SHOW RLS POLICIES ON db_name@catalog_name.public.customers FOR "IAMR:Operator" LIMIT 10; SHOW RLS POLICIES ON db_name@catalog_name.public.customers FOR PUBLIC LIMIT 10; -- Show all masking policies in the database. SHOW MASKING POLICIES FROM DATABASE db_name@catalog_name LIMIT 10; -- Show Masking policies for specific users and tables. SHOW MASKING POLICIES ON db_name@catalog_name.public.customers FOR "IAMR:Analyst" LIMIT 10; SHOW MASKING POLICIES ON db_name@catalog_name.public.customers FOR "IAMR:Operator" LIMIT 10; SHOW MASKING POLICIES ON db_name@catalog_name.public.customers FOR PUBLIC LIMIT 10;

Testen von Zugriffsmustern

Testen Sie anhand ihrer Rollen und der angewandten Richtlinien, wie verschiedene Benutzer die Daten sehen.

-- Test as analyst: Only US customers, only id/region columns, -- conditional revenue masking. SET SESSION AUTHORIZATION alice; SELECT id, region FROM db_name@catalog_name.public.customers ORDER BY id; SELECT id, region, revenue FROM db_name@catalog_name.public.customers ORDER BY id; -- Test as operator: Allowed regions only, masked names, specific columns. SET SESSION AUTHORIZATION oscar; SELECT id, name, revenue FROM db_name@catalog_name.public.customers ORDER BY id; SELECT id, name, region FROM db_name@catalog_name.public.customers ORDER BY id; -- Test as admin: Full access to all data. SET SESSION AUTHORIZATION sierra; SELECT * FROM db_name@catalog_name.public.customers ORDER BY id;

Richtlinien ändern

Ändern Sie bestehende Richtlinien, um ihr Verhalten zu ändern, ohne sie neu erstellen zu müssen.

-- Switch back to admin user. SET SESSION AUTHORIZATION sierra; -- Alter the PII masking policy to use simple string replacement. ALTER MASKING POLICY db_name@catalog_name.mask_pii USING ('***MASKED***'::TEXT); -- Alter the conditional masking policy to use different threshold. ALTER MASKING POLICY db_name@catalog_name.conditional_mask USING (CASE WHEN revenue >= 500.00 THEN revenue ELSE -1.00 END); -- Alter the RLS policy to show only disallowed regions. ALTER RLS POLICY db_name@catalog_name.region_lookup_policy USING (r.region IN ( SELECT region_code FROM db_name@catalog_name.public.lookup_regions WHERE allowed = FALSE ));

Richtlinien trennen und löschen

Entfernen Sie Richtlinien, wenn sie nicht mehr benötigt werden.

-- Detach RLS policies from users. DETACH RLS POLICY db_name@catalog_name.us_only ON db_name@catalog_name.public.customers FROM "IAMR:Analyst"; DETACH RLS POLICY db_name@catalog_name.region_lookup_policy ON db_name@catalog_name.public.customers FROM "IAMR:Operator"; -- Detach masking policies. DETACH MASKING POLICY db_name@catalog_name.mask_pii ON db_name@catalog_name.public.customers (name) FROM PUBLIC; DETACH MASKING POLICY db_name@catalog_name.mask_pii ON db_name@catalog_name.public.customers (email) FROM PUBLIC; DETACH MASKING POLICY db_name@catalog_name.conditional_mask ON db_name@catalog_name.public.customers (revenue) FROM "IAMR:Analyst";

Aufräumen: Schalten Sie RLS aus und löschen Sie Richtlinien

-- Turn off Row-level security. ALTER TABLE db_name@catalog_name.public.customers ROW LEVEL SECURITY OFF; -- Drop policies. DROP RLS POLICY db_name@catalog_name.us_only CASCADE; DROP RLS POLICY db_name@catalog_name.region_lookup_policy CASCADE; DROP MASKING POLICY db_name@catalog_name.mask_pii CASCADE; DROP MASKING POLICY db_name@catalog_name.conditional_mask CASCADE; -- Drop tables. DROP TABLE db_name@catalog_name.public.customers; DROP TABLE db_name@catalog_name.public.lookup_regions; DROP TABLE db_name@catalog_name.public.lookup_revenue_tiers;

Setzen Sie die globale Identität zurück

-- TO rest the global identity. ALTER USER alice RESET GLOBAL IDENTITY; ALTER USER oscar RESET GLOBAL IDENTITY; ALTER USER sierra RESET GLOBAL IDENTITY;