Exemplo – Acesso externo usando OAuth

Este tópico fornece um exemplo que descreve como usar referências para permitir que provedores concedam acesso a um ponto de extremidade externo ao Snowflake. Este exemplo usa um segredo do OAuth2 e uma integração de acesso externo para permitir o acesso.

Adição de referências ao arquivo do manifesto

Para habilitar o acesso a um ponto de extremidade externo usando OAuth, um provedor pode adicionar as seguintes entradas no arquivo manifest.yml:

  • Referência do EXTERNAL ACCESS INTEGRATION ao privilégio USAGE

  • Referência do SECRET ao privilégio READ

O arquivo manifest.yml de exemplo a seguir mostra como definir essas referências:

manifest_version: 1
configuration:
  log_level: warn
  trace_level: off
...
references:
  - consumer_secret:
      label: "Consumer's Secret"
      description: "Needed to authenticate with xyz.com"
      privileges:
        - READ
      object_type: SECRET
      register_callback: config.register_my_secret
      configuration_callback: config.get_config_for_ref
  - consumer_external_access:
      label: "Default External Access Integration"
      description: "This is required to access xyz.com"
      privileges:
        - USAGE
      object_type: EXTERNAL ACCESS INTEGRATION
      register_callback: config.register_reference
      configuration_callback: config.get_config_for_ref
      required_at_setup: true
Copy

Nota

Essas referências não podem ter a propriedade multi_valued definida como verdadeira.

Referências a segredos e objetos de acesso externo também exigem uma função configuration_callback no script de configuração. Consulte Adição da função configuration_callback ao script de configuração para obter mais informações.

Adição da função configuration_callback ao script de configuração

Após adicionar referências para a integração de acesso secreto e externo, você deve adicionar a função configuration_callback ao script de configuração. Para criar uma integração de acesso externo ou segredo, o aplicativo deve ser capaz de determinar valores para a porta do host, o tipo de segredo, a autorização e o ponto de extremidade do token para OAuth etc. O configuration_callback fornece essas informações da conta do consumidor para o aplicativo.

O Snowsight executa este procedimento de retorno de chamada para preencher a caixa de diálogo de configuração que solicita ao usuário que configure os objetos. O procedimento precisa ser concedido a uma função de aplicativo para execução.

Nota

configuration_callback só é suportado para integração de acesso externo e objetos secretos.

A função de retorno de chamada tem os seguintes requisitos:

  • A função de retorno de chamada deve aceitar um argumento contendo um nome de referência. Isso permite que a mesma função de retorno de chamada manipule múltiplas referências.

  • A função de retorno de chamada deve retornar um objeto JSON bem formado. O objeto JSON contém as seguintes propriedades:

    • type

      Indica o tipo de mensagem. Os valores válidos são:

      • CONFIGURATION: retorna uma carga útil com os valores de configuração para o objeto com base no tipo de objeto.

      • ERROR: retorna um erro com a mensagem associada que é exibida em Snowsight.

    • payload

      Contém o conteúdo da resposta com base no valor da propriedade type e o tipo de objeto que está sendo configurado.

A assinatura para o retorno de chamada de configuração é:

CREATE OR REPLACE PROCEDURE configuration_callback_name(ref_name string)
RETURNS STRING
language <language>
as
$$
  ...
$$
Copy

No script de instalação, você deve conceder o privilégio USAGE para as funções do aplicativo que são usadas para configurar o aplicativo para que elas tenham permissão para chamar o procedimento armazenado. O exemplo a seguir mostra como conceder o privilégio USAGE em um procedimento armazenado:

GRANT USAGE ON PROCEDURE configuration_callback_name(string)
  TO APPLICATION ROLE app_role;
Copy

A função de retorno de chamada retorna um objeto JSON. Consulte Formato JSON para a resposta de retorno de chamada de configuração para obter mais informações.

O exemplo a seguir mostra uma função de retorno de chamada típica para manipular acesso externo e referências de segredo.

Esta função faz o seguinte:

  • Para uma referência a uma integração de acesso externo, o procedimento retorna um objeto JSON contendo as informações de configuração necessárias. Consulte Formato JSON para integração de acesso externo para obter mais informações.

  • Para uma referência a um segredo, o procedimento retorna um objeto JSON contendo uma configuração de segredo do tipo OAuth2. Consulte Formato JSON para referências de segredo para obter mais informações.

  CREATE OR REPLACE PROCEDURE config.get_config_for_ref(ref_name STRING)
    RETURNS STRING
    LANGUAGE SQL
    AS
    $$
    BEGIN
      CASE (ref_name)
        WHEN 'CONSUMER_EXTERNAL_ACCESS' THEN
          RETURN '{
            "type": "CONFIGURATION",
            "payload":{
              "host_ports":["google.com"],
              "allowed_secrets" : "LIST",
              "secret_references":["CONSUMER_SECRET"]}}';
        WHEN 'CONSUMER_SECRET' THEN
          RETURN '{
            "type": "CONFIGURATION",
            "payload":{
              "type" : "OAUTH2",
              "security_integration": {
                "oauth_scopes": ["https://www.googleapis.com/auth/analytics.readonly"],
                "oauth_token_endpoint": "https://oauth2.googleapis.com/token",
                "oauth_authorization_endpoint":
                    "https://accounts.google.com/o/oauth2/auth"}}}';
  END CASE;
  RETURN '';
  END;
  $$;

GRANT USAGE ON PROCEDURE config.get_config_for_ref(string)
  TO APPLICATION ROLE app_admin;
Copy

Como usar a permissão Python SDK para segredos e integrações de acesso externo

Python Permission SDK suporta objetos de integração de acesso externo e de segredo. No entanto, o comportamento é ligeiramente diferente para esses objetos.

Quando um provedor chama permission.request_reference() e passa o nome de uma referência com um object_type valor de SECRET ou EXTERNAL ACCESS INTEGRATION, Snowsight executa automaticamente o seguinte:

  • Chama a função configuration_callback no script de configuração.

  • Valida os valores retornados pela função configuration_callback.

  • Exibe a caixa de diálogo de configuração para o consumidor.

Nota

Se um provedor configurar uma integração de acesso externo com a propriedade payload.allow_secrets definida como LIST, não é necessário fazer uma chamada separada para solicitar uma referência para o segredo. A configuração do segredo é implicitamente incluída como parte da configuração de integração de acesso externo.