Configurar o OAuth externo para Snowflake: fluxo de credenciais do cliente
A autenticação de credenciais de cliente OAuth permite conexões de máquina para máquina com o Snowflake
sem a interação do usuário. Este método é ideal para:
Contas de serviço para atualizações de dados automatizadas
Trabalhos de extração agendada
Pipelines de CI/CD
Fontes de dados publicadas que exigem credenciais inseridas
Ao contrário do OAuth padrão (que usa o fluxo de código de autorização), o fluxo de credenciais do cliente não
solicita que os usuários façam logon. Em vez disso, o Tableau autentica diretamente com seu provedor de identidade usando um
ID do cliente e segredo.
Observação: o fluxo de credenciais do cliente exige o recurso OAuth externo do Snowflake com um provedor de identidade compatível. Isso é diferente do OAuth nativo do Snowflake.
Antes de começar
Para usar credenciais de cliente OAuth com Snowflake, você precisa de:
| Requisito | Descrição |
|---|---|
| Provedor de identidade | Okta, Azure AD ou Ping Federate configurado para concessão de credenciais do cliente |
| Conta do Snowflake | Enterprise Edition ou superior com acesso ACCOUNTADMIN |
| Aplicativo OAuth | Serviços de API (Okta), registro de aplicativo (Azure AD) ou equivalentes |
| Escopos personalizados | Escopos para atribuição de função do Snowflake (por exemplo, “session:role:SYSADMIN”) |
Configurar seu provedor de identidade
As etapas a seguir usam o Okta como exemplo. Para outros provedores, consulte a documentação para obter a configuração de credenciais do cliente.
Etapa 1: criar um aplicativo de serviços de API
Entre no console do admin do Okta.
Acesse **Aplicativos > Aplicativos.
Selecione **Criar integração de aplicativo.
Escolha **Serviços de API** e selecione **Próximo.
Insira um nome de aplicativo (por exemplo,
snowflake-tableau-service).Selecione Salvar.
Copie o ID do cliente e Segredo do cliente. Esses valores serão necessários posteriormente.
Etapa 2: desabilitar o DPoP (se ativado)
A demonstração da prova de posse (DPoP) deve ser desabilitada para o fluxo de credenciais do cliente.
Nas configurações do aplicativo, acesse Geral > Credenciais do cliente.
Desmarque a caixa de seleção Exigir cabeçalho da demonstração da prova de posse (DPoP) em solicitações de token.
Selecione Salvar.
Etapa 3: adicionar escopos personalizados
O Snowflake requer escopos personalizados para atribuir funções à sessão autenticada.
Acesse Segurança > API > Servidores de autorização.
Selecione o servidor de autorização padrão (ou o servidor personalizado).
Selecione a guia Escopos e, em seguida, Adicionar escopo.
Adicione estes escopos:
Nome do escopo Descrição snowflake Escopo de acesso geral para Snowflake session:role:SYSADMIN Atribui a função SYSADMIN (ajuste para sua função) Observação: crie escopos adicionais para quaisquer outras funções de que sua conta de serviço precise.
Etapa 4: configurar uma política de acesso
Selecione a guia Políticas de acesso.
Selecione uma política existente ou crie uma nova.
Adicione uma regra com estas configurações:
Tipo de concessão: credenciais do cliente
Escopos: quaisquer escopos (ou selecione escopos específicos)
Selecione Criar regra ou Salvar.
Configurar o Snowflake
Execute as seguintes instruções SQL no Snowflake como ACCOUNTADMIN. Substitua os valores de marcador de posição pela sua configuração.
Etapa 1: criar a integração do OAuth externa
USE ROLE ACCOUNTADMIN;
CREATE OR REPLACE SECURITY INTEGRATION okta_oauth_integration
TYPE = EXTERNAL_OAUTH
ENABLED = TRUE
EXTERNAL_OAUTH_TYPE = OKTA
EXTERNAL_OAUTH_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name'
EXTERNAL_OAUTH_AUDIENCE_LIST = ('api://default', 'snowflake')
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';| Parâmetro | Descrição |
|---|---|
EXTERNAL_OAUTH_TYPE | Seu provedor de identidade: OKTA , AZURE ou PING_FEDERATE |
EXTERNAL_OAUTH_ISSUER | A URL do emissor do servidor de autorização |
EXTERNAL_OAUTH_JWS_KEYS_URL | O endpoint JWKS para validação de token |
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA
IM | A declaração JWT que identifica o usuário. Use sub para Okta. |
EXTERNAL_OAUTH_ANY_ROLE_MODE | Defina como ENABLE para permitir a atribuição de função por meio de escopos |
Etapa 2: criar um usuário de serviço
Crie um usuário do Snowflake com um LOGIN_NAME que corresponde ao ID do cliente OAuth.
CREATE USER IF NOT EXISTS service_account_user
LOGIN_NAME = '<your-okta-client-id>'
DISPLAY_NAME = 'OAuth Service Account'
MUST_CHANGE_PASSWORD = FALSE
DISABLED = FALSE;
-- Grant role to the service user
GRANT ROLE SYSADMIN TO USER service_account_user;
-- Set the default role
ALTER USER service_account_user SET DEFAULT_ROLE = 'SYSADMIN';
-- Grant warehouse access
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service_account_user;
-- Grant database and schema access
GRANT USAGE ON DATABASE <your-database> TO USER service_account_user;
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
Importante: o LOGIN_NAME deve corresponder exatamente à declaração sub no token do OAuth. Para aplicativos de serviços de API do Okta, este é o ID do cliente.
Conectar-se no Tableau Desktop
No Tableau Desktop, selecione Conectar > Snowflake.
Insira os detalhes da conexão:
Campo Valor Servidor URL da sua conta do Snowflake (por exemplo, account.snowflakecomputing.com)Função A função a ser usada (por exemplo, SYSADMIN)Warehouse Seu warehouse do Snowflake Autenticação Credenciais de clientes OAuth Insira a configuração do OAuth:
Campo Valor URL de solicitação de token OAuth https://<your-okta-domain>.okta.com/oauth2/default/ v1/tokenUsername Seu ID de cliente OAuth Senha Seu segredo de cliente OAuth Escopo do OAuth snowflake session:role:SYSADMINObservação: o escopo do OAuth deve incluir todos os escopos personalizados que você configurou para atribuição de função.
Selecione Fazer logon.
Publicar no Tableau Cloud ou Tableau Server
Ao publicar uma pasta de trabalho ou fonte de dados que usa credenciais de cliente OAuth:
Na caixa de diálogo Publicar, selecione Editar ao lado de Fontes de dados.
Em Autenticação, selecione Senha inserida.
As credenciais do cliente são inseridas no conteúdo publicado.
Importante: ao contrário do OAuth padrão, as credenciais do cliente são tratadas como senhas inseridas. Os usuários que acessam o conteúdo publicado usam as credenciais de conta de serviço, não sua própria identidade.
Rotação de credencial
Quando o segredo do cliente OAuth for rotacionado, atualize as credenciais inseridas no Tableau Cloud:
Entre no Tableau Cloud.
Navegue até a fonte de dados publicada.
Selecione Conexões.
Atualize a conexão com o novo segredo do cliente.
Para rotação automatizada, use a API REST do Tableau para atualizar as credenciais de conexão de maneira programática.
Perguntas frequentes
Quando devo usar credenciais de cliente OAuth em vez do OAuth padrão?
Use as credenciais do cliente quando você precisar de uma autenticação autônoma de máquina para máquina. Padrão
O OAuth requer interação do usuário para o logon inicial e reautenticação periódica. Credenciais do cliente
Usam uma identidade de conta de serviço e não exigem interação do usuário.
Posso usar credenciais de cliente com o OAuth nativo do Snowflake?
Não. O OAuth nativo do Snowflake oferece suporte apenas ao fluxo do código de autorização. As credenciais do cliente exigem o OAuth externo com um provedor de identidade compatível (Okta, Azure AD ou Ping Federate).
Como faço para lidar com a rotação secreta para conteúdo publicado?
Quando o segredo do cliente OAuth for rotacionado, atualize as credenciais inseridas no Tableau Cloud. Você pode fazer isso manualmente por meio da interface do usuário do Tableau Cloud ou de forma programática usando a API REST do Tableau. Considere automatizar esse processo como parte do fluxo de trabalho de rotação secreto.
Por que minha conexão falha com um erro de função mesmo que EXTERNAL_OAUTH_ANY_ROLE_MODE esteja habilitado?
O Snowflake requer informações de função no token do OAuth. Adicione um escopo personalizado (por exemplo, session:role:SYSADMIN) ao servidor de autorização e inclua-o no campo Escopo do OAuth ao se conectar pelo Tableau.
Solução de problemas
| Mensagem de erro | Causa | Solução |
|---|---|---|
| “O usuário não existe ou não está autorizado” | O usuário do Snowflake LOGIN_NAME não corresponde ao ID do cliente OAuth | Defina o LOGIN_NAME do usuário para corresponder à declaração sub (ID do cliente para Okta) |
| “A função solicitada não está listada no token de acesso” | Escopo de função ausente no token | Adicione o escopo session:role:<ROLE> ao seu servidor de autorização e inclua-o no escopo OAuth |
| “Prova de DPoP inválida” | DPoP está habilitado no Okta | Desabilite “Exigir demonstração da prova de posse (DPoP)” no aplicativo Okta |
| “Escopo inválido” | Escopos personalizados não configurados | Adicione os escopos necessários ao servidor de autorização; não inclua openid |
| Falha na validação do token | URL de JWKS ou emissor incorreto | Verifique se EXTERNAL_OAUTH_JWS_KEYS
_URL e EXTERNAL_OAUTH_ISSUER correspondem ao seu servidor de autorização |
Consulte também
Configurar o OAuth para conexões do Snowflake no Tableau Server(O link abre em nova janela) - Saiba mais sobre a autenticação OAuth padrão com Snowflake.
Integrações de segurança OAuth externo(O link abre em nova janela) - Documentação do Snowflake para configurar provedores OAuth externos.
Fluxo de credenciais do cliente Okta(O link abre em nova janela) - Documentação do Okta para implementar as credenciais do cliente.
Atualizar conexão de fonte de dados(O link abre em nova janela) - Referência da API REST do Tableau para atualizações de credenciais.
