Visão geral de segurança do Streamlit in Snowflake

Este tópico apresenta uma visão geral de segurança para administradores de sistema que gerenciam o Streamlit in Snowflake em suas contas Snowflake. Compreender o modelo de segurança e implementar controles adequados garante que os desenvolvedores possam criar aplicativos seguros, enquanto os administradores mantêm a governança sobre dados e recursos confidenciais.

Modelo de segurança

O Streamlit in Snowflake segue o modelo de segurança abrangente do Snowflake, que inclui recursos de autenticação, controle de acesso baseado em função, políticas de redes e governança de dados. Os apps são objetos Snowflake de primeira classe que se integram à infraestrutura de segurança existente.

Execução dos direitos do proprietário

Por padrão, os apps Streamlit são executados com direitos de proprietário, semelhantes aos procedimentos armazenados. Esse comportamento tem as seguintes consequências:

  • Os apps executam consultas usando os privilégios do proprietário do app, não do visualizador.

  • A função do proprietário do app determina quais dados e operações o app pode acessar.

  • Os visualizadores podem interagir com o app sem precisar de acesso direto a tabelas ou exibições subjacentes.

Esse modelo elimina a necessidade de tokens de conta de serviço e se integra perfeitamente aos recursos de autenticação e de controle de acesso do Snowflake. Para obter mais informações, consulte Noções básicas sobre os direitos do proprietário e aplicativos Streamlit in Snowflake.

Como alternativa, você pode configurar um app de tempo de execução de contêiner para usar direitos restritos do autor da chamada (versão preliminar), o que permite que o app seja executado com os privilégios do visualizador em vez dos do proprietário. Para obter mais informações, consulte Direitos restritos do autor da chamada e do Streamlit in Snowflake.

Modelo de responsabilidade compartilhada

A responsabilidade de segurança é compartilhada entre Snowflake, administradores de conta e desenvolvedores de apps:

  • O Snowflake oferece a plataforma segura e os recursos de autenticação, criptografia e segurança.

  • Os administradores configuram políticas de segurança no nível da conta, gerenciam funções e privilégios e fazem a auditoria do uso de apps.

  • Os desenvolvedores de apps escrevem códigos seguros, administram os segredos corretamente e seguem as práticas recomendadas de segurança.

Para obter mais informações sobre o modelo de segurança do Snowflake, consulte o modelo de responsabilidade compartilhada do Snowflake.

Política de segurança de conteúdo

Todos os apps Streamlit são executados conforme uma política de segurança de conteúdo (CSP) que restringe os recursos que podem ser carregados. Essa política oferece proteção de defesa em profundidade contra script entre sites (Cross-Site Scripting, XSS) e outros ataques de injeção de código. A CSP não é configurável no momento.

A CSP bloqueia os seguintes recursos externos:

  • Carregamento de código (scripts, estilos, fontes) de domínios externos

  • Incorporação de apps em iFrames de domínios externos

A CSP autoriza os seguintes recursos externos:

  • Imagens e mídia de fontes HTTPS: Os apps podem carregar imagens e arquivos de mídia de qualquer URL HTTPS, incluindo serviços externos de hospedagem de imagens e APIs que retornam imagens. Isso não requer uma integração de acesso externo.

  • URIs de dados e URLs de blobs: Os apps podem usar dados incorporados (URIs de dados) e conteúdo gerado dinamicamente (URLs de blobs) para imagens e mídia. Isso oferece suporte a recursos como exibição de gráficos, diagramas ou conteúdo carregado pelo usuário.

  • Recursos do Mapbox e Carto: Um subconjunto limitado de recursos do Mapbox e do Carto é permitido para oferecer suporte a visualizações de mapeamento.

Nota

  • Para tempos de execução de warehouse que usam o conda para gerenciar dependências, você deve aceitar os termos do Anaconda para usar o Mapbox. Para obter mais informações, consulte Como usar pacotes de terceiros do Anaconda.

  • O carregamento de imagens ou mídia de domínios externos é compatível com o Streamlit in Snowflake, mas não com o Snowflake Native App Framework.

  • A CSP também bloqueia chamadas de front-end, que geralmente são consideradas inseguras, como eval().

Essa política restritiva significa que a maioria das bibliotecas JavaScript de terceiros e os componentes personalizados que dependem de scripts externos não funcionarão nos apps Streamlit. Para obter informações sobre as limitações da CSP, consulte Carregando recursos externos.

Configuração de segurança essencial

As seguintes configurações de segurança são essenciais para um ambiente do Streamlit in Snowflake seguro e com bom funcionamento.

Configuração de acesso à rede

Configure o acesso à rede para garantir que os apps possam se comunicar com o Snowflake.

Para todas as implantações:

  • Adicione o *.snowflake.app à sua lista de permissão de rede para permitir a comunicação entre os apps Streamlit e o Snowflake.

  • Para apps Streamlit que usam tempos de execução de contêiner, adicione também *.snowflakecomputing.app à lista de permissão da sua rede.

  • Garanta que o WebSockets não estejam bloqueados na sua configuração de rede.

Para obter mais informações, consulte Não é possível carregar o app Streamlit.

Para conectividade privada:

Se sua organização exigir conectividade privada, configure AWS PrivateLink, Azure Private Link ou Google Cloud Private Service Connect para acesso ao Snowflake e ao app Streamlit. Para obter mais informações, consulte Private connectivity for Streamlit in Snowflake.

controle de acesso baseado em função

Estabeleça uma hierarquia de funções para gerenciar os apps Streamlit.

Estrutura de funções recomendada:

  • Funções do criador: Funções com privilégios CREATE STREAMLIT em esquemas nos quais os apps serão implantados.

  • Funções do visualizador: Funções com privilégios USAGE nos apps para usuários finais.

O exemplo a seguir mostra como criar uma hierarquia de funções para apps Streamlit:

-- Create dedicated roles for Streamlit
CREATE ROLE streamlit_developer;
CREATE ROLE streamlit_viewer;

-- Grant hierarchy
GRANT ROLE streamlit_viewer TO ROLE streamlit_developer;

-- Grant privileges for app creation
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_developer;
GRANT USAGE ON SCHEMA streamlit_db.apps TO ROLE streamlit_developer;
GRANT CREATE STREAMLIT ON SCHEMA streamlit_db.apps TO ROLE streamlit_developer;
GRANT USAGE ON COMPUTE_POOL streamlit_compute_pool TO ROLE streamlit_developer;
GRANT USAGE ON INTEGRATION python_package_index TO ROLE streamlit_developer;

-- Grant privileges for app viewing
GRANT USAGE ON WAREHOUSE streamlit_wh TO ROLE streamlit_viewer;
GRANT USAGE ON DATABASE streamlit_db TO ROLE streamlit_viewer;
GRANT USAGE ON SCHEMA streamlit_db.apps TO ROLE streamlit_viewer;
GRANT USAGE ON STREAMLIT streamlit_db.apps.my_app TO ROLE streamlit_viewer;
Copy

O desenvolvedor de apps também precisa de USAGE em streamlit_wh, mas isso é herdado da função do visualizador. Para obter mais informações sobre os privilégios necessários, consulte Privilégios necessários para criar e usar um aplicativo Streamlit.

Gerenciamento de segredos

Configure o gerenciamento de segredos adequado para apps que acessam serviços externos ou credenciais confidenciais:

  1. Permita o acesso a segredos para apps concedendo os devidos privilégios:

    -- Grant privileges on secrets to app owner role
    GRANT READ ON SECRET my_secret TO ROLE streamlit_developer;
    GRANT USAGE ON INTEGRATION my_external_access_integration TO ROLE streamlit_developer;
    
    Copy
  2. Para apps em tempo de execução de contêiner, crie funções SQL para encapsular o acesso do segredo em vez de incorporar segredos ao código do app.

Para obter mais informações, consulte Gerenciamento de segredos e configuração do app Streamlit.

Funções de contexto e segurança no nível da linha

Em tempos de execução de warehouse, se seus apps usam funções de contexto (como CURRENT_USER()) ou tabelas de acesso com políticas de acesso a linhas, conceda o privilégio global READ SESSION às funções de proprietário do app:

USE ROLE ACCOUNTADMIN;
GRANT READ SESSION ON ACCOUNT TO ROLE streamlit_developer;
Copy

Nota

Os apps de tempo de execução de warehouse que usam CURRENT_ROLE() em políticas de acesso a linhas sempre retornam a função do proprietário do app, não a função do visualizador, porque os apps são executados com direitos de proprietário por padrão.

Para obter mais informações e exemplos, consulte Políticas de acesso a linhas no Streamlit in Snowflake.

Nos tempos de execução de contêiner, as funções de contexto nas conexões de direitos do proprietário retornam valores do contexto da função de proprietário e, portanto, não são apropriadas para políticas de acesso a linhas voltadas ao usuário. No entanto, as conexões de direitos restritos do autor da chamada retornam o contexto do visualizador. Para obter mais informações, consulte Direitos restritos do autor da chamada e do Streamlit in Snowflake.

Somente tempos de execução de contêiner: Segurança do repositório de pacotes

Configure um ou mais índices de pacote para tempos de execução de contêiner.

Os tempos de execução de contêiner podem instalar pacotes de repositórios externos como PyPI. Você pode controlar as fontes dos pacotes usando índices de pacote selecionados, como JFrog Artifactory, ou pode usar o índice de pacote padrão, PyPI. Seja qual for o índice de pacote você use, crie uma integração de acesso externo (External Access Integration, EAI) para permitir que os apps instalem as dependências.

O uso de um índice de pacote selecionado oferece os seguintes benefícios:

  • Ele ajuda a evitar ataques à cadeia de suprimentos e garante que os pacotes venham de fontes confiáveis.

  • Você pode controlar os pacotes e as versões que estarão disponíveis para seus apps.

  • Ele oferece trilhas de auditoria para instalações de pacotes.

Para obter mais informações, consulte Gerenciamento de dependências para tempos de execução de contêiner.

Somente tempos de execução de warehouse: Termos das ofertas externas

Os tempos de execução de warehouse usam o conda para gerenciar as dependências do seu app. Para usar o Mapbox em seus apps, você deve confirmar os Termos de ofertas externas.

Para obter informações sobre como usar esse pacote, consulte Como usar pacotes de terceiros do Anaconda.

Recursos de segurança disponíveis

Os recursos de segurança a seguir estão disponíveis para reforçar a segurança e a governança do app.

Integrações de acesso externo

Controle quais redes e serviços externos seus apps podem acessar:

  • Crie regras de rede para definir os pontos de extremidade permitidos, incluindo os índices de pacote.

  • Crie integrações de acesso externo que façam referência a regras de rede e segredos de autenticação.

  • Atribua integrações de acesso externo aos apps Streamlit.

Isso evita que apps façam conexões de saída não autorizadas e oferece trilhas de auditoria para acesso externo.

Para obter mais informações, consulte Acesso à rede externa no Streamlit in Snowflake.

Integração com Git

Integre apps Streamlit a repositórios Git para controle de versão e rastreamento de alterações:

  • Conceda privilégios apropriados em objetos do repositório Git (READ, WRITE ou OWNERSHIP).

  • Use a integração com o Git para manter trilhas de auditoria de alterações de código.

  • Implemente processos de revisão de código antes de implantar alterações nos apps de produção.

Para obter mais informações, consulte Sincronizar aplicativos Streamlit in Snowflake com um repositório Git.

Conectividade privada

Para organizações com requisitos rigorosos de segurança de rede, configure a conectividade privada para garantir que todo o tráfego do Streamlit permaneça dentro da sua rede privada. O Streamlit in Snowflake oferece suporte às seguintes opções de conectividade privada:

A conectividade privada elimina a exposição à internet pública e fornece isolamento adicional da rede.

Para obter mais informações, consulte Private connectivity for Streamlit in Snowflake.

Registro e rastreamento

Habilite o registro em log para monitorar o comportamento do app e solucionar problemas:

Para tempos de execução de contêiner (versão preliminar), o Snowflake captura automaticamente a saída e o erro padrão do contêiner e os armazena na tabela de eventos da conta. Nenhuma configuração adicional é necessária.

Para obter mais informações, consulte Registro e rastreamento para Streamlit in Snowflake.

Somente tempos de execução de contêiner: Limitar o acesso de um usuário apenas ao Streamlit in Snowflake

Para restringir o acesso de um usuário apenas ao Streamlit in Snowflake e impedi-lo de acessar outras partes do Snowflake, um administrador de conta pode adicionar uma propriedade de usuário personalizada usando SQL ou o atributo SCIM. Isso também restringe o usuário a visualizar apenas apps de tempo de execução de contêiner. Os apps de tempo de execução de warehouse não são compatíveis com URLs de visualizador de apps e não podem ser visualizados por usuários restritos somente ao Streamlit.

  • Para restringir um usuário, use o comando SQL ALTER USER para definir a propriedade ALLOWED_INTERFACES que vai incluir STREAMLIT:

    ALTER USER <user_name> SET ALLOWED_INTERFACES = (STREAMLIT);
    
    Copy

Se você estiver provisionando usuários com APIs SCIM, poderá definir a mesma configuração usando o atributo personalizado allowedInterfaces. Para obter mais informações sobre os atributos personalizados de SCIM, consulte Referência da API do usuário SCIM.

Depois que o acesso somente ao Streamlit estiver configurado, o usuário não poderá acessar nenhuma outra parte do Snowflake, exceto os apps Streamlit in Snowflake para os quais ele tem permissão. Além disso, ele só pode acessar o URL de visualizador para esses apps. Se um usuário exclusivo do Streamlit tentar navegar para qualquer outro lugar no Snowflake, incluindo o URL de um construtor de apps, isso resultará em erro de controle de acesso.

Somente tempos de execução de contêiner: Redirecionar os visualizadores de apps para o seu provedor de identidade

O administrador da conta pode configurar todos os URLs de visualizador de apps para serem redirecionados ao seu provedor de identidade (Identity Provider, IdP), quando um visualizador não autenticado acessa um app. Esse processo elimina uma etapa do fluxo de login do usuário. Os URLs de visualizador de apps são compatíveis apenas com apps de tempo de execução de contêiner.

  • Para redirecionar usuários não autenticados dos URLs de visualizador de apps para o seu IdP, use o comando SQL ALTER ACCOUNT para definir a propriedade de conta LOGIN_IDP_REDIRECT para incluir STREAMLIT:

    ALTER ACCOUNT SET LOGIN_IDP_REDIRECT = (STREAMLIT = <your_security_integration>);
    
    Copy

Para obter mais informações sobre como configurar sua conta Snowflake para usar um IdP, consulte os seguintes tópicos:

Práticas recomendadas para administradores

As práticas recomendadas a seguir ajudam a manter o ambiente do Streamlit seguro.

Usar funções e esquemas dedicados:

  • Crie esquemas separados para apps de desenvolvimento, teste e produção.

  • Use funções diferentes para cada ambiente para evitar alterações acidentais em apps de produção.

  • Conceda a propriedade do app de produção a funções de serviço em vez de contas de usuário individuais.

Implementar acesso de menor privilégio:

  • Conceda apenas os privilégios mínimos necessários a cada função.

  • Revise e faça auditoria regularmente das associações e dos privilégios das funções.

  • Evite conceder ACCOUNTADMIN ou outras funções avançadas para funções de proprietário do app, a menos que seja extremamente necessário.

Gerenciar o ciclo de vida do app:

  • Estabeleça processos para aprovação e implantação de apps.

  • Exija revisões de código antes de promover apps para produção.

  • Documente quais apps acessam dados confidenciais e exigem controle adicional.

  • Revise e remova regularmente apps não utilizados ou obsoletos.

Monitorar o uso de recursos:

  • Defina tamanhos de warehouse apropriados às cargas de trabalho dos apps.

  • Monitore os custos de computação e configure alertas para padrões de uso incomuns.

  • Para tempos de execução de contêiner, defina os pools de computação com as configurações MIN_NODES e MAX_NODES apropriadas.

  • Use warehouses separados para ambientes de apps diferentes para isolar custos e recursos.

Para obter mais informações sobre gerenciamento de recursos, consulte Gerenciamento de custos para Streamlit in Snowflake e Ambientes de tempo de execução para apps Streamlit.

Adotar práticas para desenvolvimento seguro de apps:

  • Nunca incorpore credenciais ou chaves de API diretamente ao código do app.

  • Use os segredos do Snowflake para armazenar informações confidenciais.

  • Valide e higienize as entradas do usuário para evitar injeção de SQL.

  • Limite os dados expostos pelos apps apenas ao que os visualizadores precisam ver.

  • Teste os apps cuidadosamente antes de compartilhá-los com públicos mais amplos.

Para obter mais informações sobre considerações de segurança dos direitos do proprietário, consulte Direitos do proprietário e segurança do aplicativo.

Realizar auditorias de segurança regulares:

  • Revise quais funções têm os privilégios CREATE STREAMLIT.

  • Faça auditoria de quais apps acessam quais fontes de dados.

  • Revise as integrações de acesso externo e as regras de rede.

  • Verifique se há apps de propriedade de ex-funcionários ou contas inativas.

  • Revise o histórico de acesso e commit do repositório Git.

Use as seguintes consultas para fazer auditoria dos apps Streamlit:

-- List all Streamlit apps and their owners
SHOW STREAMLITS;

-- Check privileges on a specific app
SHOW GRANTS ON STREAMLIT streamlit_db.apps.my_app;

-- List all roles with CREATE STREAMLIT privileges
SHOW GRANTS OF CREATE STREAMLIT;
Copy