Configuração do Snowflake para usar a autenticação federada

Este tópico descreve como configurar o Snowflake para autenticação federada usando uma integração de segurança SAML2. Este tópico pressupõe que você já tenha configurado seu IdP para funcionar com o Snowflake.

Nota

A integração de segurança SAML2 substitui o parâmetro de conta SAML_IDENTITY_PROVIDER obsoleto.

Se você tiver uma implementação existente de SSO que usa este parâmetro de conta obsoleto, você deverá migrar para uma integração de segurança SAML antes de continuar a configurar o Snowflake para autenticação federada.

O Snowflake continuará a oferecer suporte ao parâmetro de conta obsoleto enquanto houver implementações que o utilizem.

Neste tópico:

Criação de uma integração de segurança SAML2

Snowflake usa uma integração de segurança SAML2 para fazer a integração com o IdP que você está usando para implementar a autenticação federada. Use o comando CREATE SECURITY INTEGRATION para começar a configurar o Snowflake para SSO.

Importante

Quando você configurar um IdP para SSO, será necessário fornecer um URL para a conta Snowflake. O formato desse URL deve corresponder aos URLs nas propriedades SAML2_SNOWFLAKE_ISSUER_URL e SAML2_SNOWFLAKE_ACS_URL da integração de segurança.

Se você não definir essas propriedades ao criar a integração de segurança, elas assumirão a definição padrão de URL herdado da conta.

Por exemplo, para criar uma integração de segurança que utilize um URL de nome de conta com conectividade privada, execute o seguinte comando SQL:

CREATE SECURITY INTEGRATION my_idp
  TYPE = saml2
  ENABLED = true
  SAML2_ISSUER = 'https://example.com'
  SAML2_SSO_URL = 'http://myssoprovider.com'
  SAML2_PROVIDER = 'ADFS'
  SAML2_X509_CERT = 'MIICr...'
  SAML2_SNOWFLAKE_ISSUER_URL = 'https://<orgname>-<account_name>.privatelink.snowflakecomputing.com'
  SAML2_SNOWFLAKE_ACS_URL = 'https://<orgname>-<account_name>.privatelink.snowflakecomputing.com/fed/login';
Copy

Observe que /fed/login está anexado ao URL para a propriedade SAML2_SNOWFLAKE_ACS_URL. Para obter mais detalhes sobre os formatos de URL para contas Snowflake, consulte Conexão com uma URL.

Após configurar uma integração de segurança SAML2, você poderá usar a integração de segurança para executar as seguintes tarefas:

  • Criptografar asserções SAML

  • Enviar solicitações SAML assinadas

  • Especificar o formato SAML NameID

  • Exportar os metadados de integração de segurança SAML2

  • Impor a reautenticação no procedimento do Snowflake

Configuração de login de SSO para usuários

Após ter criado uma integração de segurança SAML2, você poderá configurar se o usuário inicia seu login SSO a partir do IdP ou do Snowflake.

Um SSO iniciado por IdP não requer configuração no Snowflake. Você só precisa informar seus usuários sobre como acessar o Snowflake (por exemplo, usando um portal interno).

A propriedade SAML2_ENABLE_SP_INITIATED ativa SSO iniciado pelo Snowflake. A propriedade SAML2_SP_INITIATED_LOGIN_PAGE_LABEL define uma cadeia de caracteres que identifica o IdP. Esta cadeia de caracteres aparece na página de login do Snowflake para que os usuários possam acessar o IdP.

Use o comando ALTER SECURITY INTEGRATION para definir estas propriedades:

ALTER SECURITY INTEGRATION my_idp SET SAML2_ENABLE_SP_INITIATED = true;
ALTER SECURITY INTEGRATION my_idp SET SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'My IdP';
Copy

Para obter mais informações sobre como os clientes se conectam ao Snowflake depois de configurar login SSO para usuários, consulte Uso de SSO com aplicativos clientes que se conectam ao Snowflake

Criptografia de asserções SAML

A propriedade SAML2_SNOWFLAKE_X509_CERT garante que as asserções SAML2 sejam criptografadas usando o certificado público do Snowflake, protegendo o tráfego quando os usuários acessam o Snowflake por autenticação federada.

Depois de receber as afirmações criptografadas do IdP do cliente, Snowflake descriptografa as asserções com sua chave privada. Snowflake nunca exporta ou disponibiliza sua chave privada.

Para criptografar asserções SAML, consulte as seções abaixo.

Exportação do certificado público do Snowflake

Depois de ter criado uma integração de segurança SAML2, siga as etapas abaixo:

  1. Execute a seguinte instrução SQL na integração SAML2.

    DESC SECURITY INTEGRATION my_idp;
    
    Copy
  2. Encontre o valor SAML2_SNOWFLAKE_X509_CERT na linha 7, que é o certificado público no formato PEM.

  3. Salve o valor, sem esquecer de incluir os delimitadores BEGIN CERTIFICATE e END CERTIFICATE. Por exemplo, o bloco de código abaixo contém um certificado truncado no formato PEM:

    -----BEGIN CERTIFICATE-----
    MIICr...
    -----END CERTIFICATE-----
    
    Copy

Criação de uma solicitação de assinatura de certificado (CSR) — Opcional

Por padrão, uma integração de segurança SAML2 no Snowflake usa um certificado autoassinado para o IdP do SAML para criptografar asserções SAML. Se sua organização exigir o uso de um certificado emitido por uma autoridade certificadora (CA), complete as etapas abaixo:

  1. Gere uma solicitação de assinatura de certificado (CSR) do Snowflake usando a função do sistema SYSTEM$GENERATE_SAML_CSR.

  2. Forneça o CSR ao CA de sua escolha para que o certificado possa ser emitido.

  3. Carregue o certificado codificado em base64 para a integração SAML usando a instrução ALTER a seguir, sem os delimitadores BEGIN CERTIFICATE e END CERTIFICATE.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SNOWFLAKE_X509_CERT = 'AX2bv...';
    
    Copy
  4. Executar o comando DESCRIBE INTEGRATION para visualizar a integração de segurança atualizada:

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Você pode então carregar o certificado para sua chave privada usando o CSR gerado pela função no Snowflake.

Configuração do seu SAML IdP

  1. Carregue o certificado salvo no formato PEM para o IdP de sua organização como o certificado de criptografia SAML.

  2. Configure seu IdP para criptografar asserções SAML para o provedor de serviço Snowflake (SP).

Envio de solicitações SAML assinadas

Você pode enviar uma solicitação SAML assinada do Snowflake ao IdP para verificar o Snowflake como um provedor de serviços autêntico. Para verificar o Snowflake, você pode configurar seu IdP para usar o certificado armazenado na integração de segurança SAML2 para garantir que a solicitação SAML tenha origem no Snowflake e não em um terceiro que esteja se passando pela Snowflake.

Definição da propriedade SAML2_SIGN_REQUEST

Se você estiver criando uma integração de segurança SAML2 pela primeira vez, certifique-se de definir a propriedade SAML2_SIGN_REQUEST.

Se você tiver criado uma integração de segurança SAML2 sem definir a propriedade SAML2_SIGN_REQUEST, siga as etapas abaixo:

  1. Executar o comando ALTER SECURITY INTEGRATION como um usuário com uma função ACCOUNTADMIN para atualizar a integração de segurança:

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SIGN_REQUEST = true;
    
    Copy
  2. Executar o comando DESCRIBE INTEGRATION para visualizar a integração de segurança atualizada:

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Configuração de seu IdP para aceitar solicitações assinadas

Configure seu IdP para aceitar solicitações assinadas do Snowflake. Durante a configuração, seu IdP precisa ter o certificado armazenado na propriedade SAML2_SNOWFLAKE_X509_CERT. Seu IdP usa este certificado para verificar se a solicitação SAML tem origem no Snowflake.

Nota

O Snowflake não é responsável pela configuração de seu IdP. Para ajuda na configuração de seu IdP, consulte seu administrador de segurança interno.

  1. Executar o comando DESCRIBE INTEGRATION:

    DESC SECURITY INTEGRATION my_idp;
    
    Copy
  2. Salve o valor da propriedade SAML2_SNOWFLAKE_X509_CERT na linha 7 para usar em suas configurações de IdP.

Especificação do formato SAML NameID

O Snowflake permite ao administrador (ou seja, usuário com a função ACCOUNTADMIN) especificar o formato SAML NameID que será solicitado na solicitação de autenticação SAML de saída enviada pelo Snowflake para o IdP.

Especificar o formato SAML NameID permite ao Snowflake definir uma expectativa do atributo de identificação do usuário (isto é, o assunto SAML) na asserção SAML do IdP para assegurar uma autenticação válida para o Snowflake.

O formato SAML NameID pode ser integrado na integração de segurança SAML2. Você pode especificar o SAML NameID na integração de segurança usando um dos seguintes valores:

  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

  • urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName

  • urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName

  • urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient

Se o formato SAML NameID não for especificado, o Snowflake usa o seguinte valor:

urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

Definição da propriedade SAML2_REQUESTED_NAMEID_FORMAT

Se você estiver criando uma integração de segurança SAML2 pela primeira vez, certifique-se de definir a propriedade SAML2_REQUESTED_NAMEID_FORMAT.

Se você tiver criado uma integração de segurança SAML2 sem definir a propriedade SAML2_REQUESTED_NAMEID_FORMAT, siga as etapas abaixo:

  1. Executar o comando ALTER SECURITY INTEGRATION como um usuário com uma função ACCOUNTADMIN para especificar o formato SAML NameId:

    ALTER SECURITY INTEGRATION my_idp SET SAML2_REQUESTED_NAMEID_FORMAT = '<string_literal>';
    
    Copy
  2. Executar o comando DESCRIBE INTEGRATION para visualizar a integração de segurança atualizada:

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Configuração do seu IdP para especificar o NameID

Configure seu IdP para especificar o formato SAML NameID nas asserções SAML.

Nota

O Snowflake não é responsável pela configuração de seu IdP. Para ajuda na configuração de seu IdP, consulte seu administrador de segurança interno.

Exportação dos metadados de integração de segurança SAML2

O Snowflake fornece metadados SAML 2.0 para a integração de segurança SAML2 para facilitar a configuração do provedor de serviço Snowflake em seu IdP.

Os metadados SAML 2.0 estão contidos na propriedade SAML2_SNOWFLAKE_METADATA e podem ser obtidos por meio da execução de um comando DESCRIBE INTEGRATION na integração de segurança SAML2. Por exemplo:

DESC SECURITY INTEGRATION my_idp;
Copy
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
              property              | property_type |                               property_value                                | property_default |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
SAML2_X509_CERT                     | String        | MIICr...                                                                    |                  |
SAML2_PROVIDER                      | String        | OKTA                                                                        |                  |
SAML2_ENABLE_SP_INITIATED           | Boolean       | false                                                                       | false            |
SAML2_SP_INITIATED_LOGIN_PAGE_LABEL | String        | my_idp                                                                      |                  |
SAML2_SSO_URL                       | String        | https://okta.com/sso                                                        |                  |
SAML2_ISSUER                        | String        | https://okta.com                                                            |                  |
SAML2_SNOWFLAKE_X509_CERT           | String        | MIICr...                                                                    |                  |
SAML2_REQUESTED_NAMEID_FORMAT       | String        | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress                      |                  |
SAML2_SNOWFLAKE_ACS_URL             | String        | https://example.snowflakecomputing.com/fed/login                            |                  |
SAML2_SNOWFLAKE_ISSUER_URL          | String        | https://example.snowflakecomputing.com                                      |                  |
SAML2_SNOWFLAKE_METADATA            | String        | <md:EntityDescriptor entityID="https://example.snowflakecomputing.com"> ... |                  |
SAML2_DIGEST_METHODS_USED           | String        | http://www.w3.org/2001/04/xmlenc#sha256                                     |                  |
SAML2_SIGNATURE_METHODS_USED        | String        | http://www.w3.org/2001/04/xmldsig-more#rsa-sha256                           |                  |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+

Como um exemplo representativo, os metadados SAML 2.0 XML formatados da propriedade SAML2_SNOWFLAKE_METADATA são mostrados abaixo. Observe que os valores X509certificate para signing e encryption estão truncados.

<md:EntityDescriptor xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" entityID="https://example.snowflakecomputing.com">
 <md:SPSSODescriptor AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  <md:KeyDescriptor use="signing">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICr...</dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:KeyDescriptor use="encryption">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICr...</dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:AssertionConsumerService index="0" isDefault="true" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://example.snowflakecomputing.com/fed/login" />
 </md:SPSSODescriptor>
</md:EntityDescriptor>
Copy

Para referência, a tabela a seguir mapeia as tags de metadados XML para as propriedades de integração de segurança do Snowflake SAML2.

Saída XML

Propriedade de integração de segurança SAML2

entityID

SAML2_SNOWFLAKE_ISSUER_URL

AuthnRequestsSigned

SAML2_SIGN_REQUEST

Certificado de assinatura

SAML2_SNOWFLAKE_X509_CERT

Certificado de criptografia

SAML2_SNOWFLAKE_X509_CERT

URL do serviço ao consumidor de asserção

SAML2_SNOWFLAKE_ACS_URL

Imposição de reautenticação no Snowflake

O Snowflake oferece suporte à configuração de sua integração de segurança SAML2 para exigir que o usuário volte a se autenticar para acessar o Snowflake durante o fluxo inicial de autenticação SSO ou quando uma sessão atual do Snowflake expirar.

Ao ativar este recurso na integração de segurança SAML2 do Snowflake, o Snowflake define a propriedade ForceAuthn da especificação SAML como True na solicitação SAML de saída do Snowflake para o IdP. Assim que o IdP recebe a solicitação com a propriedade ForceAuthn definida como True, o IdP envia uma solicitação ao Snowflake, o que faz com que os usuários sejam solicitados a digitar novamente suas credenciais de autenticação (por exemplo, nome de usuário, senha) para acessar o Snowflake.

Este recurso proporciona maior segurança por meio da reautenticação. Além disso, o prompt de reautenticação permite aos usuários inserir um conjunto diferente de credenciais do que aquelas usadas para iniciar o SSO para acessar o Snowflake.

Importante

Antes de implementar esse recurso, verifique se seu IdP oferece suporte à troca de identidades durante um fluxo de autenticação SSO.

Se esse recurso for implementado no Snowflake e seu IdP não oferecer suporte à troca de identidades durante o fluxo inicial de autenticação SSO, os usuários podem não ser capazes de acessar o Snowflake usando o conjunto diferente de credenciais fornecidas no prompt de reautenticação.

Se você estiver criando uma integração de segurança SAML2 pela primeira vez, certifique-se de definir a propriedade SAML2_FORCE_AUTHN.

Para atualizar uma integração de segurança SAML2 existente para oferecer suporte à reautenticação forçada para acessar o Snowflake, siga as etapas abaixo:

  1. Executar o comando ALTER SECURITY INTEGRATION para atualizar a integração de segurança:

    ALTER SECURITY INTEGRATION my_idp SET SAML2_FORCE_AUTHN = true;
    
    Copy
  2. Executar o comando DESCRIBE INTEGRATION para visualizar a integração de segurança atualizada:

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Onde:

SAML2_FORCE_AUTHN = TRUE | FALSE

O booleano indica se os usuários, durante o fluxo inicial de autenticação, são forçados a se autenticar novamente para acessar o Snowflake. Quando ajustado para TRUE, o Snowflake define a propriedade ForceAuthn SAML como TRUE na solicitação de saída do Snowflake para o provedor de identidade.

  • TRUE força os usuários a se autenticarem novamente para acessar o Snowflake, mesmo que exista uma sessão válida com o provedor da identidade.

  • FALSE não força os usuários a se autenticarem novamente para acessar o Snowflake.

Padrão: FALSE.

Ponto de extremidade de logout personalizado

O Snowflake oferece suporte à definição de um URL de ponto de extremidade personalizado para redirecionar os usuários após o logout do Snowflake. O ponto de extremidade é definido por meio da propriedade SAML2_POST_LOGOUT_REDIRECT_URL na integração de segurança SAML2.

Uma vez ativado para os usuários que acessam o Snowflake por meio do SSO do SAML, ao clicar no botão Log Out na Classic Console, a sessão Snowflake é terminada e os usuários são redirecionados para o ponto de extremidade especificado.

Importante

Esse comportamento não se aplica a Snowsight.

A definição de um ponto de extremidade de logout oferece aos administradores a opção de controlar aonde os usuários são redirecionados após o logout do Snowflake. Por exemplo, um ponto de extremidade personalizado pode acionar um script para encerrar simultaneamente o IdP da sessão. A vantagem dessa implementação é que tanto a sessão do Snowflake como a sessão do IdP são encerradas, o que obriga os usuários a se reautenticarem em relação ao IdP para acessar o Snowflake.

Se você estiver criando uma integração de segurança SAML2 pela primeira vez, certifique-se de definir a propriedade SAML2_POST_LOGOUT_REDIRECT_URL.

Se você tiver criado uma integração de segurança SAML2 sem definir a propriedade SAML2_POST_LOGOUT_REDIRECT_URL, execute o comando ALTER SECURITY INTEGRATION para configurar o ponto de extremidade de logout personalizado:

ALTER SECURITY INTEGRATION my_idp SET SAML2_POST_LOGOUT_REDIRECT_URL = 'https://logout.example.com';
Copy

Gerenciamento de sua integração de segurança SAML2

Você pode usar um comando ALTERSECURITYINTEGRATION para gerenciar a integração de segurança SAML2. Por exemplo:

  • Atualize o certificado X.509 como uma cadeia de caracteres em uma integração de segurança SAML2 existente.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_X509_CERT = 'AX2bv...';
    
    Copy
  • Se você for um cliente que configura seu IdP para verificar assinaturas de solicitação SAML ou criptografar respostas SAML, poderá substituir sua chave privada e certificado autoassinado existentes e gerar uma nova chave privada e certificado autoassinado:

    1. Gerar uma nova chave privada:

      Cuidado

      Depois de executar o comando abaixo, a autenticação SAML para de funcionar porque seu IdP ainda usa seu certificado SAML2_SNOWFLAKE_X509_CERT antigo. Para minimizar as interrupções, você deve executar o comando abaixo quando os usuários não estiverem tão ativos.

      ALTER SECURITY INTEGRATION my_idp REFRESH SAML2_SNOWFLAKE_PRIVATE_KEY;
      
      Copy
    2. Recuperar o valor da propriedade SAML2_SNOWFLAKE_X509_CERT na sua integração de segurança:

      DESCRIBE SECURITY INTEGRATION my_idp;
      SELECT "property_value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
        WHERE "property" = 'SAML2_SNOWFLAKE_X509_CERT';
      
      Copy
    3. Carregue o valor recuperado em seu IdP para substituir o certificado antigo pelo novo certificado em IdP.

  • Habilite solicitações assinadas.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SIGN_REQUEST = true;
    
    Copy
  • Especifique o formato NameID.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_REQUESTED_NAMEID_FORMAT = 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified';
    
    Copy
  • Atualize uma integração de segurança existente para permitir a reautenticação forçada.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_FORCE_AUTHN = true;
    
    Copy
  • Atualize uma integração de segurança existente para desabilitar a reautenticação forçada.

    ALTER SECURITY INTEGRATION my_idp UNSET SAML2_FORCE_AUTHN;
    
    Copy
  • Atualize o ponto de extremidade de logout personalizado.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_POST_LOGOUT_REDIRECT_URL = 'https://logout.example.com';
    
    Copy

Para obter mais informações, consulte ALTERSECURITYINTEGRATION.

Replicação da configuração de SSO

O Snowflake oferece suporte à replicação e failover/failback da integração de segurança SAML2 a partir 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.