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

Se você tiver uma implementação existente de SSO que usa este parâmetro 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 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 dessa URL deve corresponder às URLs nos parâmetros SAML2_SNOWFLAKE_ISSUER_URL e SAML2_SNOWFLAKE_ACS_URL da integração de segurança.

Se você não definir esses parâmetros ao criar a integração de segurança, eles assumem a definição padrão de URL herdada 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 = 'my_x509_cert'
  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 à URL para o parâmetro 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).

O parâmetro SAML2_ENABLE_SP_INITIATED permite que o SSO iniciado pelo Snowflake. O parâmetro 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 estes parâmetros:

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

Criptografar asserções SAML

O parâmetro 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.

Etapa 1: Definir o parâmetro SAML2_X509_CERT

Se você não tiver uma integração de segurança SAML2 existente, execute a seguinte instrução SQL para criar uma integração de segurança SAML2 e defina o parâmetro SAML2_x509_cert:

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 = 'my_x509_cert'
Copy

Etapa 2: Exportar o 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-----
    MIICrTCCAZWgAwIBAgIJAOF6EPk93wjlMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
    BAMMC1RFU1RBQ0NPVU5UMB4XDTIwMDE....
    -----END CERTIFICATE-----
    
    Copy

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

Etapa 4: Configurar seu IdP SAML

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

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

Etapa 1: Definir o parâmetro SAML2_SIGN_REQUEST

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

Se você tiver criado uma integração de segurança SAML2 sem definir o parâmetro 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

Etapa 2: Configurar 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 no parâmetro 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 do parâmetro 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

Etapa 1: Definir o parâmetro SAML2_REQUESTED_NAMEID_FORMAT

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

Se você tiver criado uma integração de segurança SAML2 sem definir o parâmetro 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

Etapa 2: Configurar 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.

Exportar os 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;

------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
              property              | property_type |                               property_value                                | property_default |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
SAML2_X509_CERT                     | String        | MIICrTCCAZWgAwIBAgIJAOF6EPk93wj...                                          |                  |
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        | MIICrTCCAZWgAwIBAgIJAOF6EPk93wj...                                          |                  |
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                           |                  |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
Copy

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>MIICrTCCAZWgAwIBAgIJAOF6EPk93wj... </dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:KeyDescriptor use="encryption">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICrTCCAZWgAwIBAgIJAOF6EPk93wj... </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 o parâmetro 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 o parâmetro ForceAuthn definido 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 o parâmetro 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 o parâmetro 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 o parâmetro SAML2_POST_LOGOUT_REDIRECT_URL.

Se você tiver criado uma integração de segurança SAML2 sem definir o parâmetro 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:

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

    alter security integration my_idp set SAML2_SNOWFLAKE_X509_CERT = 'AX2bv...';
    
    Copy
  • Substitua a chave privada e o certificado autoassinado existentes e gere uma nova chave privada e um certificado autoassinado.

    alter security integration my_idp refresh SAML2_SNOWFLAKE_PRIVATE_KEY;
    
    Copy
  • 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
  • Ative ou desative a reautenticação forçada para o Snowflake.

    -- update an existing security integration to enable forced re-authentication
    alter security integration my_idp set SAML2_FORCE_AUTHN = true;
    
    -- unset forced re-authentication
    alter security integration my_idp unset SAML2_FORCE_AUTHN;
    
    Copy
  • Especifique o ponto de extremidade de logout personalizado.

    -- Update the endpoint URL
    
    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.