Schritt 6: Azure-Sicherheitsrichtlinie für Proxydienst im Portal erstellen¶
Die vorherigen Schritte ermöglichen es, dass Ihre importierten APIs (und Ihre Azure-Funktion) nicht nur von Snowflake aufgerufen werden können, sondern auch von anderen authentifizierten Clients, wie z. B. Anwendungen, die sich in Ihrem Azure AD-Mandantenbereich befinden oder die einen Dienstprinzipal in Ihrem Azure AD-Mandantenbereich haben.
Wenn Sie möchten, dass die Azure-Funktion nur von Snowflake aufgerufen werden darf, müssen Sie eine Token-Validierung implementieren. Bei Verwendung der Token-Validierung präsentiert Snowflake beim Versuch, auf den API Management-Dienst zuzugreifen, ein JWT (JSON Web Token)-Zugriffstoken, das von Azure AD bereitgestellt wurde. Der API Management-Dienst kann das JWT entweder validieren oder ohne Validierung akzeptieren.
Unter diesem Thema finden Sie eine Anleitung zum Erstellen einer Sicherheitsrichtlinie für den API Management-Dienst durch Hinzufügen einer validate-JWT-Richtlinie, die die Regeln für die Validierung des Tokens definiert.
Wichtig
Snowflake empfiehlt dringend die Erstellung einer Sicherheitsrichtlinie für den API Management-Dienst. Nach Abschluss dieses Schritts darf nur noch Snowflake Ihre Azure-Funktion über den API Management-Dienst aufrufen.
Wenn Sie es vorziehen, die rollenbasierte Validierung in Ihrer validate-JWT-Richtlinie zu verwenden, finden Sie in der Microsoft-Dokumentation zum Dienstprinzipal unter New-AzureADServiceAppRoleAssignment eine Anleitung zum Zuweisen einer Rolle zu einem Dienstprinzipal.
Unter diesem Thema:
Vorheriger Schritt¶
Schritt 5: Externe Funktion für Azure in Snowflake erstellen
Eine validate-JWT-Richtlinie erstellen, die Snowflake das Aufrufen der Azure-Funktion erlaubt¶
In diesem Abschnitt wird gezeigt, wie Sie eine Richtlinie für die Validierung eines JSON Web Token (JWT) angeben, das Snowflake autorisiert, Ihre Azure-Funktion aufzurufen. Die Validierungsrichtlinie („validate-JWT policy“) validiert die folgenden zwei Ansprüche im JWT:
Die Anwendungs-ID des Snowflake-Dienstprinzipals.
Die Zielanwendungs-App-ID (die „audience ID“ oder einfach „aud“) der Azure-Funktion.
Weitere Informationen zu Ansprüchen an JSON Web Tokens (JWTs), die von Azure Active Directory erhoben werden, finden Sie in der Microsoft-Dokumentation unter Zugiffstoken.
Mit den folgenden Schritten wird die importierte API für die Verwendung eines JSON Web Token konfiguriert:
Melden Sie sich beim Azure-Portal an.
Gehen Sie zum Bildschirm API Management service.
Wählen Sie Ihren API Management-Dienst aus.
Suchen Sie in der linken Spalte den Abschnitt „APIs “, und klicken Sie dann darunter auf die Option „APIs “.
Klicken Sie in der Spalte, die All APIs enthält, auf den Namen der API, für die Sie eine Sicherheitsrichtlinie hinzufügen möchten.
Suchen Sie nach In-bound Processing.
Klicken Sie auf + Add policy.
Klicken Sie auf validate-jwt.
Geben Sie unter Header name den Wert
Authorization
ein.Fügen Sie die Validierung des JWT (JSON Web Token) hinzu, der von Snowflake für den Zugriff auf die Azure-Funktion bereitgestellt wird:
Suchen Sie nach Required claims, und klicken Sie auf + Add claim.
Geben Sie unter Name den Wert
aud
(kurz für „audience“ (Zielgruppe)) ein.Suchen Sie innerhalb des erforderlichen Anspruchs nach Values, und klicken Sie auf +Add value.
Fügen Sie die UUID hinzu, die Sie als „azure_ad_application_id“ im Befehl CREATE API INTEGRATION verwendet haben. Diese UUID haben Sie sich auf dem Arbeitsblatt unter
Azure Function App AD Application ID
notiert.
Fügen Sie einen separaten „claim“ (Anspruch) für Snowflake hinzu:
Klicken Sie erneut auf + Add claim:
Geben Sie unter Name die Zeichenfolge
appid
ein.Klicken Sie innerhalb des Anspruchs (Claim) auf + Add value, und fügen Sie im Feld Values die Snowflake-App-ID hinzu.
Wenn Sie noch keine Snowflake-App-ID haben, können Sie diese durch Ausführen der folgenden Schritte ermitteln (die Snowflake-App-ID ist im Feld Application ID zu finden):
Suchen Sie auf dem Arbeitsblatt Ihren Eintrag zu AZURE_MULTI_TENANT_APP_NAME.
Suchen Sie über das Suchfeld des Azure Portal nach Enterprise Applications.
Dies bringt Sie zum Bildschirm Enterprise applications | All applications.
Suchen Sie auf diesem Bildschirm nach AZURE_MULTI_TENANT_APP_NAME.
Das Suchfeld für Unternehmensanwendungen hat keine Bezeichnung. Achten Sie auf ein breites Feld direkt über der Liste der Unternehmensanwendungen. In dem Feld könnte etwas Ähnliches stehen wie First 50 shown, to search all of your applications, enter a display name or the application ID.
Wenn die beiden Werte für AZURE_MULTI_TENANT_APP_NAME nicht exakt übereinstimmen, dann führen Sie die Suche erneut aus, verwenden Sie diesmal aber nur die ersten Zeichen dieses Namens (wenn der Name einen Unterstrich enthält, dann schließen Sie weder den Unterstrich noch irgendwelche Zeichen nach dem Unterstrich ein).
Suchen Sie den Application ID-Wert für AZURE_MULTI_TENANT_APP_NAME.
Fügen Sie folgenden Wert in Open ID URLs ein:
https://login.microsoftonline.com/<tenant_id>/.well-known/openid-configuration
Ersetzen Sie die
<tenant_id>
mit Ihrer Azure AD-Mandanten-ID (wie im Abschnitt Voraussetzungen zur Planung einer externen Funktion beschrieben).Klicken Sie auf Save.
Externe Funktion testen¶
Um sicherzustellen, dass Ihre externe Funktion mit der neuen Sicherheitsrichtlinie korrekt funktioniert, rufen Sie Ihre externe Funktion erneut auf.
Weitere Details dazu finden Sie unter Aufrufen einer externen Funktion für Azure.
IP-Adressen einschränken, von denen Azure Functions-Aufrufe akzeptiert werden (optional)¶
Neben der Angabe einer validate-JWT-Richtlinie (oder der Verwendung der rollenbasierten Validierung) können Sie zusätzliche Sicherheit implementieren, indem Sie IP-Adressen einschränken. Dadurch wird sichergestellt, dass nur die API-Management-Dienst-IP-Adresse auf die Azure Functions-App zugreifen darf, die Ihre Azure Functions enthält.
Weitere Informationen zur Einschränkung von IP-Adressen finden Sie in der Microsoft-Dokumentation unter Beschränkung für eingehende IP-Adressen.
Nächster Schritt¶
Keiner. Sie haben erfolgreich eine externe Funktion für Azure erstellt.