CREATE API INTEGRATION¶

CrĂ©e un nouvel objet d’intĂ©gration API dans le compte ou remplace une intĂ©gration API existante.

Un objet d’intĂ©gration API stocke des informations sur un service accessible via HTTPS API, y compris des informations sur ce qui suit :

  • Fournisseur de plateforme cloud (tel qu’Amazon AWS).

  • Type de service (dans le cas oĂč le fournisseur de plateforme Cloud propose plusieurs types de service proxy).

  • Identifiants et informations d’identification d’accĂšs du service externe disposant de privilĂšges suffisants pour utiliser le service. Par exemple, sur AWS, l’ARN (Amazon Resource Name) du rĂŽle sert d’identificateur et d’identifiants d’accĂšs.

    Lorsque cet utilisateur dispose des privilĂšges appropriĂ©s, Snowflake peut l’utiliser pour accĂ©der aux ressources. Par exemple, il peut s’agir d’une instance du service proxy HTTPS natif de la plateforme cloud, par exemple une instance d’Amazon API Gateway.

  • Un objet d’intĂ©gration API spĂ©cifie Ă©galement les points de terminaison et les ressources autorisĂ©s (et Ă©ventuellement bloquĂ©s) sur ces services.

Voir aussi :

ALTER API INTEGRATION , DROP INTEGRATION , SHOW INTEGRATIONS , Écriture de fonctions externes , CREATE EXTERNAL FUNCTION

Syntaxe¶

La syntaxe est différente pour chaque API externe.

Pour Amazon API Gateway¶

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
  API_PROVIDER = { aws_api_gateway | aws_private_api_gateway | aws_gov_api_gateway | aws_gov_private_api_gateway }
  API_AWS_ROLE_ARN = '<iam_role>'
  [ API_KEY = '<api_key>' ]
  API_ALLOWED_PREFIXES = ('<...>')
  ENABLED = { TRUE | FALSE }
  [ COMMENT = '<string_literal>' ]
  ;
Copy

Notez que ni aws_api_gateway ni aws_private_api_gateway ni aws_gov_api_gateway ni aws_gov_private_api_gateway ne doivent ĂȘtre entre guillemets.

Pour Azure API Management¶

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
  API_PROVIDER = azure_api_management
  AZURE_TENANT_ID = '<tenant_id>'
  AZURE_AD_APPLICATION_ID = '<azure_application_id>'
  [ API_KEY = '<api_key>' ]
  API_ALLOWED_PREFIXES = ( '<...>' )
  [ API_BLOCKED_PREFIXES = ( '<...>' ) ]
  ENABLED = { TRUE | FALSE }
  [ COMMENT = '<string_literal>' ]
  ;
Copy

Notez que azure_api_management ne doit pas ĂȘtre entre guillemets.

Pour Google Cloud API Gateway¶

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
  API_PROVIDER = google_api_gateway
  GOOGLE_AUDIENCE = '<google_audience_claim>'
  API_ALLOWED_PREFIXES = ( '<...>' )
  [ API_BLOCKED_PREFIXES = ( '<...>' ) ]
  ENABLED = { TRUE | FALSE }
  [ COMMENT = '<string_literal>' ]
  ;
Copy

Notez que google_api_gateway ne doit pas ĂȘtre entre guillemets.

Pour référentiel Git¶

CREATE [ OR REPLACE ] API INTEGRATION [ IF NOT EXISTS ] <integration_name>
  API_PROVIDER = git_https_api
  API_ALLOWED_PREFIXES = ('<...>')
  [ API_BLOCKED_PREFIXES = ('<...>') ]
  [ ALLOWED_AUTHENTICATION_SECRETS = ( { <secret_name> [, <secret_name>, ... ] | all | none } ) ]
  ENABLED = { TRUE | FALSE }
  [ COMMENT = '<string_literal>' ]
  ;
Copy

Notez que git_https_api ne doit pas ĂȘtre entre guillemets.

ParamÚtres requis¶

Pour Amazon API Gateway¶

integration_name

SpĂ©cifie le nom de l’intĂ©gration API. Ce nom suit les rĂšgles de Identificateurs d’objet. Le nom doit ĂȘtre unique parmi les intĂ©grations API de votre compte.

API_PROVIDER = { aws_api_gateway | aws_private_api_gateway | aws_gov_api_gateway | aws_gov_private_api_gateway }

SpĂ©cifie le type de service proxy HTTPS. Les valeurs valides sont :

  • aws_api_gateway: pour Amazon API Gateway utilisant des points de terminaison rĂ©gionaux.

  • aws_private_api_gateway: pour Amazon API Gateway utilisant des points de terminaison privĂ©s.

  • aws_gov_api_gateway : pour Amazon API Gateway utilisant des points de terminaison GovCloud du gouvernement amĂ©ricain.

  • aws_gov_private_api_gateway : pour Amazon API Gateway utilisant des points de terminaison GovCloud du gouvernement amĂ©ricain qui sont Ă©galement des points de terminaison privĂ©s.

API_AWS_ROLE_ARN = iam_role

Pour Amazon AWS, il s’agit de l’ARN (Amazon Resource Name) d’un rîle de plate-forme Cloud.

API_ALLOWED_PREFIXES = (...)

Limite explicitement les fonctions externes qui utilisent l’intĂ©gration pour rĂ©fĂ©rencer un ou plusieurs points de terminaison de service proxy HTTPS (par exemple, Amazon API Gateway) et les ressources au sein de ces proxy. Prend en charge une liste d’URLs sĂ©parĂ©e par des virgules, qui sont traitĂ©es comme des prĂ©fixes (pour plus de dĂ©tails, voir ci-dessous).

Chaque URL dans API_ALLOWED_PREFIXES = (...) est traitĂ©e comme un prĂ©fixe. Par exemple, si vous spĂ©cifiez :

https://xyz.amazonaws.com/production/

cela signifie que toutes les ressources sous

https://xyz.amazonaws.com/production/

sont autorisĂ©s. Par exemple, ce qui suit est autorisĂ© :

https://xyz.amazonaws.com/production/ml1

Pour maximiser la sécurité, vous devez restreindre les emplacements autorisés aussi étroitement que possible.

ENABLED = { TRUE | FALSE }

SpĂ©cifie si cette intĂ©gration API est activĂ©e ou dĂ©sactivĂ©e. Si l’intĂ©gration API est dĂ©sactivĂ©e, toute fonction externe qui en dĂ©pend ne fonctionnera pas.

La valeur est insensible Ă  la casse.

La valeur par défaut est TRUE.

Pour Azure API Management Service¶

integration_name

SpĂ©cifie le nom de l’intĂ©gration API. Ce nom suit les rĂšgles de Identificateurs d’objet. Le nom doit ĂȘtre unique parmi les intĂ©grations API de votre compte.

API_PROVIDER = azure_api_management

SpĂ©cifie que cette intĂ©gration est utilisĂ©e avec les services Azure API Management. N’utilisez pas de guillemets autour de azure_api_management.

AZURE_TENANT_ID = tenant_id

SpĂ©cifie l” ID de votre client Office 365 auquel appartiennent toutes les instances Azure API Management. Une intĂ©gration API peut s’authentifier auprĂšs d’un seul client. Les emplacements de stockage autorisĂ©s et bloquĂ©s doivent donc faire rĂ©fĂ©rence aux instances API Management qui appartiennent toutes Ă  ce client.

Pour trouver votre ID de client, connectez-vous au portail Azure et sĂ©lectionnez Azure Active Directory » Properties. L” ID de client s’affiche dans le champ Tenant ID.

AZURE_AD_APPLICATION_ID = azure_application_id

« ID (client) de l’application Â» de l’application Azure AD (Active Directory) pour votre service Ă  distance. Si vous avez suivi les instructions de CrĂ©ation de fonctions externes sur Microsoft Azure, alors il s’agit du Azure Function App AD Application ID que vous avez enregistrĂ© dans la feuille de calcul dans ces instructions.

API_ALLOWED_PREFIXES = (...)

Limite explicitement les fonctions externes qui utilisent l’intĂ©gration pour rĂ©fĂ©rencer un ou plusieurs points de terminaison de service proxy HTTPS (par exemple, services Azure API Management) et les ressources au sein de ces proxy. Prend en charge une liste d’URLs sĂ©parĂ©e par des virgules, qui sont traitĂ©es comme des prĂ©fixes (pour plus de dĂ©tails, voir ci-dessous).

Chaque URL dans API_ALLOWED_PREFIXES = (...) est traitĂ©e comme un prĂ©fixe. Par exemple, si vous spĂ©cifiez :

https://my-external-function-demo.azure-api.net/my-function-app-name

cela signifie que toutes les ressources sous

https://my-external-function-demo.azure-api.net/my-function-app-name

sont autorisĂ©s. Par exemple, ce qui suit est autorisĂ© :

https://my-external-function-demo.azure-api.net/my-function-app-name/my-http-trigger-function

Pour maximiser la sécurité, vous devez restreindre les emplacements autorisés aussi étroitement que possible.

ENABLED = { TRUE | FALSE }

SpĂ©cifie si cette intĂ©gration API est activĂ©e ou dĂ©sactivĂ©e. Si l’intĂ©gration API est dĂ©sactivĂ©e, toute fonction externe qui en dĂ©pend ne fonctionnera pas.

La valeur est insensible Ă  la casse.

La valeur par défaut est TRUE.

Pour Google Cloud API Gateway¶

integration_name

SpĂ©cifie le nom de l’intĂ©gration API. Ce nom suit les rĂšgles de Identificateurs d’objet. Le nom doit ĂȘtre unique parmi les intĂ©grations API de votre compte.

API_PROVIDER = google_api_gateway

SpĂ©cifie que cette intĂ©gration est utilisĂ©e avec Google Cloud. La seule valeur valide Ă  cet effet est google_api_gateway. La valeur ne doit pas ĂȘtre entre guillemets.

GOOGLE_AUDIENCE = google_audience

Ceci est utilisĂ© comme revendication d’audience lors de la gĂ©nĂ©ration du JWT (jeton Web JSON) pour s’authentifier auprĂšs de la Google API Gateway. Pour plus d’informations sur l’authentification avec Google, veuillez consulter la documentation sur l’authentification du compte de service Google.

API_ALLOWED_PREFIXES = (...)

Limite explicitement les fonctions externes qui utilisent l’intĂ©gration pour rĂ©fĂ©rencer un ou plusieurs points de terminaison de service proxy HTTPS (par exemple, Google Cloud API Gateways) et les ressources au sein de ces proxy. Prend en charge une liste d’URLs sĂ©parĂ©e par des virgules, qui sont traitĂ©es comme des prĂ©fixes (pour plus de dĂ©tails, voir ci-dessous).

Chaque URL dans API_ALLOWED_PREFIXES = (...) est traitĂ©e comme un prĂ©fixe. Par exemple, si vous spĂ©cifiez :

https://my-external-function-demo.uc.gateway.dev/x

cela signifie que toutes les ressources sous

https://my-external-function-demo.uc.gateway.dev/x

sont autorisĂ©s. Par exemple, ce qui suit est autorisĂ© :

https://my-external-function-demo.uc.gateway.dev/x/y

Pour maximiser la sécurité, vous devez restreindre les emplacements autorisés aussi étroitement que possible.

ENABLED = { TRUE | FALSE }

SpĂ©cifie si cette intĂ©gration API est activĂ©e ou dĂ©sactivĂ©e. Si l’intĂ©gration API est dĂ©sactivĂ©e, toute fonction externe qui en dĂ©pend ne fonctionnera pas.

La valeur est insensible Ă  la casse.

La valeur par défaut est TRUE.

Pour référentiel Git¶

Pour un exemple, voir CrĂ©er une API d’intĂ©gration pour interagir avec l’API du rĂ©fĂ©rentiel.

integration_name

SpĂ©cifie le nom de l’intĂ©gration API. Ce nom suit les rĂšgles de Identificateurs d’objet. Le nom doit ĂȘtre unique parmi les intĂ©grations API de votre compte.

API_PROVIDER = git_https_api

SpĂ©cifie que cette intĂ©gration est utilisĂ©e avec CREATE GIT REPOSITORY pour crĂ©er une intĂ©gration avec un rĂ©fĂ©rentiel Git distant. La seule valeur valide Ă  cet effet est git_https_api. La valeur ne doit pas ĂȘtre entre guillemets.

API_ALLOWED_PREFIXES = (...)

Limite explicitement les requĂȘtes qui utilisent l’intĂ©gration pour rĂ©fĂ©rencer un ou plusieurs points de terminaison HTTPS et les ressources situĂ©es sous ces points de terminaison. Prend en charge une liste d’URLs sĂ©parĂ©e par des virgules, qui sont traitĂ©es comme des prĂ©fixes.

Snowflake prend en charge le HTTPS de toute URL de rĂ©fĂ©rentiel Git. Par exemple, vous pouvez spĂ©cifier une URL personnalisĂ©e vers un serveur Git d’entreprise au sein de votre propre domaine.

https://example.com/my-repo

Chaque URL dans API_ALLOWED_PREFIXES = (...) est traitĂ©e comme un prĂ©fixe. Par exemple, vous pouvez spĂ©cifier ce qui suit :

https://github.com/my-account

Avec ce prĂ©fixe, toutes les ressources sous cete URL sont autorisĂ©es. Par exemple, ce qui suit est autorisĂ© :

https://github.com/my-account/myproject

Pour maximiser la sécurité, vous devez restreindre les emplacements autorisés aussi étroitement que possible.

ENABLED = { TRUE | FALSE }

SpĂ©cifie si cette intĂ©gration API est activĂ©e ou dĂ©sactivĂ©e. Si l’intĂ©gration API est dĂ©sactivĂ©e, le rĂ©fĂ©rentiel Git ne sera pas accessible.

La valeur est insensible Ă  la casse.

La valeur par défaut est TRUE.

ParamÚtres facultatifs¶

Pour toutes les intégrations¶

API_KEY = api_key

La clĂ© API (Ă©galement appelĂ©e « clĂ© d’abonnement Â»).

API_BLOCKED_PREFIXES = (...)

RĂ©pertorie les points de terminaison et les ressources du service proxy HTTPS pour lesquels l’appel Ă  partir de Snowflake n’est pas autorisĂ©.

Les valeurs possibles pour les emplacements suivent les mĂȘmes rĂšgles que pour API_ALLOWED_PREFIXES ci-dessus.

API_BLOCKED_PREFIXES a prioritĂ© sur API_ALLOWED_PREFIXES. Si un prĂ©fixe correspond aux deux, il est bloquĂ©. En d’autres termes, Snowflake autorise toutes les valeurs qui correspondent Ă  API_ALLOWED_PREFIXES sauf les valeurs qui correspondent Ă©galement Ă  API_BLOCKED_PREFIXES.

Si une valeur est en dehors des API_ALLOWED_PREFIXES, vous n’avez pas besoin de la bloquer explicitement.

COMMENT = 'string_literal'

Description de l’intĂ©gration.

Pour référentiel Git¶

Outre les paramĂštres pour toutes les intĂ©grations, utilisez les paramĂštres suivants lorsque vous utilisez l’intĂ©gration pour vous connecter Ă  un rĂ©fĂ©rentiel Git distant en dĂ©finissant le paramĂštre API_PROVIDER de l’intĂ©gration sur git_https_api.

ALLOWED_AUTHENTICATION_SECRETS = ( secret_name [, secret_name ... ] | all | none )

SpĂ©cifie les secrets que l’UDF ou le code du gestionnaire de procĂ©dure peut utiliser lors de l’accĂšs au rĂ©fĂ©rentiel Git Ă  la valeur API_ALLOWED_PREFIXES. Vous spĂ©cifiez un secret de cette liste lors de la spĂ©cification des identifiants Git avec le paramĂštre GIT_CREDENTIALS.

La valeur de ce paramĂštre doit ĂȘtre l’une des suivantes :

  • Un ou plusieurs noms entiĂšrement qualifiĂ©s de secret Snowflake pour autoriser n’importe lequel des secrets de la liste.

  • (Par dĂ©faut) all pour autoriser tout secret.

  • none pour n’autoriser aucun secret.

Le paramĂštre ALLOWED_API_AUTHENTICATION_INTEGRATIONS peut Ă©galement spĂ©cifier des secrets autorisĂ©s. Pour plus d’informations, voir Notes sur l’utilisation.

Pour des informations de référence sur les secrets, voir CREATE SECRET.

Exigences en matiĂšre de contrĂŽle d’accĂšs¶

Un rĂŽle utilisĂ© pour exĂ©cuter cette opĂ©ration doit au minimum disposer des privilĂšges suivants :

PrivilĂšge

Objet

Remarques

CREATE INTEGRATION

Compte

Only the ACCOUNTADMIN role has this privilege by default. The privilege can be granted to additional roles as needed.

Pour obtenir des instructions sur la crĂ©ation d’un rĂŽle personnalisĂ© avec un ensemble spĂ©cifique de privilĂšges, voir CrĂ©ation de rĂŽles personnalisĂ©s.

Pour des informations gĂ©nĂ©rales sur les rĂŽles et les privilĂšges accordĂ©s pour effectuer des actions SQL sur des objets sĂ©curisables, voir Aperçu du contrĂŽle d’accĂšs.

Notes sur l’utilisation¶

  • Seuls les rĂŽles Snowflake avec des privilĂšges OWNERSHIP ou USAGE sur l’intĂ©gration API peuvent utiliser directement l’intĂ©gration API, par exemple en crĂ©ant une fonction externe qui spĂ©cifie cette intĂ©gration API.

  • Un objet d’intĂ©gration API est liĂ© Ă  un compte de plate-forme Cloud spĂ©cifique et Ă  un rĂŽle au sein de ce compte, mais pas Ă  une URL de proxy HTTPS spĂ©cifique. Vous pouvez crĂ©er plusieurs instances d’un service proxy HTTPS dans un compte de fournisseur de Cloud et vous pouvez utiliser la mĂȘme intĂ©gration API pour vous authentifier auprĂšs de plusieurs services proxy dans ce compte.

  • Votre compte Snowflake peut avoir plusieurs objets d’intĂ©gration API, par exemple, pour diffĂ©rents comptes de plate-forme Cloud.

  • Plusieurs fonctions externes peuvent utiliser le mĂȘme objet d’intĂ©gration API, et donc le mĂȘme service proxy HTTPS.

  • Concernant les mĂ©tadonnĂ©es :

    Attention

    Les clients doivent s’assurer qu’aucune donnĂ©e personnelle (autre que pour un objet utilisateur), donnĂ©e sensible, donnĂ©e Ă  exportation contrĂŽlĂ©e ou autre donnĂ©e rĂ©glementĂ©e n’est saisie comme mĂ©tadonnĂ©e lors de l’utilisation du service Snowflake. Pour plus d’informations, voir Champs de mĂ©tadonnĂ©es dans Snowflake.

  • Les clauses OR REPLACE et IF NOT EXISTS s’excluent mutuellement. Elles ne peuvent pas ĂȘtre utilisĂ©es dans la mĂȘme instruction.

  • Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacĂ©, l’ancien objet est supprimĂ© et le nouvel objet est créé dans une seule transaction.

Exemples¶

Amazon API Gateway¶

L’exemple suivant montre la crĂ©ation d’une intĂ©gration API et l’utilisation de cette intĂ©gration API dans une instruction CREATE EXTERNAL FUNCTION suivante :

CREATE OR REPLACE API INTEGRATION demonstration_external_api_integration_01
  API_PROVIDER = aws_api_gateway
  API_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/my_cloud_account_role'
  API_ALLOWED_PREFIXES = ('https://xyz.execute-api.us-west-2.amazonaws.com/production')
  ENABLED = TRUE;

CREATE OR REPLACE EXTERNAL FUNCTION local_echo(string_col VARCHAR)
  RETURNS VARIANT
  API_INTEGRATION = demonstration_external_api_integration_01
  AS 'https://xyz.execute-api.us-west-2.amazonaws.com/production/remote_echo';
Copy

Référentiel Git¶

Pour un exemple d’intĂ©gration API utilisĂ©e pour intĂ©grer un rĂ©fĂ©rentiel Git, voir CrĂ©er une API d’intĂ©gration pour interagir avec l’API du rĂ©fĂ©rentiel.