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.

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 Limitações ao carregar recursos externos no Streamlit in Snowflake.

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.

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

Para obter mais informações, consulte You can’t load the Streamlit app.

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

Se os 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 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.

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.

  • 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

Para tempos de execução de warehouse, habilite o registro em log e o rastreamento para monitorar o comportamento do app e solucionar problemas:

  1. Crie e associe uma tabela de eventos à sua conta.

  2. Defina os níveis de log e rastreamento apropriados para bancos de dados que contém apps Streamlit.

  3. Revise os logs regularmente em busca de eventos de segurança, erros e comportamentos incomuns.

O registro em log e o rastreamento ainda não são compatíveis com tempos de execução de contêiner.

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

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