Exemplo: acesso externo usando OAuth e referências¶
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.
Importante
This example shows the manual method using references where consumers must create integrations themselves. For new apps, Snowflake recommends using automated granting of privileges with app specifications instead. See Solicitação de integrações de acesso externo (EAIs) com especificações do aplicativo for external access integrations and Solicitação de integrações de segurança com especificações de aplicativos for security integrations.
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 de manifesto:
Referência do EXTERNAL ACCESS INTEGRATION ao privilégio USAGE
Referência do SECRET ao privilégio READ
O exemplo de arquivo de manifesto 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
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:
typeIndica 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.
payloadContém o conteúdo da resposta com base no valor da propriedade
typee 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
$$
...
$$
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;
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;
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_callbackno 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.