Na arquitetura de dados moderna, o Snowflake é a joia da coroa. No entanto, à medida que as organizações crescem, gerenciar quem tem acesso a quê e, mais importante, garantir que esse acesso seja revogado, torna-se um jogo de conformidade de alto risco. Se você dependeu exclusivamente dos conectores SCIM prontos para uso (OOTB) da Okta, provavelmente já percebeu que eles só resolvem metade do problema. Eles conseguem criar um usuário, mas têm dificuldades para gerenciar o complexo ciclo de vida das funções do Snowflake e a recuperação de licenças.
Este guia explora uma arquitetura sofisticada de "três fluxos" usando o Okta Identity Governance (OIG) e o Okta Workflows (atualizado em abril de 2026) para automatizar a "última etapa" da administração do Snowflake.
O problema: por que os conectores de integração da Okta deixam a desejar
A integração padrão entre Okta e Snowflake normalmente se concentra no provisionamento de usuários. Embora isso resolva a questão "Essa pessoa é um usuário?", falha em dois aspectos críticos:
- Gerenciamento granular de funções: o acesso ao Snowflake é definido por funções (por exemplo,
SYSADMIN, DATA_ENGINEER). Os conectores padrão não acionam nativamente comandos SQL específicos de função em resposta a solicitações de acesso do OIG. - Limpeza de direitos: quando uma solicitação do OIG expira ou um usuário é desvinculado de um aplicativo, o registro do usuário geralmente persiste no Snowflake. Isso leva a contas "zumbi" que consomem licenças e ampliam sua superfície de ataque à segurança.
A solução é usar o Okta Workflows como um mecanismo de orquestração que escuta os eventos do OIG e fala a linguagem do Snowflake.
Guia de configuração dos requisitos
Antes de abordarmos a solução proposta para Okta OIG e Workflows, precisamos fazer algumas alterações de configuração no Snowflake, OIG e Slack para usar o pacote de Workflows (Snowflake Delegated fluxo, Unassigned Entitlements e usuário Unassigned Cleanup). É necessário concluir essas etapas de configuração específicas em todas as quatro plataformas. A seguir, apresentamos um guia completo para configurar os requisitos principais:
Requisitos do Snowflake
O Snowflake serve como sistema de destino para o gerenciamento de funções e usuários.
- Criar uma função de provisionador: crie uma função dedicada (por exemplo,
OKTA_PROVISIONER) que o Okta assumirá para executar ações.
USE ROLE SECURITYADMIN;
CREATE ROLE IF NOT EXISTS OKTA_PROVISIONER;
CONCEDER AUTORIZAÇÃO DE CRIAÇÃO DE USUÁRIO NA CONTA PARA A FUNÇÃO OKTA_PROVISIONER;
CONCEDER CRIAR FUNÇÃO NA CONTA PARA A FUNÇÃO OKTA_PROVISIONER;
GRANT ROLE OKTA_PROVISIONER TO ROLE SECURITYADMIN;
- Configurar a integração SCIM: crie uma integração de segurança SCIM para permitir que o Okta se comunique com o Snowflake.
USE ROLE ACCOUNTADMIN;
CRIAR OU SUBSTITUIR INTEGRAÇÃO DE SEGURANÇA OKTA_PROVISIONING
TIPO = SCIM
SCIM_CLIENT = 'OKTA'
RUN_AS_ROLE = 'OKTA_PROVISIONER';
- Gerar token SCIM: gere o token de autorização para colar no Okta.
SELECT SYSTEM$GENERATE_SCIM_ACCESS_TOKEN('SCIMToken');
- Política de rede: certifique-se de que a política de rede do Snowflake permita o tráfego de entrada proveniente de endereços IP da Okta.
-- Etapa 1: Crie uma regra de rede com endereços IP do Okta
CREATE OR REPLACE NETWORK RULE MY_DB.PUBLIC.OKTA_INGRESS_RULE
TIPO = IPv4
MODO = ENTRADA
VALUE_LIST = ( -- Insira a lista de endereços IP aqui )
COMMENT = 'Endereços IP da Okta para acesso de entrada';
-- Etapa 2: crie uma política de rede usando a regra
CREATE NETWORK POLÍTICA okta_access_política
ALLOWED_NETWORK_RULE_LIST = ('MY_DB.PUBLIC.OKTA_INGRESS_RULE');
-- Etapa 3: ative a política (nível da conta)
ALTER ACCOUNT SET NETWORK_POLICY = okta_access_policy;
Requisitos do Okta (core e fluxos de trabalho)
Okta é o provedor de identidade e o motor que executa a automação.
Integração SCIM do aplicativo Snowflake
- Adicione o app Snowflake da Okta Integration Network.
- Na aba Provisionamento, habilite a integração da API e cole o token SCIM do Snowflake.
- Habilitar a criação de usuários, a atualização de atributos de usuários e a desativação de usuários.
Autorização e importação do conector do Workflows
O núcleo do sistema se baseia em dois componentes principais: Okta Access Requests e Okta Workflows. O Okta Workflows é usado para criar funções de negócios específicas, como provisionamento manual, envio de notificações ou criação de tíquetes de suporte. Esses Workflows são configurados como fluxos delegados, que podem ser utilizados pelo Okta Access Requests. Siga estes passos para ativar esses Workflows:
1. Autorizar acesso
- Autorize o conector Snowflake no console de Workflows usando o token de acesso no aplicativo Snowflake. Isso nos ajudará a fazer chamadas de API para o aplicativo Snowflake.
- Conector Okta: certifique-se de que a conexão esteja autorizada.
- Conceda o escopo
okta.governance.entitlements.manageao aplicativo OAuth do Okta Workflows no console de administração do Okta (Aplicativos > Aplicativo OAuth do Okta Workflows).
2. Pacote de importação de Workflows
Observação: para concluir esta etapa, você precisará baixar este arquivo de pacote de fluxo de trabalho.
Importe o pacote de fluxos de trabalho anexado no console de administração -> Workflows -> Fluxos: gerenciamento de direitos do Snowflake - Okta Workflows:
- Crie uma nova pasta e dê a ela o nome de “Snowflake gerenciamento de direitos,” e em seguida, selecione “Importar” no menu suspenso.
Existem três fluxos de trabalho principais: Fluxo Delegado do Snowflake (Atribuição), Cancelamento da Atribuição de Direitos e Usuário Cancelado do Snowflake. Na próxima seção, detalharemos a função de cada fluxo de trabalho.
Habilite essas conexões de aplicativos em cada um dos três fluxos (por exemplo, o cartão Snowflake no fluxo "Desatribuir direitos").
3. Configurar fluxo delegado
Para utilizar o fluxo delegado do Snowflake, primeiro é necessário habilitar o Okta Workflows no Access Requests. Isso garante que, após a aprovação de uma solicitação de acesso para o aplicativo Snowflake, o fluxo delegado do Snowflake acione uma solicitação de API para atribuir direitos.
Ative esta opção em Configurações -> Recurso -> Ações do Okta Workflows no Access Requests
- Crie uma função e um recurso personalizados para permitir que o Access Requests visualize e execute os Workflows disponíveis.
- Crie um conjunto de recursos e atribua Workflows a ele.
- Volte ao conjunto de recursos delegados para atribuir as permissões de administrador.
- Em Identity Governance, navegue até Access Requests -> Configurações -> Recursos -> Workflows para confirmar se os fluxos de trabalho delegados estão habilitados para serem executados a partir das solicitações de acesso. Se tudo for executado com sucesso, você verá os "Workflows delegados" aparecerem.
4. Crie um hook de evento
Configure um hook de evento para enviar dados de evento do Okta para o endpoint da API no fluxo delegado quando um evento do OIG ocorrer:
Acesse a aba “Event Hooks” em “Workflows” para criar um novo hook de evento.
Agora, certifique-se de que os registros do sistema detectem um evento OIG de "atualização das permissões de um usuário em um recurso" e o enviem para o cartão do endpoint de API, atribuindo a URL de invocação do fluxo de trabalho de cancelamento de permissões no campo URL do endpoint e, em seguida, selecionando esse evento no hook de evento:
- Acesse o fluxo de trabalho “Desatribuir direitos” -> configurações do endpoint.
- Copie o URL do endpoint e cole-o no campo “URL do endpoint” do novo hook de evento.
- No hook de evento, selecione “Atualizou as permissões do usuário em um recurso”.
- Após configurar o hook de evento, poderemos testá-lo na aba "Visualizar".
Requisitos do Okta Identity Governance (OIG)
A OIG fornece a camada de autorização granular usada no fluxo de sincronização.
- Ative o mecanismo de governança: certifique-se de que o mecanismo do Okta Identity Governance esteja ativado para sua organização.
- Ativar o gerenciamento de direitos: acesse o aplicativo Snowflake no Okta > aba Governança e clique em “ativar o gerenciamento de direitos”. Antes de ativar ou desativar o gerenciamento de direitos, é necessário primeiro desativar o provisionamento.
- Configurar direitos personalizados no app Snowflake -> Governança. Conforme mencionado anteriormente, os direitos do Snowflake não são preenchidos automaticamente usando o conector da Okta. Portanto, teremos que configurar funções e direitos personalizados.
Estas são as funções que existem no aplicativo Snowflake:
Precisamos associar essas funções na plataforma Okta: uma vez associadas, essas funções (como ORGADMIN ou SYSADMIN) são convertidas em objetos "solicitáveis", tornando-as visíveis para os usuários no catálogo de Solicitações de Acesso.
- Acesse a aba Governança.
- Adicionar direito.
- Adicione um direito chamado “FUNÇÕES”.
- Adicione funções de usuário, que serão usadas nas solicitações de acesso.
Depois de criados, eles ficarão assim:
- Crie um pacote para cada função.
Quando você terminar de criar os pacotes, eles ficarão assim:
- Use esses pacotes para criar uma solicitação de acesso para cada função na aba Access Requests do app Snowflake.
- Desça até o final da página e selecione Sequência de Aprovação -> Selecionar Sequência.
- Edite a sequência “Justificativa Comercial”.
- Imediatamente abaixo da etapa “Aprovação do gerente do solicitante”, clique em “+” para adicionar uma nova etapa de fluxo de trabalho na sequência.
- Adicione uma etapa ao Workflows e Select o Workflows delegado que importamos do pacote de Workflows.
- Após adicionar a sequência, renomeie-a para “Sequência de Aprovação do Snowflake” e salve-a.
- Selecione a “Sequência de Aprovação do Snowflake” que acabamos de salvar para chamar o fluxo delegado do Snowflake durante o processo de solicitação de acesso.
- Habilite as solicitações de acesso para cada função.
- Acesse o painel do usuário final e selecione Solicitar acesso -> Snowflake para realizar uma verificação final de que o usuário pode solicitar essas funções.
- Deverá ser possível ver listadas todas as funções que os usuários podem solicitar.
Requisitos do Slack
O Slack fornece a camada de notificação para os Workflows.
- Escopos e permissões: o usuário que autoriza o conector do Slack no Okta Workflows deve ter permissão para adicionar apps ao espaço de trabalho.
- Autorização do app: autorize o app Okta Workflows no seu espaço de trabalho do Slack.
- ID do canal: Identifique o ID específico do canal do Slack (por exemplo,
#security-alertsou#it-ops) onde o fluxo de trabalho deve publicar mensagens.
Agora que os requisitos fundamentais foram atendidos, vamos prosseguir para a análise do pacote de Workflows e detalhar a configuração da arquitetura.
A arquitetura: uma análise aprofundada da solução de três Workflows
Nesta seção, vamos detalhar o que cada um dos três Workflows principais faz:
- Fluxo Delegado do Snowflake (Atribuição)
- Cancelar atribuição de direitos
- Remover atribuição de usuário do Snowflake
Assista: como usar o OIG e o Workflows para gerenciar funções no Snowflake
Este vídeo demonstra como usar o OIG e os Workflows para gerenciar funções do Snowflake em escala, sem as limitações dos conectores de integração tradicionais. Veja como essa integração automatiza tarefas, protege dados e elimina a lacuna de governança, reduzindo o risco de erro humano.
1. O fluxo de atribuição delegada: a "porta de entrada"
Este fluxo foi projetado para administração delegada, permitindo que os administradores acionem atribuições de função sem precisar acessar o console do Workflows.
- Lógica e portões de segurança: o fluxo começa recebendo um
userEmail e um requestedRole. Antes de agir, realiza uma verificaçãoreadUserna Okta e uma verificaçãogetAssignedUserForApplicationpara verificar o estado atual do usuário. - O requisito "provisionado": Um cartão "Continuar se" funciona como um filtro, garantindo que o status do usuário no aplicativo Snowflake seja especificamente PROVISIONADO.
- Prevenção de condições de corrida: implementamos um cartão de "Espere" de cinco segundos. Durante os testes, descobrimos que o Snowflake às vezes precisa de alguns segundos para registrar um novo usuário antes de poder aceitar um comando GRANT ROLE.
- Execução: Após a validação, utiliza o cartão "Conceder função ao usuário" do Snowflake e notifica a equipe por meio de um canal do Slack.
Fluxo delegado: cartões de atribuição de função de usuário
Início: evento de fluxo delegado
Entradas:
requestedRole,userEmail,AccessLevelName.
Okta - Ler usuário
Recupera os detalhes do perfil do usuário (Nome, Sobrenome) usando o endereço de e-mail fornecido.
String - Concatenar
Combina nomes de usuário para fins de registro.
Controlar - Aguardar
Pausa o fluxo por 5 segundos para permitir que o provisionamento upstream se estabilize.
Okta - Obter o usuário atribuído ao aplicativo
Verifica o status de atribuição do usuário específico para o aplicativo Snowflake.
Controle - Continuar Se
Condição: prossiga somente se o status for PROVISIONADO.
Caso contrário: Interrompa com o erro "Erro ao conceder uma função ao usuário".
Snowflake - Atribuir função ao usuário
Executa a atribuição de função no Snowflake.
String - Concatenar
Cria a mensagem de sucesso para o Slack.
FIM: Slack - Enviar mensagem para o canal
Publica uma confirmação: "[Usuário] foi atribuído com sucesso à função de [Função]."
2. Cancelamento da atribuição de direitos: a integração da API do OIG
Este é o "cérebro" da operação. Ela lida com a tarefa complexa de revogar funções específicas quando uma concessão do OIG é negada ou expira.
- O "Fio de Ouro" (grantId): Quando o OIG aciona uma revogação, ele envia um webhook para o endpoint da API deste fluxo. Usamos um cartão "Seleção de Objeto" para extrair o
grantIdde dentro do JSON: data.eventos.0.debugContext.debugData.grantId. - O retorno de chamada da API do OIG: o webhook inicial geralmente não contém o nome específico da função. O fluxo usa uma ação de API personalizada para chamar a API do OIG:
/governance/api/v1/grants/{{grantId}}?include=full_entitlements. - Analisando direitos aninhados: usando os cartões "Em" e "Obter", o fluxo navega pela lista retornada para encontrar o nome exato da função localizado em values.0.name.
- A porta lógica "NEGAR": para evitar revogações acidentais durante os ciclos de aprovação, um cartão "Continuar se" verifica se a ação do OIG é exatamente NEGAR.
Cartões de fluxo de cancelamento de atribuição de direitos
INÍCIO: endpoint de API (webhook)
Recebe dados do corpo contendo informações sobre a concessão e o destino.
Objeto - Obter Vários (Selecionar)
Extrai o
grantIde o objetotargetdos dados do evento.
Objeto - Obter
Extrai o
Alternate ID(ID do usuário) do objeto de destino.
Okta - Ler usuário
Recupera o perfil completo do usuário identificado.
String - Concatenar
Constrói um URL relativo para a API IGA:
/governance/api/v1/grants/[grantId]?include=full_entitlements.
Okta IGA - Ação de API personalizada
Executa uma solicitação GET para recuperar detalhes completos da concessão específica.
Controle - Continuar Se
Condição: prossiga somente se a
actionfor "DENY" (indicando uma solicitação de remoção).
Lista - Em
Recupera o direito específico da lista retornada.
Objeto - Obter
Extrai o nome da função do objeto de direito.
Concatenar - Primeiro nome + Último nome
Cria um nome de usuário a partir do nome e sobrenome do usuário para mapear no Snowflake.
Snowflake - Revogar função do usuário
Remove a função do usuário no Snowflake.
Concatenar - Saída do Slack
Cria uma mensagem para ser exibida no Slack.
FIM: Slack - Enviar mensagem para o canal
Publica confirmação: "[Usuário] foi removido com sucesso da função [Função]."
3. Desligamento completo: exclusão do usuário
Quando um usuário é completamente removido do aplicativo Snowflake no Okta, revogar as funções não é suficiente; o próprio usuário deve ser removido para recuperar a licença.
- O gatilho: o fluxo inicia quando um usuário é desvinculado da instância do aplicativo Snowflake no Okta.
- Processamento assíncrono: utiliza um loop Async Each para processar a desatribuição, chamando um fluxo auxiliar para cada usuário removido.
- A ação final: o fluxo auxiliar executa o comando
Drop usuáriono Snowflake. Isso garante que o usuário seja completamente removido do ambiente Snowflake, automatizando uma tarefa que normalmente requer intervenção manual em SQL.
Cartões do fluxo de desligamento
Fluxo pai
INÍCIO: Okta - Usuário desatribuído do aplicativo
Monitora os eventos
application.user_membership.removepara o aplicativo Snowflake.
Lista - Para cada (Cada Assíncrono)
Envia cada usuário não atribuído para o Fluxo Auxiliar para processamento.
Fluxo auxiliar
INÍCIO: Evento Invocável
Recebe dados do usuário do fluxo principal.
Objeto - Expandir
Extrai o
Alternate ID(normalmente o nome de usuário).
Floco de Neve - Soltar Usuário
Exclui a conta do usuário no Snowflake.
FIM: Slack - Enviar mensagem para o canal
Notifica a equipe de que o usuário do Snowflake foi excluído.
Testando a configuração do OIG e do Workflows
Testando a "Solicitação de Acesso à Função"
A solicitação de acesso (ação do usuário)
- Faça login como um usuário de teste padrão. Navegue até o Painel do Usuário Final da Okta > Solicitar acesso.
- Envie uma solicitação para o tipo de solicitação "Função Snowflake". Selecione a função específica (por exemplo,
USERADMIN). - Verifique o histórico de solicitações de acesso para garantir que a solicitação foi criada e que o aprovador correto (Gerente) foi atribuído.
Aprovação e provisionamento (ação do administrador/gerente)
- Faça login como administrador aprovador e clique em “Aprovar”.
- Enviar a função para o Snowflake:
OIG Approval→Okta Assigns Entitlement to User→Okta SCIM. - No Okta, acesse o perfil do usuário > Aplicativos > Snowflake para confirmar se a função aparece em "Direitos".
- Realize verificações semelhantes no Snowflake para confirmar se o usuário recebeu a função adequada.
O usuário agora deverá conseguir fazer login no Snowflake e visualizar a função atribuída.
Testando a revogação de direitos
Revogação de direitos (ação de governança)
Existem duas maneiras de revogar o direito à função Snowflake:
- Acesse Identity Governance > Access Certifications (ou o perfil do usuário).
- Acesse Aplicativos > Snowflake > Atribuições e clique em Test_user > Gerenciar direitos
Fluxo de execução
- O evento OIG aciona o webhook da API
Unassign Entitlements. - Início do fluxo de trabalho: o fluxo recebe o
grantIdetarget(Usuário). - Chamada da API IGA: o fluxo de trabalho chama
/governance/api/v1/grants/[id]para verificar se aactionéDENY. - Revogação no Snowflake: o fluxo de trabalho executa o card
Revoke Role from the usuáriono Snowflake. - Auditoria do Slack: uma mensagem é enviada para o canal de TI.
Critérios de verificação e sucesso
- Histórico de Workflows: abra o histórico do fluxo Cancelar atribuição de direitos.
- Verificação de sucesso: todos os cartões (Object Pick, IGA API, Snowflake Revoke) devem ter uma marca de seleção verde.
- No Snowflake, execute
SHOW GRANTS TO USER "TEST_USER";. A função deve ter desaparecido. - No Slack, confirme a mensagem:
[Usuário] was successfully unassigned from the role [Role].
Testando a limpeza "Drop usuário" para desligamento
- Remova a atribuição do usuário de teste de todo o aplicativo Snowflake no Okta.
- Fluxo de execução:
Okta Unassignment→Parent Flow: Usuário Unassigned→Helper Flow: Drop Usuário. - No Okta, confirme se o usuário não está mais na lista de atribuição do app Snowflake.
- No Snowflake, execute
SHOW USERS LIKE 'TEST_USER%';. O usuário não deve retornar nenhum resultado (descartado). - No Slack, confirme a notificação "Usuário do Snowflake foi removido".
Lições aprendidas com a automatização dos Workflows do OIG
A criação dessa automação revelou diversas nuances críticas na forma como o OIG e a Snowflake se comunicam:
Mapeamento de status e ações
Um dos erros mais frequentes que encontramos foi o acionamento do fluxo na fase errada do ciclo de vida da governança. Estabelecemos um mapeamento rigoroso para os circuitos condicionais "Continuar Se":
Estágio do Ciclo de Vida | Ação do OIG | Status do OIG | Resultado esperado |
Nova concessão | PERMITIR | ATIVO | Papel de floco de neve concedido |
Revogação/Expiração | NEGAR | INATIVO | Função do Snowflake revogada |
Formatação de strings para Snowflake
O Snowflake diferencia maiúsculas de minúsculas e geralmente espera um formato de nome de usuário específico. Usamos cartões Concatenate para mesclar o nome e o sobrenome da Okta, de forma a corresponder precisamente aos requisitos de nome de usuário do Snowflake, por exemplo: JOHNDOE
O estado de espera
Sem o cartão de espera, o fluxo de "Atribuição Delegada" falharia intermitentemente com um erro de "Usuário Não Encontrado" do Snowflake, mesmo que o usuário tivesse acabado de ser criado. Um atraso de cinco segundos resolveu 100% dessas falhas por condição de corrida.
Alcançar a verdadeira governança de identidade
Ao ir além do conector padrão e utilizar a API Okta Identity Governance combinada com Workflows, você cria um sistema de circuito fechado, que oferece importantes benefícios de governança de identidade:
- Segurança: as funções são revogadas instantaneamente quando as concessões expiram.
- Eficiência de custos: os usuários do Snowflake são removidos quando não são mais necessários e as licenças são recuperadas automaticamente.
- Conformidade: todas as ações, desde a solicitação do OIG até o comando SQL do Snowflake, são registradas e auditáveis no histórico de execução do Workflows.
Experimente gratuitamente: Descubra os benefícios de automatizar processos complexos de identidade em escala com o Okta Identity Governance e Workflows. Inicie seu teste gratuito de 30 dias.