Dela via


Köra federerade frågor på Snowflake (Microsoft Entra-ID)

Den här sidan beskriver hur du konfigurerar Lakehouse Federation för att köra federerade frågor på Snowflake-data som inte hanteras av Azure Databricks. Mer information om Lakehouse Federation finns i Vad är Lakehouse Federation?

Om du vill ansluta till din Snowflake-databas med Lakehouse Federation måste du skapa följande i azure Databricks Unity Catalog-metaarkivet:

  • En anslutning till snowflake-databasen.
  • En utländsk katalog som speglar din Snowflake-databas i Unity Catalog så att du kan använda Unity Catalog-frågesyntax och verktyg för datastyrning för att hantera Azure Databricks-användaråtkomst till databasen.

Den här sidan beskriver hur du kör federerade frågor på Snowflake-data med hjälp av Microsoft Entra-ID som extern OAuth-provider. Den omfattar både U2M-flöden (auktoriseringskod) och M2M-flöden (klientautentiseringsuppgifter).

Andra autentiseringsmetoder finns på följande sidor:

Du kan köra federerade frågor på Snowflake med hjälp av frågefederation eller katalogfederation.

I frågefederation skickar JDBC Unity Catalog-frågan till den externa databasen. Detta är idealiskt för rapportering på begäran eller koncepttestarbete på dina ETL-pipelines.

I katalogfederation körs Unity Catalog-frågan direkt mot fillagring. Den här metoden är användbar för inkrementell migrering utan kodanpassning eller som en mer långsiktig hybridmodell för organisationer som måste underhålla vissa data i Snowflake tillsammans med sina data som registrerats i Unity Catalog. Se Aktivera Snowflake-katalogfederation.

Innan du börjar

Krav för arbetsyta:

  • Arbetsytan är aktiverad för Unity Catalog.

Beräkningskrav:

  • Nätverksanslutning från beräkningsresursen till måldatabassystemen. Se Nätverksrekommendationer för Lakehouse Federation.
  • Azure Databricks-beräkning måste använda Databricks Runtime 13.3 LTS eller senare och standard - eller dedikerat åtkomstläge.
  • SQL-lager måste vara pro eller serverlösa och måste använda 2023.40 eller senare.

Behörigheter som krävs:

  • Om du vill skapa en anslutning måste du vara metaarkivadministratör eller användare med CREATE CONNECTION behörighet i Unity Catalog-metaarkivet som är kopplat till arbetsytan.
  • Om du vill skapa en extern katalog måste du ha behörigheten CREATE CATALOG i metaarkivet och antingen vara ägare till anslutningen eller ha CREATE FOREIGN CATALOG behörighet för anslutningen.

Ytterligare tillståndskrav specificeras i varje uppgiftsbaserad sektion som följer.

Vad är extern OAuth i Snowflake?

Extern OAuth är en autentiseringsmetod som gör att du kan använda externa servrar som använder OAuth 2.0 för att komma åt Snowflake. I stället för att en användare eller ett program loggar in direkt på Snowflake autentiserar de sig med OAuth-providern (t.ex. Okta, Microsoft Entra ID eller PingFederate).

OAuth-providern utfärdar sedan en åtkomsttoken som Databricks presenterar för Snowflake. Snowflake verifierar sedan tokens signatur och anspråk med den konfigurerade säkerhetsintegreringen, vilket ger åtkomst.

Fastställa ett OAuth-flöde

Om du vill välja rätt OAuth-flöde för din Snowflake-anslutning måste du förstå de två primära typerna: U2M (användare till dator) och M2M (maskin-till-dator).

U2M är ett auktoriseringsflöde där programmet (Azure Databricks) får behörighet att agera för användarens räkning. Det här flödet är interaktivt, vilket innebär att användaren uppmanas att logga in när en extern anslutning skapas, och programmet tar emot en åtkomsttoken som är begränsad till användarens behörigheter.

M2M är ett icke-interaktivt flöde som används när ett program behöver komma åt resurser direkt utan att användaren behöver delta. I det här flödet måste programmet registreras i OAuth-providern med en uppsättning behörigheter, oberoende av någon specifik användare.

I en Azure Databricks-arbetsyta refererar OAuth till U2M-autentisering, och OAuth Machine to Machine refererar till M2M-autentisering.

Konfigurera Microsoft Entra ID

Den exakta Entra-konfigurationen beror på företagets behov och principer. Stegen i det här och följande avsnittet fungerar som en guide för att få dig till en funktionell OAuth-installation och representerar ett enkelt, fungerande exempel, inte en fullständig Entra-resurs. Mer information om plattformen och funktionerna finns i Azure-dokumentationen.

Konfigurera OAuth-resursprogrammet

Resursprogrammet representerar Snowflake i Microsoft Entra-ID och definierar de behörigheter (omfång) som klienter kan begära.

  1. Logga in på Microsoft Azure-portalen.
  2. Gå till Microsoft Entra ID och notera Konto-ID i avsnittet Översikt. Vi refererar till det här värdet som <TENANT_ID> i framtiden.
  3. Expandera listrutan Hantera , gå till Appregistreringar och klicka på Ny registrering.
    1. Ange ett beskrivande namn, till exempel "Snowflake OAuth Resource".
    2. Välj Endast konton i den här organisationskatalogen (endast standardkatalog – enskild klient) för de kontotyper som stöds.
    3. Klicka på Registrera.
  4. I avsnittet Översikt över den nyligen skapade appregistreringen, notera värdet för program-ID (klient) refererar vi till det i framtiden som <RESOURCE_APP_ID>.
  5. Gå till Exponera ett API i lådan till vänster och klicka på Lägg till nära program-ID-URI högst upp. Standardvärdet ska vara av formatet api://<RESOURCE_APP_ID> och det fungerar som OAuth-målgruppsanspråket. Du kan i stället ange ett värde som innehåller organisationens domän, till exempel https://yourorg.onmicrosoft.com/<RESOURCE_APP_ID> (se Begränsningar för identifierar-URI:er för Microsoft Entra-program). Spara det slutliga värdet, vi refererar till det som <SNOWFLAKE_APPLICATION_ID_URI> under konfigurationen av säkerhetsintegrering.
  6. (endast U2M) I avsnittet Exponera ett API klickar du på Lägg till ett omfång.
    1. Ange namnet på din Snowflake-roll med prefixet session:role: som omfångsnamn. Till exempel session:role:analyst.
    2. Välj vem som kan samtycka.
    3. Ange visningsnamnet för administratörsmedgivande, t.ex. kontoadministratör.
    4. Ange beskrivningen av administratörsmedgivande, t.ex. Kan administrera Snowflake-kontot.
    5. Klicka slutligen på Lägg till omfång.
  7. (endast M2M) Gå till Applikationsroller och klicka på Skapa applikationsroll.
    1. Visningsnamn: ange ett namn, det kan matcha rollvärdet, i vårt fall PUBLIC.
    2. Tillåtna medlemstyper: välj Program.
    3. Värde: välj omfånget, vi använder session:role:PUBLIC.
    4. Beskrivning: Ange en beskrivning – helst bör du beskriva den åtkomstnivå som rollen ger.
    5. Vill du aktivera den här rollen för appen? Kontrollera att din roll är aktiverad genom att markera bockmarkeringen.
    6. Klicka på Använd.

Skapa ett OAuth-klientprogram

Klientprogrammet representerar klienten (Azure Databricks) som ansluter till Snowflake för att hämta token.

  1. Gå till Appregistreringar igen och klicka på Ny registrering.
    1. Ange ett beskrivande namn, till exempel "Snowflake OAuth Client".
    2. För kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen (endast standardkatalog – enskild klient).
    3. Klicka på Registrera.
  2. I avsnittet Översikt kopierar och sparar du fältet Program-ID (klient-ID ). Det här värdet kallas <CLIENT_ID> för i framtiden när du konfigurerar en anslutning i Azure Databricks.
  3. (endast M2M) Klicka på länken bredvid Hanterat program i den lokala katalogen. Där kopierar och sparar du värdet i fältet Objekt-ID . I framtida steg kommer vi att referera till detta som <CLIENT_OBJECT_ID> – det krävs för att skapa en mappning mellan klienten och säkerhetsintegrering i Snowflake.
  4. Gå tillbaka och expandera listrutan Hantera . Där navigerar du till Certifikat och hemligheter och klickar sedan på Ny klienthemlighet.
    1. Välj en beskrivning, t.ex. Azure Databricks-klienthemlighet
    2. Välj hemlighetens förfallodatum enligt dina behov. När hemligheten upphör att gälla måste du skapa en ny i Entra och uppdatera anslutningen i Azure Databricks.
    3. Klicka på Lägg till nedan.
    4. När du har lagt till det kopierar du och lagrar värdet på ett säkert sätt i kolumnen Värde . Du kommer inte att kunna se det igen när du har lämnat sidan. Vi refererar till det här värdet som <CLIENT_SECRET> när du skapar en anslutning i Azure Databricks.
  5. Gå till API-behörigheter och klicka på Lägg till en behörighet.
    1. Gå till fliken API:er som min organisation använder .
    2. Sök efter resursappen som du skapade i föregående avsnitt och klicka på den.
    3. (endast U2M) Klicka på den stora knappen Delegerade behörigheter och välj den roll som du skapade i föregående steg under Behörigheter.
    4. (endast M2M) Klicka på den stora knappen Programbehörigheter och välj den roll som du skapade i föregående steg under Behörigheter.
    5. Klicka på Lägg till behörigheter.
  6. Klicka slutligen på Bevilja administratörsmedgivande för standardkatalogen.
  7. (endast U2M) Det sista steget är att konfigurera en omdirigerings-URI. När du initierar Entra-inloggningsprocessen från Azure Databricks meddelar omdirigerings-URL:en Entra vilken Azure Databricks-sida du ska gå tillbaka till om inloggningen lyckades.
    1. I listrutan Hantera navigerar du till avsnittet Autentisering .
    2. Klicka på Lägg till en plattform och välj Webbprogram.
    3. Ange en omdirigerings-URI i formatet https://<YOUR_DATABRICKS_WORKSPACE>/login/oauth/snowflake.html.
    4. Klicka på Konfigurera.

Skapa en säkerhetsintegrering i Snowflake

Det här steget konfigurerar en säkerhetsintegrering i Snowflake så att den kan kommunicera säkert med Entra-ID, validera Entra-ID-token och tillhandahålla lämplig dataåtkomst baserat på den roll som är associerad med OAuth-åtkomsttoken.

Flöde från användare till dator

  1. Anslut till ditt Snowflake-konto som en användare med ACCOUNTADMIN rollen .

  2. Kör CREATE SECURITY INTEGRATION kommandot. Till exempel:

    CREATE SECURITY INTEGRATION <ENTRA_U2M_SECURITY_INTEGRATION_NAME>
    TYPE = EXTERNAL_OAUTH
    ENABLED = TRUE
    EXTERNAL_OAUTH_TYPE = AZURE
    EXTERNAL_OAUTH_ISSUER = 'https://sts.windows.net/<TENANT_ID>/'
    EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys'
    EXTERNAL_OAUTH_AUDIENCE_LIST = ('<SNOWFLAKE_APPLICATION_ID_URI>')
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'email'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'EMAIL_ADDRESS';
    

    I exemplet används anspråket och attributet för e-postmappning . Detta kräver att din Snowflake-användares e-post matchar e-postmeddelandet i Azure-klientorganisationen.

    ALTER USER <SNOWFLAKE_USER> SET EMAIL = '<YOUR_EMAIL>';
    

    Det är möjligt att använda olika anspråk, beroende på dina behov.

Maskin-till-dator-flöde

  1. Anslut till ditt Snowflake-konto som en användare med ACCOUNTADMIN rollen .

  2. Kör CREATE SECURITY INTEGRATION kommandot. Till exempel:

    CREATE OR REPLACE SECURITY INTEGRATION <ENTRA_M2M_SECURITY_INTEGRATION_NAME>
    TYPE = EXTERNAL_OAUTH
    ENABLED = TRUE
    EXTERNAL_OAUTH_TYPE = AZURE
    EXTERNAL_OAUTH_ISSUER = 'https://sts.windows.net/<TENANT_ID>/'
    EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://login.microsoftonline.com/<TENANT_ID>/discovery/v2.0/keys'
    EXTERNAL_OAUTH_AUDIENCE_LIST = ('<SNOWFLAKE_APPLICATION_ID_URI>')
    EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
    EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name';
    

    Du måste skapa en ny icke-mänsklig användare i Snowflake för att representera klienten som ansluter till databasen. Det här steget krävs för att Snowflake ska kunna verifiera och mappa en användare till klientappen som representerar Azure Databricks i Azure Entra ID.

    CREATE OR REPLACE USER <ENTRA_M2M_CLIENT_USER>
    LOGIN_NAME = '<CLIENT_OBJECT_ID>'
    DEFAULT_ROLE = 'PUBLIC';
    

Skapa en anslutning

En anslutning anger en sökväg och autentiseringsuppgifter för åtkomst till ett externt databassystem. Om du vill skapa en anslutning kan du använda Catalog Explorer eller kommandot CREATE CONNECTION SQL i en Azure Databricks-notebook-fil eller Databricks SQL-frågeredigeraren.

Anmärkning

Du kan även använda Databricks REST API eller Databricks CLI för att skapa en anslutning. Se POST /api/2.1/unity-catalog/connections och Unity Catalog-kommandon.

Behörigheter som krävs: Metastore-admin eller användare med CREATE CONNECTION-behörighet.

Flöde från användare till dator

  1. På din Azure Databricks-arbetsyta klickar du på dataikonen.Katalog.

  2. Längst upp i fönstret Catalog, klicka på ikonen Lägg till eller plusLägg till och välj Lägg till en anslutning från menyn.

    Du kan också klicka på knappen på sidan >, gå till fliken Anslutningar och klicka på Skapa anslutning.

  3. På sidan Anslutningsgrundläggande i Installera anslutningsguiden anger du ett användarvänligt Anslutningsnamn.

  4. Välj en Anslutningstyp för Snowflake.

  5. För autentiseringstyp väljer du OAuth från den nedrullningsbara menyn.

  6. (Valfritt) Lägg till en kommentar.

  7. Klicka på Nästa.

  8. Ange följande autentiserings- och anslutningsinformation för ditt Snowflake-lager.

    • Host: Till exempel snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • Port: Till exempel 443

    • Användare: Till exempel snowflake-user

    • Auktoriseringsslutpunkt: https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/authorize

    • Klienthemlighet: Klienthemligheten som du sparade när du skapade säkerhetsintegrering.

    • Klient-ID: Det klient-ID som du sparade när du skapade säkerhetsintegrering.

    • OAuth-omfång: api://<RESOURCE_APP_ID>/.default offline_access

    • OAuth-provider: Azure Entra ID

    • Logga in med Microsoft Entra-ID: Klicka och logga in på Snowflake med dina Microsoft-autentiseringsuppgifter.

      Vid lyckad inloggning dirigeras du tillbaka till guiden Konfigurera anslutning.

  9. Klicka på Skapa anslutning.

  10. På sidan Grundläggande katalog anger du ett namn för den externa katalogen. En extern katalog speglar en databas i ett externt datasystem så att du kan köra frågor mot och hantera åtkomst till data i databasen med hjälp av Azure Databricks och Unity Catalog.

  11. (Valfritt) Klicka på Testa anslutning för att bekräfta att den fungerar.

  12. Klicka på Skapa katalog.

  13. På sidan Åtkomst väljer du de arbetsytor där användarna kan komma åt katalogen som du skapade. Du kan välja Alla arbetsytor har åtkomst eller klicka på Tilldela till arbetsytor, välja arbetsytor och sedan klicka på Tilldela.

  14. Ändra ägaren som ska kunna hantera åtkomsten till alla objekt i katalogen. Börja skriva en princip i textrutan och klicka sedan på principen i de returnerade resultaten.

  15. Bevilja privilegier i katalogen. Klicka på Tillåt:

    1. Ange de huvudnamn som ska ha åtkomst till objekt i katalogen. Börja skriva en princip i textrutan och klicka sedan på principen i de returnerade resultaten.
    2. Välj förinställningarna för privilegier som ska beviljas varje huvudaktör . Alla kontoanvändare beviljas BROWSE som standard.
      • Välj Dataläsare på den nedrullningsbara menyn för att bevilja read behörigheter för objekt i katalogen.
      • Välj Dataredigeraren på den nedrullningsbara menyn för att bevilja read och modify behörigheter för objekt i katalogen.
      • Välj de behörigheter som ska beviljas manuellt.
    3. Klicka på Tillåt.
  16. Klicka på Nästa.

  17. På sidan Metadata anger du taggar nyckel/värde-par. Mer information finns i Tillämpa taggar på skyddsbara objekt i Unity Catalog.

  18. (Valfritt) Lägg till en kommentar.

  19. Klicka på Spara.

Maskin-till-Maskin flöde – Katalogutforskare

  1. På din Azure Databricks-arbetsyta klickar du på dataikonen.Katalog.

  2. Längst upp i fönstret Catalog, klicka på ikonen Lägg till eller plusLägg till och välj Lägg till en anslutning från menyn.

    Du kan också klicka på knappen på sidan >, gå till fliken Anslutningar och klicka på Skapa anslutning.

  3. På sidan Anslutningsgrundläggande i Installera anslutningsguiden anger du ett användarvänligt Anslutningsnamn.

  4. Välj en Anslutningstyp för Snowflake.

  5. För autentiseringstyp väljer du OAuth Machine to Machine från den nedrullningsbara menyn.

  6. (Valfritt) Lägg till en kommentar.

  7. Klicka på Nästa.

  8. Ange följande autentiseringsinformation för anslutningen.

    • Host: Till exempel snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • Port: Till exempel 443
    • Openid-metadataslutpunkt: https://login.microsoftonline.com/<TENANT_ID>/v2.0/.well-known/openid-configuration
    • Klienthemlighet: Klienthemligheten som du sparade när du skapade säkerhetsintegrering.
    • Klient-ID: Det klient-ID som du sparade när du skapade säkerhetsintegrering.
    • OAuth-omfång: api://<RESOURCE_APP_ID>/.default
  9. Klicka på Nästa.

  10. Ange följande anslutningsinformation för anslutningen:

    • Snowflake-lager: Namnet på det lager som du vill använda.
    • (Valfritt) proxyvärd: Värd för proxyn som används för att ansluta till Snowflake. Du måste också välja Använd proxy och ange proxyport.
    • (Valfritt) Använd proxy: Om du vill ansluta till Snowflake med hjälp av en proxyserver.
    • (Valfritt) Proxyport: Port för proxyn som används för att ansluta till Snowflake. Du måste också välja Använd proxy och ange Proxyvärd.
    • (Valfritt) Snowflake-roll: Standardsäkerhetsrollen som ska användas för sessionen efter anslutningen.
  11. Klicka på Skapa anslutning.

  12. På sidan Grundläggande katalog anger du ett namn för den externa katalogen. En extern katalog speglar en databas i ett externt datasystem så att du kan köra frågor mot och hantera åtkomst till data i databasen med hjälp av Azure Databricks och Unity Catalog.

  13. (Valfritt) Klicka på Testa anslutning för att bekräfta att den fungerar.

  14. Klicka på Skapa katalog.

  15. På sidan Åtkomst väljer du de arbetsytor där användarna kan komma åt katalogen som du skapade. Du kan välja Alla arbetsytor har åtkomst eller klicka på Tilldela till arbetsytor, välja arbetsytor och sedan klicka på Tilldela.

  16. Ändra ägaren som ska kunna hantera åtkomsten till alla objekt i katalogen. Börja skriva en princip i textrutan och klicka sedan på principen i de returnerade resultaten.

  17. Bevilja privilegier i katalogen. Klicka på Tillåt:

    1. Ange de huvudnamn som ska ha åtkomst till objekt i katalogen. Börja skriva en princip i textrutan och klicka sedan på principen i de returnerade resultaten.
    2. Välj förinställningarna för privilegier som ska beviljas varje huvudaktör . Alla kontoanvändare beviljas BROWSE som standard.
      • Välj Dataläsare på den nedrullningsbara menyn för att bevilja read behörigheter för objekt i katalogen.
      • Välj Dataredigeraren på den nedrullningsbara menyn för att bevilja read och modify behörigheter för objekt i katalogen.
      • Välj de behörigheter som ska beviljas manuellt.
    3. Klicka på Tillåt.
  18. Klicka på Nästa.

  19. På sidan Metadata anger du taggar nyckel/värde-par. Mer information finns i Tillämpa taggar på skyddsbara objekt i Unity Catalog.

  20. (Valfritt) Lägg till en kommentar.

  21. Klicka på Spara.

Flöde från dator till dator – SQL

Kör följande kommando i en notebook-fil eller Databricks SQL-frågeredigeraren.

CREATE CONNECTION <connection-name>
TYPE SNOWFLAKE
OPTIONS (
  host '<hostname>',
  port '443',
  sfWarehouse '<warehouse-name>',
  client_id '<client-id>',
  client_secret '<client-secret>',
  openid_metadata_endpoint '<oidc-metadata-endpoint>',
  oauth_scope 'session:role:PUBLIC'
);

Du kan sedan skapa en sekundär katalog med hjälp av den nya anslutningen genom att köra följande kommando:

CREATE FOREIGN CATALOG <catalog-name>
USING CONNECTION <connection-name>
OPTIONS (database = '<database>');

Skiftlägeskänsliga databasidentifierare

Fältet database i den externa katalogen mappar till en Snowflake-databasidentifierare. Om Snowflake-databasidentifieraren inte är skiftlägeskänslig bevaras det hölje som du använder i den externa katalogen <database-name>. Men om Snowflake-databasidentifieraren är skiftlägeskänslig måste du omsluta den utländska katalogen <database-name> med dubbla citattecken så att skiftläget bevaras.

Till exempel:

  • database konverteras till DATABASE

  • "database" konverteras till database

  • "database""" konverteras till database"

    För att undvika ett dubbelt citattecken, använd ett annat dubbelt citattecken.

  • "database"" resulterar i ett fel eftersom det dubbla citattecknet inte är korrekt escapet.

Mer information finns i Identifierarkrav i Snowflake-dokumentationen.

Pushdowns som stöds

Följande nedtryckningar stöds:

  • Filterar
  • Prognoser
  • Begränsning
  • Ansluter sig
  • Aggregat (Medelvärde, Korrel, KovariansPop, KovariansSamp, Antal, Max, Min, StdavvikelsePop, StdavvikelseSamp, Summa, VariansPop, VariansSamp)
  • Funktioner (strängfunktioner, matematiska funktioner, data- och tids- och tidsstämpelfunktioner, och andra olika funktioner, till exempel Alias, Cast, SortOrder)
  • Windows-funktioner (DenseRank, Rank, RowNumber)
  • Sortering

Datatypsmappningar

När du läser från Snowflake till Spark mappar datatyper enligt följande:

Snöflingetyp Sparktyp
decimal, nummer, siffra Decimaltyp
bigint, byteint, int, heltal, smallint, tinyint IntegerType
float, float4, float8 Flyttalstyp
dubbel, dubbelprecision, reell DubbelTyp
char, tecken, sträng, text, tid, varchar strängtyp
binär Binärtyp
booleskt Booleskt Datatyp
datum Datumtyp
datum och tid, tidsstämpel, timestamp_ltz, timestamp_ntz, timestamp_tz Tidsstämpeltyp

Begränsningar

  • Snowflake OAuth-slutpunkten måste vara tillgänglig från Azure Databricks-kontrollplanets IP-adresser. Se Utgående IP-adresser från Azure Databricks-kontrollplanet. Snowflake stöder konfiguration av nätverksprinciper på säkerhetsintegreringsnivå, vilket möjliggör en separat nätverksprincip som möjliggör direkt anslutning från Azure Databricks-kontrollplanet till OAuth-slutpunkten för auktorisering.