Autenticação multifator (MFA)

A autenticação multifator (MFA) reduz os riscos de segurança associados à autenticação por senha. Quando um usuário de senha está inscrito na MFA, ele deve usar um segundo fator de autenticação ao fazer login no Snowflake. Esses usuários digitam sua senha e, em seguida, usam o segundo fator. Para obter informações sobre como um usuário adiciona um método MFA, que pode ser usado como um segundo fator de autenticação, consulte Configuração de um segundo fator de autenticação.

A MFA destina-se a usuários humanos que se autenticam com uma senha. Os usuários de serviço devem usar outra forma de autenticação. Para obter mais informações sobre esses tipos de usuários, consulte Tipos de usuários.

Importante

Para melhorar a postura de segurança de todos os seus clientes, a Snowflake está implementando mudanças para exigir MFA para todos os logins com senha. Para obter informações sobre essa implementação, consulte Planejamento para a descontinuidade dos logins com senha de fator único.

Como exigir que os usuários se inscrevam em MFA

Atualmente, as estratégias para implementar a MFA em sua organização variam dependendo da existência ou não de uma conta quando o pacote de mudança de comportamento 2024_08 foi ativado:

  • Se uma conta já existia antes da ativação do pacote 2024_08, você deverá configurá-la se quiser exigir que os usuários humanos usem a MFA. Para obter informações sobre a implementação da MFA para exigir que todos os usuários humanos se inscrevam na MFA, consulte Fortalecer a autenticação de usuário ou conta usando MFA.

  • Se a conta tiver sido criada após a ativação do pacote 2024_08, todos os usuários humanos que se autenticarem com uma senha deverão se inscrever em MFA por padrão. Este requisito da MFA não se aplica aos usuários do serviço.

    Se quiser desativar o requisito de que todos os usuários humanos se inscrevam em MFA, crie uma política de autenticação personalizada com MFA_ENROLLMENT=OPTIONAL e, em seguida, defina a política de autenticação na conta. Para obter mais informações sobre a criação e configuração de políticas de autenticação, consulte Políticas de autenticação.

    Saiba que a capacidade de optar por não participar da obrigatoriedade de MFA é temporária; consulte Planejamento para a descontinuidade dos logins com senha de fator único.

Restrinja quais métodos MFA estão disponíveis

Quando um usuário está inscrito na MFA, ele precisa usar um método MFA como segundo fator de autenticação. O Snowflake permite os seguintes métodos MFA:

  • Autenticação com uma chave de acesso que pode ser armazenada e acessada de várias maneiras.

  • Autenticação com um aplicativo autenticador que gera uma senha de uso único baseada em tempo (TOTP).

  • Autenticação com o Duo.

Dica

Ao decidir quais métodos de MFA serão permitidos, lembre-se do seguinte:

  • As chaves de acesso são recomendadas devido à sua segurança e usabilidade.

  • O Duo não é replicado como os outros métodos da MFA.

Como administrador, você pode usar uma política de autenticação para controlar quais métodos de MFA podem ser usados como um segundo fator de autenticação. Por exemplo, a política de autenticação a seguir permite que os usuários usem uma chave de acesso ou um aplicativo autenticador como segundo fator de autenticação, mas não o Duo:

CREATE AUTHENTICATION POLICY require_mfa_policy
  MFA_AUTHENTICATION_METHODS = ('PASSWORD')
  MFA_ENROLLMENT = REQUIRED
  MFA_POLICY = (ALLOWED_METHODS = ('PASSKEY', 'TOTP'));
Copy

Se um usuário tiver configurado anteriormente um método MFA que agora é proibido, na próxima vez que ele fizer login, será solicitado a se autenticar usando o método pré-existente e, em seguida, será solicitado a configurar um novo método permitido.

Para obter mais informações sobre o parâmetro MFA_POLICY, consulte CREATE AUTHENTICATION POLICY.

Remoção dos métodos de MFA de um usuário

Você pode remover um método de MFA que um usuário adicionou anteriormente para que ele não possa mais usá-lo como segundo fator de autenticação.

  1. Execute o comando SHOW MFA METHODS e encontre o valor na coluna name. Por exemplo, se estiver removendo um método de MFA para um usuário joe, execute o seguinte e copie o name do método de MFA da saída:

    SHOW MFA METHODS FOR USER joe;
    
    Copy
    +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
    |   name        |      type       |    comment             |     last_used                 |        created_on               |  additional_info    |
    +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
    | TOTP-48A7     |    TOTP         | Authenticator App 48A7 | 2025-02-26 11:14:38.000 -0800 |  2025-02-26 11:13:19.000 -0800  | null                |
    +---------------+-----------------+------------------------+-------------------------------+---------------------------------+---------------------+
    
  2. Execute uma instrução ALTER USER … REMOVE MFA METHOD para remover o método de MFA:

    ALTER USER joe REMOVE MFA METHOD TOTP-48A7;
    
    Copy

Recuperação de um usuário bloqueado

Se um usuário de senha for bloqueado no Snowflake por não ter acesso a um segundo fator de autenticação, um administrador poderá ajudá-lo a recuperar a capacidade de fazer login desativando temporariamente a MFA ou ajudando o usuário a configurar um novo método de MFA.

Solicite ao usuário que adicione um novo método de MFA

Se um usuário perder o acesso ao método de MFA que usa como segundo fator de autenticação (por exemplo, ao perder o YubiKey que armazena sua chave de acesso), um administrador poderá ajudar o usuário a configurar um novo método de MFA para que ele possa entrar no Snowflake.

Quando um usuário não tem acesso ao seu método de MFA e precisa configurar um novo método, o administrador executa uma instrução ALTER USER … ENROLL MFA. Por exemplo, se o usuário joe precisar estabelecer um novo método de MFA, o administrador poderá executar o seguinte:

ALTER USER joe ENROLL MFA;
Copy
  • Se o usuário tiver um e-mail verificado, o Snowflake enviará um e-mail solicitando que ele adicione um método de MFA.

  • Se o usuário não tiver um e-mail verificado, o Snowflake retornará o URL de uma página que solicita que o usuário adicione um método de MFA. Os administradores podem enviar esse URL ao usuário bloqueado.

Desativação temporária de MFA

Se um administrador precisar desativar temporariamente a MFA para um usuário, ele poderá executar uma instrução ALTER USER … SET MINS_TO_BYPASS_MFA. Por exemplo, para desativar temporariamente a MFA de modo que o usuário joe possa se autenticar com uma senha de fator único por 30 minutos, execute o seguinte:

ALTER USER joe SET MINS_TO_BYPASS_MFA = 30;
Copy

Configuração de administradores para acesso de emergência

O acesso de emergência refere-se à capacidade de contornar os métodos normais de autenticação. Os administradores precisam ter acesso ao Snowflake se a autenticação normal ficar indisponível; por exemplo, se o provedor de identidade de uma organização ficar inoperante.

Em muitos casos, as organizações fornecem acesso de emergência criando um usuário Snowflake dedicado e armazenando sua credencial de senha em um cofre de chaves criptográficas. Quando a MFA é aplicada, todos os administradores que usam essa senha devem ter seu próprio método de MFA para usar como um segundo fator de autenticação. Nesses casos, a Snowflake recomenda que cada administrador configure um método de MFA de TOTP para que possa usar um aplicativo autenticador como segundo fator. O uso de comentários descritivos ao configurar o método de MFA pode ajudar a distinguir os administradores.

Conexão ao Snowflake com MFA

O login MFA é projetado principalmente para se conectar ao Snowflake através da interface da Web, mas também é totalmente compatível com o SnowSQL e drivers Snowflake JDBC, Node.js e ODBC.

Uso do armazenamento em cache de tokens MFA para minimizar o número de tentativas durante a autenticação — opcional

O armazenamento em cache de tokens MFA pode ajudar a reduzir o número de prompts que devem ser confirmados ao se conectar e autenticar no Snowflake, especialmente quando múltiplas tentativas de conexão são feitas dentro de um intervalo de tempo relativamente curto.

Um token MFA armazenado em cache é válido por até quatro horas.

O token MFA armazenado em cache é inválido se alguma das seguintes condições for preenchida:

  1. O parâmetro ALLOW_CLIENT_MFA_CACHING está definido como FALSE para a conta.

  2. O método de autenticação muda.

  3. As credenciais de autenticação mudam (ou seja, nome de usuário e/ou senha).

  4. As credenciais de autenticação não são válidas.

  5. O token armazenado em cache expira ou não é válido criptograficamente.

  6. O nome da conta associada ao token armazenado em cache muda.

O processo geral que o Snowflake usa para armazenar tokens MFA em cache é semelhante ao usado para armazenar tokens de conexão em cache para o login único federado baseado em navegador. O aplicativo cliente armazena o token MFA no keystore do sistema operacional do lado do cliente. Os usuários podem excluir o token MFA em cache do keystore a qualquer momento.

O Snowflake oferece suporte ao armazenamento em cache do token MFA com os seguintes drivers, conectores e ferramentas no macOS e no Windows. Este recurso não é suportado no Linux.

  • Snowflake CLI versão 3.0 (ou posterior)

  • Versão do driver ODBC 2.23.0 (ou posterior).

  • Versão do driver JDBC 3.12.16 (ou posterior).

  • Conector Python para Snowflake versão 2.3.7 (ou superior).

O Snowflake recomenda consultar os responsáveis pela segurança interna e conformidade antes de habilitar o armazenamento de tokens MFA.

Dica

O armazenamento em cache de tokens MFA pode ser combinado com o armazenamento em cache de conexões no login único federado.

Para combinar estes dois recursos, certifique-se de que o parâmetro ALLOW_ID_TOKEN esteja definido para true em conjunto com o parâmetro ALLOW_CLIENT_MFA_CACHING.

Para ativar o armazenamento em cache de tokens MFA, complete as seguintes etapas:

  1. Como administrador de conta (ou seja, um usuário com a função ACCOUNTADMIN do sistema), defina o parâmetro ALLOW_CLIENT_MFA_CACHING para true para uma conta usando o comando ALTER ACCOUNT.

    ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
    
    Copy
  2. Na cadeia de conexão do cliente, atualize o valor do autenticador para authenticator = username_password_mfa.

  3. Adicione o pacote ou as bibliotecas necessárias para o driver ou conector:

    • Se você estiver usando o conector Snowflake para Python, instale o pacote opcional de token de autenticação executando:

      pip install "snowflake-connector-python[secure-local-storage]"
      
      Copy

      Você deve inserir os colchetes ([ e ]) como mostrado no comando. Os colchetes especificam a parte extra do pacote que deve ser instalada.

      Use aspas ao redor do nome do pacote, como mostrado, para evitar que os colchetes sejam interpretados como um curinga.

      Se você precisar instalar outros extras (por exemplo, pandas para usando as APIs do conector Python para Pandas), use uma vírgula entre os extras:

      pip install "snowflake-connector-python[secure-local-storage,pandas]"
      
      Copy
    • Para o driver Snowflake JDBC, consulte Adição das classes JNA ao seu classpath.

Para desativar o armazenamento em cache de tokens MFA, desabilite o parâmetro ALLOW_CLIENT_MFA_CACHING:

ALTER ACCOUNT UNSET ALLOW_CLIENT_MFA_CACHING;
Copy

Para encontrar todos os usuários que usam armazenamento em cache de token MFA como autenticação de segundo fator para fazer login, você pode executar a seguinte instrução SQL como administrador de conta (um usuário com a função ACCOUNTADMIN):

SELECT EVENT_TIMESTAMP,
       USER_NAME,
       IS_SUCCESS
  FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
  WHERE SECOND_AUTHENTICATION_FACTOR = 'MFA_TOKEN';
Copy

Uso de MFA com SnowSQL

A MFA pode ser usada para conexão com o Snowflake através do SnowSQL. Por padrão, o mecanismo de autenticação Duo Push é usado quando um usuário é inscrito na MFA.

Para usar um código de acesso gerado pelo Duo em vez do mecanismo de push, os parâmetros de login devem incluir uma das seguintes opções de conexão:

--mfa-passcode <string> OR --mfa-passcode-in-password

Para obter mais detalhes, consulte SnowSQL (cliente CLI).

Uso de MFA com JDBC

A MFA pode ser usada para conexão com o Snowflake através do driver Snowflake JDBC. Por padrão, o mecanismo de autenticação Duo Push é usado quando um usuário é inscrito na MFA; não são necessárias alterações na cadeia de conexão JDBC.

Para usar um código de acesso gerado pelo Duo em vez do mecanismo push, um dos parâmetros a seguir deve ser incluído na cadeia de conexão JDBC:

passcode=<passcode_string> OR passcodeInPassword=on

Onde:

  • passcode_string é um código de acesso gerado pelo Duo para o usuário que está se conectando. Pode ser um código de acesso gerado pelo aplicativo Duo Mobile ou uma senha SMS.

  • Se passcodeInPassword=on, então a senha e o código de acesso são concatenados, na forma de <password_string><passcode_string>.

Para obter mais detalhes, consulte Driver JDBC.

Exemplos de cadeias de caracteres de conexão JDBC usando Duo

Cadeia de conexão JDBC para o usuário demo conectando à conta xy12345 (na região US West) usando um código de acesso Duo:

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcode=123456
Copy

Cadeia de conexão JDBC para o usuário demo conectando à conta xy12345 (na região US West) usando um código de acesso Duo que está incorporado na senha:

jdbc:snowflake://xy12345.snowflakecomputing.com/?user=demo&passcodeInPassword=on
Copy

Usao do MFA com Node.js

O MFA pode ser usado para se conectar ao Snowflake através do driver Snowflake Node.js. Por padrão, o mecanismo de autenticação Duo Push é usado quando um usuário é inscrito na MFA.

Para usar um senha numérica gerada pelo Duo em vez do mecanismo de push, os parâmetros de login devem incluir uma das seguintes opções de conexão. Ambos os exemplos usam uma senha de abc123 e uma senha numérica de MFA de 987654 para demonstrar a configuração.

  • Defina a opção passcodeInPassword como true e inclua a senha numérica como parte da cadeia de caracteres de senha, semelhante ao seguinte:

    authenticator: 'USERNAME_PASSWORD_MFA',
    password: "abc123987654", // passcode 987654 is part of the password
    passcodeInPassword: true  // because passcodeInPassword is true
    
    Copy
  • Defina a opção passcode como o valor da senha numérica para especificar a senha e a senha numérica separadamente, semelhante ao seguinte:

    authenticator: 'USERNAME_PASSWORD_MFA',
    password: "abc123", // password and MFA passcode are input separately
    passcode: "987654"
    
    Copy

    Para usar essa abordagem, certifique-se de que a opção passcodeInPassword seja false (o valor padrão). Se passcodeInPassword estiver definido como true e passcode também estiver configurado, a configuração passcodeInPassword terá precedência e o driver assumirá que o campo password contém a senha e a senha numérica de MFA ao se autenticar.

Para obter mais detalhes, consulte Use uma senha numérica MFA.

Uso de MFA com ODBC

A MFA pode ser usada para conexão com o Snowflake através do driver Snowflake ODBC. Por padrão, o mecanismo de autenticação Duo Push é usado quando um usuário é inscrito na MFA; não são necessárias alterações nas configurações do ODBC.

Para usar um código de acesso gerado pelo Duo em vez do mecanismo push, um dos parâmetros a seguir deve ser especificado para o driver:

passcode=<passcode_string> OR passcodeInPassword=on

Onde:

  • passcode_string é um código de acesso gerado pelo Duo para o usuário que está se conectando. Pode ser um código de acesso gerado pelo aplicativo Duo Mobile ou uma senha SMS.

  • Se passcodeInPassword=on, então a senha e o código de acesso são concatenados, na forma de <password_string><passcode_string>.

Para obter mais detalhes, consulte Driver ODBC.

Uso da MFA com Python

A MFA pode ser usada para conexão com o Snowflake através do conector Snowflake Python. Por padrão, o mecanismo de autenticação Duo Push é usado quando um usuário é inscrito na MFA; não são necessárias alterações nas chamadas de API do Python.

Para usar um código de acesso gerado pelo Duo em vez do mecanismo push, um dos parâmetros a seguir deve ser especificado para o driver no método connect():

passcode=<passcode_string> OR passcode_in_password=True

Onde:

  • passcode_string é um código de acesso gerado pelo Duo para o usuário que está se conectando. Pode ser um código de acesso gerado pelo aplicativo Duo Mobile ou uma senha SMS.

  • Se passcode_in_password=True, então a senha e o código de acesso são concatenados, na forma de <password_string><passcode_string>.

Para obter mais detalhes, consulte a descrição do método connect() na seção Funções da documentação da API do Conector Python.