Integração SCIM Okta com o Snowflake

Este guia fornece as etapas necessárias para configurar o provisionamento no Okta para o Snowflake e inclui as seguintes seções:

Recursos

A administração de usuários e funções tem suporte para o aplicativo Snowflake.

Isto permite ao Okta:

  • Gerenciar o ciclo de vida dos usuários (ou seja, criar, atualizar e excluir) no Snowflake.

  • Gerenciar o ciclo de vida das funções (ou seja, criar, atualizar e excluir) no Snowflake.

  • Gerenciar a atribuição de usuários a funções no Snowflake.

Os seguintes recursos de provisionamento têm suporte:

Push New Users

Novos usuários criados através do OKTA também serão criados no Snowflake.

Push Profile Updates

As atualizações feitas no perfil do usuário através do OKTA serão enviadas ao Snowflake.

Push User Deactivation

Desativar o usuário ou desabilitar o acesso do usuário ao Snowflake através do OKTA irá desativar o usuário no Snowflake.

Nota

Para o Snowflake, desativar um usuário significa definir a propriedade DISABLED para o usuário como TRUE.

Reactivate Users

As contas de usuário podem ser reativadas no Snowflake.

Sync Password

A senha do usuário pode ser enviada do Okta para o Snowflake, se necessário.

Dica

A configuração padrão é criar uma senha aleatória para os usuários, dando ao usuário uma configuração de atributo de has_Password=true. Sem uma senha, os usuários devem acessar o Snowflake através do Okta SSO. Para evitar que uma senha seja gerada para os usuários, desative esta configuração antes de provisionar os usuários da seguinte forma:

  1. Clique em Edit.

  2. Sob Sync Password, desmarque a configuração Generate a new random password whenever the user’s Okta password changes.

  3. Salve a alteração.

A ativação desta configuração no Okta cria uma senha para o usuário acessar o Snowflake. Isto poderia resultar em um caminho para os usuários acessarem o Snowflake sem SSO.

Para desabilitar a sincronização de senha, remova esta opção no Okta e atualize a integração de segurança do SCIM Okta do Snowflake para definir a propriedade SYNC_PASSWORD como False.

Push Groups

O recurso Push Groups cria funções no Snowflake e facilita o gerenciamento de funções. As funções criadas no Snowflake usando Push Groups do Okta têm os mesmos nomes no Okta e no Snowflake. Sempre crie primeiro as funções no Okta e use Push Groups para atualizar o Snowflake para garantir que o Okta e o Snowflake possam se sincronizar. Okta e a função personalizada OKTA_PROVISIONER no Snowflake não podem gerenciar funções criadas manualmente no Snowflake. Push Groups não criam usuários no Snowflake.

Dica

O Okta pode criar usuários no Snowflake se o aplicativo Snowflake no Okta for atribuído a um usuário no Okta.

Para obter mais informações, consulte Atribuir um aplicativo a um usuário.

Os seguintes atributos de usuário têm suporte:

Tipo de atributo

Atributo de usuário do SCIM

Atributo de usuário do Snowflake

Notas

Atributos básicos

userName

name e login_name

givenName

first_name

familyName

last_name

email

email

Atributos personalizados

defaultRole

default_role

defaultWarehouse

default_warehouse

defaultSecondaryRoles

default_secondary_roles

Você só pode especificar o valor como "ALL".

Problemas conhecidos

  • O Okta não oferece suporte a URLs que contenham sublinhados. Se o nome da conta Snowflake contém um sublinhado, então você precisa usar uma URL de conta especial que substitui o sublinhado por um hífen. Por exemplo, se você estiver usando o formato de URL de nome da conta, a URL especial pode ser https://myorg-account-name.snowflakecomputing.com.

  • As funções existentes do Snowflake não podem ser colocadas sob o gerenciamento do Okta através de transferência de propriedade. Somente novas funções podem ser criados através do Okta.

  • Os usuários existentes do Snowflake podem ser trazidos para o gerenciamento do Okta através de uma transferência de propriedade. Para obter mais informações, consulte Solução de problemas (neste tópico).

Limitações

  • O Snowflake suporta um máximo de 500 solicitações simultâneas por conta, por ponto de extremidade SCIM (por exemplo, o ponto de extremidade /Users, o ponto de extremidade /Groups). Após sua conta exceder este limite, o Snowflake retorna um código de status 429 HTTP (ou seja, excesso de solicitações). Observe que este limite de solicitações geralmente só ocorre durante o provisionamento inicial quando um número relativamente grande de solicitações (ou seja, mais de 10 mil) ocorre para provisionar usuários ou grupos.

Sem suporte

  • Recursos Enhanced Group Push e Push Now do Okta.

    Nota

    Os atributos defaultRole, defaultSecondaryRoles e defaultWarehouse não são mapeados, pois são opcionais. Para mapear estes atributos no Okta, use perfis e expressões ou defina um valor padrão para todos os usuários. Para obter mais informações, consulte Gerenciar perfis (no Okta).

  • Se estiver usando conectividade privada ao serviço Snowflake para acessar o Snowflake, certifique-se de que não esteja inserindo estes URLs nas configurações de integração. Insira o ponto de extremidade público (ou seja, sem .privatelink), e certifique-se de que a política de rede permite o acesso a partir do endereço IP do Okta listado aqui, caso contrário você não poderá usar esta integração.

  • A Okta não suporta atualmente a importação de grupos aninhados do Active Directory. Portanto, se sua integração Okta usa grupos aninhados no AD, você não pode usar a integração SCIM Okta do Snowflake para provisionar ou gerenciar grupos aninhados no Snowflake. Contate a Okta e a Microsoft para solicitar o suporte para grupos aninhados.

Pré-requisitos

  1. Antes de provisionar usuários ou grupos, certifique-se de que a política de rede no Snowflake permita o acesso a partir de endereços IP do Okta documentados aqui. Para obter mais informações, consulte Gerenciamento de políticas de rede SCIM.

  2. Antes de configurar o provisionamento do Snowflake, certifique-se de ter configurado General Settings e qualquer Sign-On Options para o aplicativo do Snowflake no Okta.

Uma vez concluídas as etapas acima, clique em Next no Okta para voltar à guia Provisioning.

Etapas de configuração

O processo de configuração requer a conclusão das etapas no Snowflake e no Okta.

Configuração do Snowflake

O processo de configuração do Snowflake cria uma integração de segurança SCIM para permitir que usuários e funções criados no Okta sejam propriedade da função OKTA_PROVISIONER SCIM no Snowflake e cria um token de acesso para uso em solicitações de API SCIM. O token de acesso é válido por seis meses. Ao expirar, crie um novo token de acesso manualmente usando SYSTEM$GENERATE_SCIM_ACCESS_TOKEN, como mostrado abaixo.

Nota

Para invalidar um token de acesso existente para uma integração SCIM, execute uma instrução DROP INTEGRATION.

Para continuar usando SCIM com Snowflake, recrie a integração SCIM com uma instrução CREATESECURITYINTEGRATION e gere um novo token de acesso usando SYSTEM$GENERATE_SCIM_ACCESS_TOKEN.

Execute as seguintes instruções SQL em seu cliente Snowflake preferido. Cada uma das instruções SQL é explicada abaixo.

use role accountadmin;
create role if not exists okta_provisioner;
grant create user on account to role okta_provisioner;
grant create role on account to role okta_provisioner;
grant role okta_provisioner to role accountadmin;
create or replace security integration okta_provisioning
    type = scim
    scim_client = 'okta'
    run_as_role = 'OKTA_PROVISIONER';
select system$generate_scim_access_token('OKTA_PROVISIONING');
Copy

Importante

As instruções SQL de exemplo utilizam a função ACCOUNTADMIN do sistema e a função OKTA_PROVISIONER personalizada é concedida à função ACCOUNTADMIN.

É possível não utilizar a função ACCOUNTADMIN em favor de uma função menos privilegiada. O uso de uma função menos privilegiada pode ajudar a resolver as preocupações de conformidade relacionadas ao acesso menos privilegiado; entretanto, o uso de uma função menos privilegiada pode resultar em erros inesperados durante o processo de configuração e gerenciamento do SCIM.

Estes erros podem ser o resultado de a função menos privilegiada não ter direitos suficientes para administrar todas as funções através do SCIM devido à forma como as funções são criadas e à hierarquia de funções resultante. Portanto, em um esforço para evitar erros nos processos de configuração e gerenciamento, escolha uma das seguintes opções:

  1. Use a função ACCOUNTADMIN, como mostrado nas instruções SQL de exemplo.

  2. Use uma função com o privilégio global MANAGE GRANTS.

  3. Se nenhuma dessas duas primeiras opções for desejável, use uma função personalizada que tenha o privilégio OWNERSHIP sobre todas as funções que serão gerenciadas usando SCIM.

  1. Use a função ACCOUNTADMIN.

    use role accountadmin;
    
    Copy
  2. Crie a função personalizada OKTA_PROVISIONER. Todos os usuários e funções no Snowflake criados pelo Okta serão de propriedade da função OKTA_PROVISIONER com escopo inferior.

    create role if not exists okta_provisioner;
    grant create user on account to role okta_provisioner;
    grant create role on account to role okta_provisioner;
    
    Copy
  3. Deixe a função ACCOUNTADMIN criar a integração de segurança usando a função OKTA_PROVISIONER personalizada. Para obter mais informações, consulte CREATESECURITYINTEGRATION.

    grant role okta_provisioner to role accountadmin;
    create or replace security integration okta_provisioning
        type = scim
        scim_client = 'okta'
        run_as_role = 'OKTA_PROVISIONER';
    
    Copy
  4. Crie e copie o token de autorização para a área de transferência e armazene-o com segurança para uso posterior. Use este token para cada solicitação de API REST SCIM e coloque-o no cabeçalho da solicitação. O token de acesso expira após seis meses e um novo token de acesso pode ser gerado com esta instrução.

    select system$generate_scim_access_token('OKTA_PROVISIONING');
    
    Copy

    Importante

    Todos os usuários e funções no Snowflake criados pelo Okta serão de propriedade da função okta_provisioner com escopo inferior.

    Se você quiser administrar os usuários existentes do Snowflake através do Okta, complete as seguintes etapas:

    1. Transferir a propriedade dos usuários existentes para a função okta_provisioner.

      use role accountadmin;
      grant ownership on user <user_name> to role okta_provisioner;
      
      Copy
    2. Garantir que a propriedade login_name esteja definida para os usuários existentes, a qual já deve estar definida se esses usuários existentes do Snowflake estiverem usando o Okta SSO.

    3. Esteja ciente de que o nome dos usuários existentes levados para o gerenciamento do Okta será atualizado para corresponder ao nome de usuário no Okta. Informe seus usuários sobre esta mudança, pois eles podem estar usando o nome para se conectar ao Snowflake a partir de outra integração (por exemplo, Tableau).

Configuração do Okta

Esta seção discute como criar e configurar um aplicativo Snowflake no Okta.

Nota

Ao criar o aplicativo Snowflake no Okta, o campo SubDomain do aplicativo deve conter o identificador da conta de sua conta Snowflake. Se o nome da conta Snowflake contiver um sublinhado e você estiver usando o formato de nome da conta do identificador, você deve converter o sublinhado em um hífen porque o Okta não aceita sublinhados em URLs (por exemplo, myorg-account-name).

Não inclua um segmento privatelink no campo SubDomain porque a conectividade privada não é suportada e entrar neste segmento faz com que a conexão SCIM falhe.

Para configurar o aplicativo Snowflake no Okta, realize as seguintes etapas.

  1. Em Settings, selecione Integration no menu à esquerda e depois marque a caixa Enable API Integration.

  2. Para API Token, digite o valor gerado acima a partir da área de transferência. Clique no botão Test API Credentials e, se bem-sucedido, salve a configuração.

  3. Selecione To App no menu do lado esquerdo.

  4. Selecione Provisioning Features que deseja habilitar.

  5. Verifique os mapeamentos de atributos. Os atributos defaultRole, defaultSecondaryRoles e defaultWarehouse não são mapeados, pois são opcionais. Se houver necessidade, você pode mapeá-los usando o perfil ou expressão Okta ou definir o mesmo valor para todos os usuários.

Agora você pode atribuir usuários ao aplicativo Snowflake (se necessário) e terminar a configuração do aplicativo.

Nota

O Okta suporta um atributo chamado snowflakeUserName que mapeia para o campo name do usuário do Snowflake.

Se você quiser que os campos name e login_name para o usuário do Snowflake tenham valores diferentes, siga este procedimento.

  1. Entre em contato com o suporte do Snowflake para permitir um mapeamento separado para sua conta.

  2. No Okta, acesse o aplicativo Snowflake e navegue até Provisioning > Attribute Mappings > Edit Mappings.

  3. Pesquise o atributo snowflakeUserName.

  4. Se o atributo não for encontrado, o aplicativo Snowflake foi criado antes que este atributo estivesse disponível. Recrie o aplicativo Snowflake com os mapeamentos mostrados abaixo ou adicione o atributo manualmente como a seguir:

    • Clique em Add Attribute.

    • Defina os seguintes valores para cada um dos campos listados na tabela.

    Campo

    Valor

    Tipo de dados

    cadeia de caracteres

    Display name

    Nome de usuário do Snowflake

    Variable name

    snowflakeUserName

    External name

    snowflakeUserName

    External namespace

    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

    Descrição

    Mapeia para o campo name do usuário no Snowflake.

    Escopo

    Pessoal do usuário

  5. Clique em Save.

Habilitação do SSO iniciado pelo Snowflake

O processo de provisionamento do SCIM não habilita automaticamente o login único (SSO).

Para usar o SSO depois que o processo de provisionamento do SCIM estiver completo, habilite o SSO iniciado pelo Snowflake.

Gerenciamento de políticas de rede SCIM

A aplicação de uma política de redes a uma integração de segurança SCIM permite que a política de redes SCIM seja distinta das políticas de redes que se aplicam a toda a conta Snowflake. Ele permite que o provedor de SCIM provisione usuários e grupos sem adicionar endereços IP a uma política de redes que controla o acesso de usuários normais.

Uma política de redes aplicada a uma integração de SCIM substitui uma política de redes aplicada a toda a conta Snowflake, mas é substituída por uma política de redes atribuída a um usuário.

Depois de criar a integração de segurança SCIM, crie a política de redes SCIM usando este comando:

alter security integration okta_provisioning set network_policy = <scim_network_policy>;
Copy

Para remover a política de redes SCIM, use este comando:

alter security integration okta_provisioning unset network_policy;
Copy

Onde:

okta_provisioning

Especifica o nome da integração de segurança SCIM Okta.

scim_network_policy

Especifica a política de rede do Okta SCIM no Snowflake.

Para obter mais informações, consulte Políticas de rede e ALTERSECURITYINTEGRATION.

Uso de funções secundárias com SCIM

O Snowflake suporta a definição da propriedade de usuário DEFAULT_SECONDARY_ROLES como 'ALL' com SCIM para permitir que os usuários usem funções secundárias em uma sessão do Snowflake.

Para um exemplo representativo, consulte PUT scim/v2/Users/{id}.

Replicação da integração de segurança Okta SCIM

O Snowflake oferece suporte à replicação e failover/failback com a integração de segurança SCIM da conta de origem para a conta de destino.

Para obter mais detalhes, consulte Replicação de integrações de segurança e políticas de redes em múltiplas contas.

Solução de problemas

  • Transferência de propriedade. Se a atualização do usuário falhar, verifique a propriedade do usuário no Snowflake. Se ele não pertencer à função okta_provisioner (ou à função definida no parâmetro run_as_role ao criar a integração de segurança no Snowflake), então a atualização falhará. Transfira a propriedade executando a seguinte instrução SQL no Snowflake e tente novamente.

    grant ownership on user <username> to role OKTA_PROVISIONER;
    
    Copy
  • Garantir que a propriedade login_name esteja definida para os usuários existentes, a qual já deve estar definida se esses usuários existentes do Snowflake estiverem usando o Okta SSO.

  • Para verificar se o Okta está enviando atualizações ao Snowflake, verifique os eventos de log no Okta para o aplicativo Snowflake e os logs de auditoria do SCIM no Snowflake para garantir que o Snowflake esteja recebendo atualizações do Okta. Use o seguinte para consultar os logs de auditoria SCIM do Snowflake.

    use role accountadmin;
    use database demo_db;
    use schema information_schema;
    select * from table(rest_event_history('scim'));
    select *
        from table(rest_event_history(
            'scim',
            dateadd('minutes',-5,current_timestamp()),
            current_timestamp(),
            200))
        order by event_timestamp;
    
    Copy
  • É possível que ocorra um erro de autenticação durante o processo de provisionamento. Uma mensagem de erro possível é a seguinte:

    Error authenticating: Forbidden. Errors reported by remote server: Invalid JSON: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') at [Source: java.io.StringReader@4c76ba04; line: 1, column: 2]
    
    Copy

    Se esta mensagem de erro ou outras mensagens de erro de autenticação ocorrerem, tente este procedimento de solução de problemas:

    1. No Okta, remova o aplicativo atual do Snowflake e crie um novo aplicativo do Snowflake.

    2. No Snowflake, crie uma nova integração de segurança SCIM e gere um novo token de acesso.

    3. Copie o novo token clicando em Copy.

    4. No Okta, cole e verifique o novo token de acesso, conforme descrito em como configurar o Okta como um provedor de identidade SCIM.

    5. Provisione usuários e funções do Okta ao Snowflake utilizando o novo aplicativo Snowflake no Okta.

Próximos tópicos: