App-Spezifikationen zur Anforderung externer Endpunkte von Verbrauchern verwenden¶
In diesem Thema wird beschrieben, wie ein Anbieter eine Snowflake Native App für die Verwendung von App-Spezifikationen konfigurieren kann. Mit App-Spezifikationen können Verbraucher den Zugriff einer App auf Services außerhalb von Snowflake genehmigen oder ablehnen.
Auf externe Services von einer Snowflake Native App aus zugreifen¶
Einige Snowflake Native Apps müssen eine Verbindung zu Ressourcen herstellen, die außerhalb von Snowflake existieren. Je nach Art der erforderlichen externen Verbindung stellt Snowflake unterschiedliche Objekte bereit.
Bei Verwendung von Automatisiertes Gewähren von Berechtigungen verfügt eine App über die erforderlichen Berechtigungen, um diese Objekte beim Ausführen des Setup-Skripts zu erstellen. Da diese Objekte jedoch Verbindungen außerhalb von Snowflake zulassen, müssen Verbraucher diese Verbindungen bei der Konfiguration der App genehmigen.
Mit App-Spezifikationen kann ein Anbieter angeben, welche Verbindungsinformationen die App anfordert. Wenn der Verbraucher die App installiert, überprüft er die App-Spezifikation und genehmigt sie je nach Bedarf.
Definition von App-Spezifikationen¶
Eine Definition der App-Spezifikationen ist eine Liste mit Konfigurationsdetails, die für eine Integration für den externen Zugriff oder eine Sicherheitsintegration erforderlich sind. Die Definition der App-Spezifikationen enthält einen Teil der Metadaten und Eigenschaften einer App-Spezifikation.
Auf externe Endpunkte zugreifen¶
Für den Zugriff auf Services außerhalb von Snowflake bietet Snowflake die folgenden Objekte:
- Netzwerkregeln:
Geben Sie eine Liste externer Netzwerkbezeichner an, z. B. Hostnamen.
- Integration für externen Zugriff:
Ermöglichen Sie den sicheren Zugriff auf externe Netzwerkendpunkte innerhalb einer benutzerdefinierten Funktion oder einer gespeicherten Prozedur. Integrationen für den externen Zugriff verwenden Netzwerkregeln, um den Zugriff auf bestimmte externe Netzwerkstandorte zu beschränken.
Um auf einen externen Endpunkt zugreifen zu können, muss eine App eine Netzwerkregel und eine Integration für den externen Zugriff erstellen. Eine einzige App-Spezifikation gilt für alle von der App erstellten Integrationen für den externen Zugriff. Anbieter können mehrere App-Spezifikationen für eine App erstellen, dies ist jedoch nicht erforderlich.
Definition von App-Spezifikationen für Integrationen für den externen Zugriff¶
Für eine Integration für den externen Zugriff enthält die Definition der App-Spezifikationen die folgenden Einträge:
HOST_PORTS
: Eine Liste der in der Netzwerkregel definierten Host-Ports, die die App benötigt.PRIVATE_HOST_PORTS
: Eine Liste von privaten Host-Ports, die private Konnektivität zu Ressourcen außerhalb von Snowflake ermöglichen.
Bemerkung
Diese Werte müssen mit den Werten übereinstimmen, die die App für das Erstellen der Netzwerkregel verwendet.
Auf externe Authentifizierungsanbieter zugreifen¶
Snowflake bietet Sicherheitsintegrationen für die Implementierung eines Authentifizierungsservice von Drittanbietern. Durch eine Sicherheitsintegration kann sich eine App mit einem Authentifizierungsservice eines Drittanbieters wie OAuth verbinden. Sicherheitsintegrationen ermöglichen es einer App, eine sichere Authentifizierung und Zugriffssteuerung zu verwenden.
Bemerkung
Snowflake Native Apps unterstützen nur Sicherheitsintegrationen des Typs
API_AUTHENTICATION
. Weitere Informationen dazu finden Sie unter CREATE SECURITY INTEGRATION (Externe API-Authentifizierung).
Definition von App-Spezifikationen für Sicherheitsintegrationen¶
Bei einer Sicherheitsintegration enthält die Definition der App-Spezifikationen die Informationen, die für die Verbindung mit einem Drittanbieter erforderlich sind. Für OAuth umfasst die Definition der App-Spezifikationen:
Art der Sicherheitsintegration |
Werte, die in der App-Spezifikation definiert sind |
---|---|
|
|
Die Sequenznummern einer App-Spezifikation¶
Die Sequenznummer ähnelt einer Versionsnummer für die App-Spezifikation. Die Sequenznummern steigen automatisch inkrementell an, wenn ein Anbieter die Definition der App-Spezifikation ändert. Die Definition einer App-Spezifikation umfasst Konfigurationsdetails und andere erforderliche Informationen. Felder, die nicht Teil der Definition sind, wie z. B. description
, triggern keine Aktualisierung der Sequenznummer.
Anhand der Sequenznummern können Anbieter und Verbraucher den aktuellen Status der App-Spezifikation erkennen und feststellen, welche externen Endpunkte aktiviert wurden.
Workflow für App-Spezifikationen¶
Der allgemeine Workflow für die Konfiguration und Verwendung einer App-Spezifikation ist wie folgt:
Anbieter konfigurieren Automatisiertes Gewähren von Berechtigungen für die App. Damit können Verbraucher einer App die Berechtigung erteilen, die Integration für den externen Zugriff zu erstellen.
Bemerkung
App-Spezifikationen erfordern, dass
manifest_version = 2
in der Manifest-Datei festgelegt wird.Anbieter fügen die Berechtigung CREATE EXTERNAL ACCESS INTEGRATION zur Manifest-Datei hinzu.
Anbieter fügen dem Setup-Skript SQL-Anweisungen hinzu, um die folgenden Objekte nach Bedarf zu erstellen:
Das Setup-Skript erstellt die App-Spezifikation und andere Objekte, wenn die App installiert oder aktualisiert wird, oder zur Laufzeit.
Bei der Konfiguration der App genehmigen Verbraucher die Host-Ports und andere externe Services. Weitere Informationen dazu finden Sie unter Verbindungen zu externen Ressourcen mit App-Spezifikationen genehmigen.
Die Berechtigung CREATE EXTERNAL ACCESS INTEGRATION zur Manifest-Datei hinzufügen¶
Um eine App so zu konfigurieren, dass sie die Berechtigung CREATE EXTERNAL ACCESS INTEGRATION anfordert, fügen Sie den folgenden Code in den Abschnitt privileges
der Manifest-Datei ein:
manifest_version: 2
...
privileges:
- CREATE EXTERNAL ACCESS INTEGRATION:
description: "Allows the app to create an external access integration to connect to an external service."
...
Dieser Eintrag im Abschnitt privileges
der Manifest-Datei gibt an, dass die App eine Integration für den externen Zugriff verwendet. Damit die App das automatisierte Gewähren von Berechtigungen nutzen kann, muss in der Manifest-Datei auch manifest_version: 2
festgelegt werden.
Dem Setup-Skript eine Netzwerkregel und eine Integration für den externen Zugriff hinzufügen¶
Integrationen für den externen Zugriff sind die Snowflake-Objekte, die den Zugriff auf bestimmte externe Netzwerkstandorte ermöglichen. Integrationen für den externen Zugriff enthalten eine Liste von Netzwerkregeln, die die externen Standorte festlegen, auf die eine App zugreifen darf.
Um eine Netzwerkregel für eine App zu erstellen, fügen Sie dem Setup-Skript den Befehl CREATE NETWORK RULE hinzu, wie im folgenden Beispiel gezeigt:
CREATE OR REPLACE NETWORK RULE setup.my_network_rule
TYPE = HOST_PORT
VALUE_LIST = ( 'example.com' )
MODE = EGRESS;
Die Eigenschaften HOST_PORT
und VALUE_LIST
zeigen an, dass die Netzwerkregel auf eine gültige Domäne, einen gültigen Port oder einen gültigen Portbereich verweisen muss. Wenn eine App installiert oder aktualisiert wird, gewährt ein Verbraucher die Berechtigung, dass die App diese Domänen oder Ports verwenden darf.
Um eine Integration für den externen Zugriff für eine App zu erstellen, fügen Sie dem Setup-Skript den Befehl CREATE EXTERNAL ACCESS INTEGRATION hinzu, wie im folgenden Beispiel gezeigt:
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION my_app_prefix_eai_rule
ALLOWED_NETWORK_RULES = (setup.my_network_rule)
ENABLED = TRUE;
Dieser Befehl erstellt eine Integration für den externen Zugriff namens my_app_prefix_eai_rule
, die es der App ermöglicht, auf externe Ressourcen oder Endpunkte zuzugreifen. Sie verwendet die setup.my_network_rule
-Netzwerkregel.
Dem Setup-Skript eine Sicherheitsintegration hinzufügen¶
Durch Sicherheitsintegrationen kann sich eine App mit einem Authentifizierungsservice eines Drittanbieters wie OAuth verbinden. Um eine Sicherheitsintegration für eine App zu erstellen, verwenden Sie den Befehl CREATE SECURITY INTEGRATION (Externe API-Authentifizierung), wie im folgenden Beispiel gezeigt:
CREATE SECURITY INTEGRATION external_oauth_provider
TYPE = API_AUTHENTICATION
AUTH_TYPE = OAUTH2
OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
OAUTH_CLIENT_ID = 'YOUR_CLIENT_ID'
OAUTH_CLIENT_SECRET = 'YOUR_CLIENT_SECRET'
OAUTH_GRANT = 'CLIENT_CREDENTIALS'
OAUTH_TOKEN_ENDPOINT = 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token'
OAUTH_ALLOWED_SCOPES = ('https://graph.microsoft.com/.default')
ENABLED = TRUE;
Dieses Beispiel zeigt, wie Sie eine Sicherheitsintegration erstellen, um sich über OAuth mit Client-Anmeldeinformationen mit Microsoft Sharepoint zu verbinden. Weitere unterstützte Methoden zum Verbinden mit einem OAuth-Anbieter finden Sie unter CREATE SECURITY INTEGRATION (Externe API-Authentifizierung).
Eine App-Spezifikation im Setup-Skript erstellen¶
Um die App-Spezifikation zu erstellen, fügen Anbieter dem Setup-Skript den Befehl ALTER APPLICATION SET SPECIFICATIONS hinzu.
Eine App-Spezifikation für eine Integration für den externen Zugriff erstellen¶
Das folgende Beispiel zeigt, wie Sie eine App-Spezifikation für eine Integration für den externen Zugriff erstellen:
ALTER APPLICATION SET SPECIFICATION eai_app_spec
TYPE = EXTERNAL_ACCESS
LABEL = 'Connection to an external API'
DESCRIPTION = 'Access an API that exists outside Snowflake'
Dieser Befehl erstellt eine App-Spezifikation namens eai_app_spec
.
Eine App-Spezifikation für eine Sicherheitsintegration erstellen¶
Das folgende Beispiel zeigt, wie Sie eine App-Spezifikation für eine Sicherheitsintegration mit dem CLIENT_CREDENTIALS OAuth-Typ erstellen:
ALTER APPLICATION SET SPECIFICATION oauth_app_spec
TYPE = SECURITY_INTEGRATION
LABEL = 'Connection to an external OAuth provider'
DESCRIPTION = 'Integrates an external identity provider in the app'
OAUTH_TYPE = 'CLIENT_CREDENTIALS'
OAUTH_TOKEN_ENDPOINT = 'https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token'
OAUTH_ALLOWED_SCOPES = ('https://graph.microsoft.com/.default');
Bemerkung
Die Werte, die Sie bei der Erstellung der App-Spezifikation angeben, müssen mit denen übereinstimmen, die Sie beim Erstellen der Sicherheitsintegration im Setup-Skript verwenden.
Weitere Informationen zur Verwendung anderer OAuth-Typen finden Sie unter ALTER APPLICATION SET SPECIFICATIONS.
Best Practices bei der Verwendung von App-Spezifikationen¶
Automatisiertes Gewähren von Berechtigungen stellt sicher, dass die App über die erforderlichen Berechtigungen verfügt, um Integrationen für den externen Zugriff zu erstellen. Dennoch können Verbraucher die App-Spezifikation, die die Verbindung zu den externen Endpunkten aktiviert, ablehnen. Bei der Entwicklung einer App müssen Anbieter Situationen berücksichtigen, in denen App-Spezifikationen möglicherweise nicht genehmigt werden.
Beispielsweise könnte eine App die Verwendung mehrerer Netzwerkports für eine Integration für den externen Zugriff anfordern, der Verbraucher jedoch nur einen zulassen. Die App sollte Logik zur Behandlung von Fehlern enthalten, die auftreten, wenn ein Netzwerkport nicht verfügbar ist. Außerdem ist es Best Practice, alle möglicherweise auftretenden HTTP-Ausnahmen zu erfassen.
Callback-Funktionen mit App-Spezifikationen verwenden¶
In manchen Fällen muss eine App möglicherweise wissen, wann der Verbraucher eine App-Spezifikation genehmigt oder abgelehnt hat. Beispielsweise muss die App möglicherweise warten, bis eine App-Spezifikation genehmigt wurde, bevor sie ein Objekt erstellt.
Für diese Situation bietet Snowflake Native App Framework einen Mechanismus, mit dem Anbieter eine gespeicherte Callback-Prozedur definieren können, die ausgeführt wird, wenn der Verbraucher eine App-Spezifikation genehmigt oder ablehnt.
Anbieter können der Manifest-Datei eine gespeicherte Prozedur hinzufügen, wie im folgenden Beispiel gezeigt:
lifecycle_callbacks:
specification_action: callbacks.on_spec_update
Dieses Beispiel zeigt, wie eine gespeicherte Prozedur namens callbacks.on_spec_update
in die Manifest-Datei aufgenommen wird. Anbieter können im Setup-Skript eine gespeicherte Prozedur hinzufügen, wie im folgenden Beispiel gezeigt:
CREATE OR REPLACE PROCEDURE callbacks.on_spec_update (
name STRING,
status STRING,
payload STRING)
...
Dieses Beispiel zeigt die Signatur einer gespeicherten Prozedur namens callbacks.on_spec_update
. Im Text dieser Prozedur fügen Anbieter den erforderlichen Code ein, um den Status der App-Spezifikation zu überprüfen, Objekte zu erstellen und bei Bedarf Aktionen auszuführen.