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:

RequisitoDescrição
Provedor de identidadeOkta, Azure AD ou Ping Federate configurado para concessão de credenciais do cliente
Conta do SnowflakeEnterprise Edition ou superior com acesso ACCOUNTADMIN
Aplicativo OAuthServiços de API (Okta), registro de aplicativo (Azure AD) ou equivalentes
Escopos personalizadosEscopos 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

  1. Entre no console do admin do Okta.

  2. Acesse **Aplicativos > Aplicativos.

  3. Selecione **Criar integração de aplicativo.

  4. Escolha **Serviços de API** e selecione **Próximo.

  5. Insira um nome de aplicativo (por exemplo, snowflake-tableau-service).

  6. Selecione Salvar.

  7. 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.

  1. Nas configurações do aplicativo, acesse Geral > Credenciais do cliente.

  2. Desmarque a caixa de seleção Exigir cabeçalho da demonstração da prova de posse (DPoP) em solicitações de token.

  3. Selecione Salvar.

Etapa 3: adicionar escopos personalizados

O Snowflake requer escopos personalizados para atribuir funções à sessão autenticada.

  1. Acesse Segurança > API > Servidores de autorização.

  2. Selecione o servidor de autorização padrão (ou o servidor personalizado).

  3. Selecione a guia Escopos e, em seguida, Adicionar escopo.

  4. Adicione estes escopos:

    Nome do escopoDescrição
    snowflakeEscopo de acesso geral para Snowflake
    session:role:SYSADMINAtribui 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

  1. Selecione a guia Políticas de acesso.

  2. Selecione uma política existente ou crie uma nova.

  3. Adicione uma regra com estas configurações:

    • Tipo de concessão: credenciais do cliente

    • Escopos: quaisquer escopos (ou selecione escopos específicos)

  4. 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âmetroDescrição
EXTERNAL_OAUTH_TYPESeu provedor de identidade: OKTA , AZURE ou PING_FEDERATE
EXTERNAL_OAUTH_ISSUERA URL do emissor do servidor de autorização
EXTERNAL_OAUTH_JWS_KEYS_URLO endpoint JWKS para validação de token
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IMA declaração JWT que identifica o usuário. Use sub para Okta.
EXTERNAL_OAUTH_ANY_ROLE_MODEDefina 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

  1. No Tableau Desktop, selecione Conectar > Snowflake.

  2. Insira os detalhes da conexão:

    CampoValor
    ServidorURL da sua conta do Snowflake (por exemplo, account.snowflakecomputing.com)
    FunçãoA função a ser usada (por exemplo, SYSADMIN)
    WarehouseSeu warehouse do Snowflake
    AutenticaçãoCredenciais de clientes OAuth
  3. Insira a configuração do OAuth:

    CampoValor
    URL de solicitação de token OAuthhttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    UsernameSeu ID de cliente OAuth
    SenhaSeu segredo de cliente OAuth
    Escopo do OAuthsnowflake session:role:SYSADMIN

    Observação: o escopo do OAuth deve incluir todos os escopos personalizados que você configurou para atribuição de função.

  4. 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:

  1. Na caixa de diálogo Publicar, selecione Editar ao lado de Fontes de dados.

  2. Em Autenticação, selecione Senha inserida.

  3. 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:

  1. Entre no Tableau Cloud.

  2. Navegue até a fonte de dados publicada.

  3. Selecione Conexões.

  4. 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 erroCausaSoluçã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 OAuthDefina 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 tokenAdicione 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 OktaDesabilite “Exigir demonstração da prova de posse (DPoP)” no aplicativo Okta
“Escopo inválido”Escopos personalizados não configuradosAdicione os escopos necessários ao servidor de autorização; não inclua openid
Falha na validação do tokenURL de JWKS ou emissor incorretoVerifique se EXTERNAL_OAUTH_JWS_KEYS _URL e EXTERNAL_OAUTH_ISSUER correspondem ao seu servidor de autorização

Consulte também

Agradecemos seu feedback!Seu feedback foi enviado. Obrigado!