Gerenciamento de segredos e configuração do app Streamlit¶
Os apps Streamlit geralmente precisam acessar informações confidenciais, como chaves deAPI, senhas e outras credenciais. A forma como você gerencia segredos no app Streamlit depende do ambiente de tempo de execução que você usa. O Streamlit in Snowflake oferece mecanismos seguros e integrados para acessar segredos nos tempos de execução tanto de warehouse quanto de contêiner. Para configuração do Streamlit, cada tempo de execução também tem restrições diferentes.
Na biblioteca Streamlit, os apps usam um diretório .streamlit/ para armazenar configurações e segredos:
.streamlit/config.toml: personaliza as configurações do app, como tema, layout e comportamento do servidor..streamlit/secrets.toml: armazena informações confidenciais, como chaves de API e credenciais (em desenvolvimento local).
O Streamlit in Snowflake oferece suporte a esses arquivos com algumas limitações, dependendo do seu ambiente de tempo de execução. A tabela a seguir resume o suporte para esses arquivos nos tempos de execução de warehouse e contêiner:
Recurso |
Tempo de execução de warehouse |
Tempo de execução de contêiner |
|---|---|---|
Suporte para |
Subconjunto limitado de opções de configuração |
Subconjunto mais amplo de opções de configuração |
Suporte para |
Sem suporte |
Com suporte, mas recomendado somente para variáveis de ambiente não secretas |
Para secrets.toml, o Streamlit in Snowflake fornece um sistema de gerenciamento de segredos integrado mais seguro, recomendado para o gerenciamento de informações confidenciais. As seções a seguir descrevem como usar os segredos do Snowflake em seus apps.
Gerenciamento da conexão com o Snowflake¶
Para gerenciar sua conexão com o Snowflake, você pode usar st.connection("snowflake"). Isso permite que você se conecte ao Snowflake do seu ambiente de desenvolvimento local e do seu app implantado.
Nos tempos de execução de warehouse, você também pode usar a função get_active_session() do Snowpark para obter a sessão ativa.
Importante
get_active_session() não é thread-safe e não pode ser usado em tempos de execução de contêiner.
Segredos em tempos de execução de contêiner¶
Você pode usar st.secrets para acessar segredos do Snowflake em seus apps Streamlit in Snowflake no tempo de execução de contêiner. Dessa forma, você pode armazenar e recuperar com segurança informações confidenciais, como chaves de API, credenciais e outros valores de configuração. Assim como o Streamlit faz com o .streamlit/secrets.toml em desenvolvimento local, o Streamlit in Snowflake também preenche os segredos para variáveis de ambiente.
Nota
Os tempos de execução de contêiner não têm acesso ao módulo _snowflake. Se você estiver migrando um app de tempo de execução de warehouse mais antigo que usa funções secretas _snowflake, substitua essas chamadas por st.secrets conforme descrito nesta seção.
Acesso a um segredo em um tempo de execução de contêiner¶
Prepare o seguinte arquivo Python em``@my_stage/app_folder/streamlit_app.py``. Para obter informações sobre a preparação de arquivos, consulte Preparação de arquivos usando o Snowsight.
Crie um segredo em sua conta Snowflake:
Para obter mais informações, consulte CREATE SECRET.
Crie uma integração de acesso externo (External Access Integration, EAI) e atribua o segredo a ela:
Crie seu app Streamlit para fazer referência ao segredo usando o parâmetro SECRETS:
Nota
Você deve atribuir a EAI e o segredo ao objeto Streamlit. Não é possível atribuir apenas o segredo a um objeto Streamlit.
Como o segredo de cadeia de caracteres genérica
my_secretestá associado à cadeia de caracteres"my_secret_name"no parâmetro SECRETS, você pode acessar o segredo no código do app Streamlit usandost.secrets["my_secret_name"].
Tipos de segredo e variáveis de ambiente compatíveis¶
Os tempos de execução de contêiner são compatíveis com a cadeia de caracteres genérica e os segredos de autenticação básica. Além de mapear segredos para st.secrets, o Streamlit in Snowflake mapeia segredos para variáveis de ambiente. Os nomes das variáveis de ambiente diferenciam maiúsculas de minúsculas. Para segredos de autenticação básica, duas variáveis de ambiente são criadas: uma para o nome de usuário (sufixo _USERNAME) e outra para a senha (sufixo _PASSWORD).
Tipo de segredo |
Acesso para |
Acesso para variável de ambiente |
|---|---|---|
Cadeia de caracteres genérica |
|
|
Autenticação básica (nome de usuário) |
|
|
Autenticação básica (senha) |
|
|
Nota
Provedor de nuvem, chave simétrica e tipos de segredo OAuth não são compatíveis no momento.
Segredos de cadeia de caracteres genérica¶
Os segredos de cadeia de caracteres genérica são armazenados como chaves de nível superior em st.secrets:
Você pode acessar o segredo usando a notação de dicionário ou de atributo:
Segredos de autenticação básica¶
Os segredos de autenticação básica são armazenados como objetos semelhantes a dict com os atributos "username" e "password":
Você pode acessar o segredo usando a notação de dicionário ou de atributo:
Segredos para repositórios de pacotes autenticados¶
Os segredos são automaticamente expostos como variáveis de ambiente. Em particular, isso permite a autenticação com repositórios de pacotes privados, como JFrog Artifactory.
Para a maioria dos repositórios de pacotes autenticados, use um segredo de autenticação básica. O segredo é convertido automaticamente em variáveis de ambiente com sufixos _USERNAME e _PASSWORD. Se você precisar de uma convenção de nomenclatura diferente, use segredos de cadeia de caracteres genérica e defina o nome de cada variável de ambiente manualmente. Para obter mais informações sobre as variáveis de ambiente que o uv usa, consulte Índices de pacotes (em inglês) na documentação do uv.
Exemplo: Autenticar em um repositório privado JFrog Artifactory¶
Prepare os arquivos de origem do seu app em
@my_stage/app_folder. Os arquivos de origem do seu app devem incluir um arquivopyproject.tomlque configura o índice de pacotes privados na tabela[[tool.uv.index]]:Para obter mais informações sobre como declarar as dependências do seu app em um arquivo
pyproject.toml, consulte Gerenciamento de dependências para o app Streamlit.Crie um segredo de autenticação básica com as credenciais do JFrog:
Crie uma integração de acesso externo para seu repositório privado:
Nota
Para evitar um erro de DNS, talvez seja necessário incluir o provedor de nuvem do seu repositório na lista de valores da regra de rede. Por exemplo, se o repositório está na AWS, você pode precisar da seguinte lista de valores em sua regra de rede:
Anexe a EAI e o segredo ao seu app Streamlit:
Como o segredo de autenticação básica
jfrog_credsestá associado à cadeia de caracteres"UV_INDEX_MY_JFROG_REPO"no parâmetro SECRETS, o tempo de execução injeta automaticamente as variáveis de ambienteUV_INDEX_MY_JFROG_REPO_USERNAMEeUV_INDEX_MY_JFROG_REPO_PASSWORDconforme exigido pelo uv.
Precedência de um arquivo .streamlit/secrets.toml local¶
Você pode combinar segredos gerenciados pelo Snowflake com uma arquivo .streamlit/secrets.toml local no diretório de origem do seu app. Quando ambos estão presentes, a biblioteca Streamlit os mescla. O arquivo .streamlit/secrets.toml definido localmente tem precedência sobre os segredos gerenciados pelo Snowflake.
Como o .streamlit/secrets.toml é armazenado como texto simples em seus arquivos preparados, não é uma prática recomendada de segurança armazenar segredos reais nele. Use o gerenciamento de segredos interno do Snowflake para credenciais confidenciais. Use o arquivo .streamlit/secrets.toml definido localmente para armazenar valores de configuração não confidenciais ou configurações específicas do ambiente.
Remover ou alterar os segredos do seu app Streamlit¶
Para remover todos os segredos de um app Streamlit in Snowflake, use a cláusula UNSET SECRETS com ALTER STREAMLIT:
Isso remove todas as associações de segredo do app Streamlit in Snowflake. Os objetos de segredo subjacentes permanecem em sua conta Snowflake e podem ser reatribuídos no futuro. Para remover também qualquer associação de EAI, remova a definição da propriedade EXTERNAL_ACCESS_INTEGRATIONS.
Para atualizar ou modificar os segredos que são anexados, use ALTER STREAMLIT com SET SECRETS:
Exemplo: Criar um app Streamlit de tempo de execução de contêiner com uma API externa autenticada¶
Este exemplo demonstra a criação de um app Streamlit in Snowflake que chama uma API externa usando uma chave de API de segredo.
Prepare o seguinte arquivo Python em
@my_stage/weather_app/streamlit_app.py:Como
requestsé uma dependência dostreamlit, ele é incluído na imagem base do tempo de execução. Portanto, o tempo de execução o instala automaticamente, mesmo que você não inclua um arquivo de dependências ou configure um índice de pacotes.Crie o segredo, a regra de rede e a EAI:
Crie o objeto Streamlit:
Chamada de um Cortex Agent em tempo de execução de contêiner¶
Para chamar um Cortex Agent em um app de tempo de execução de contêiner, leia o token de sessão do contêiner Snowpark Container Services subjacente e use a biblioteca requests. Esse é o procedimento substituto recomendado para _snowflake.send_snow_api_request().
Segredos em tempos de execução de warehouse¶
Em tempos de execução de warehouse, você pode usar o módulo _snowflake para acessar segredos diretamente no código do app Streamlit. Os tempos de execução de warehouse herdam o acesso ao módulo _snowflake dos procedimentos armazenados, o que permite recuperar segredos referenciados no objeto Streamlit.
Para usar segredos em um tempo de execução de warehouse:
Crie um objeto de segredo no Snowflake. Para obter mais informações, consulte CREATE SECRET.
Crie uma integração de acesso externo e atribua o segredo a ela.
Faça referência ao segredo em seu objeto Streamlit usando o parâmetro SECRETS:
Você deve atribuir a integração de acesso externo e o segredo ao objeto Streamlit. Não é possível atribuir apenas o segredo a um objeto Streamlit.
No código do app Streamlit, importe o módulo
_snowflakee recupere o segredo:
Para obter mais informações sobre como acessar segredos com o módulo _snowflake, consulte API de Python para acesso secreto.
Configuração do Streamlit¶
Os apps Streamlit podem incluir um arquivo de configuração (.streamlit/config.toml). Esse arquivo permite que você personalize vários aspectos do seu app, como tema, layout e comportamento. O arquivo de configuração é escrito no formato TOML. Para obter mais informações sobre as opções de configuração disponíveis, consulte a documentação do Streamlit em config.toml.
O suporte para opções de configuração varia de acordo com o ambiente de tempo de execução. Os tempos de execução de contêiner geralmente oferecem suporte mais amplo para opções de configuração do que os tempos de execução de warehouse, em especial para serviços estáticos. A tabela a seguir mostra quais seções de configuração são compatíveis com os tempos de execução de warehouse e de contêiner:
Seção de configuração |
Tempo de execução de warehouse |
Tempo de execução de contêiner |
|---|---|---|
|
Sem suporte |
Suporte limitado ( |
|
Sem suporte |
Sem suporte |
|
Sem suporte |
Suporte limitado ( |
|
Sem suporte |
Com suporte |
|
Sem suporte |
Sem suporte |
|
Sem suporte |
Sem suporte |
|
Sem suporte |
Com suporte (obsoleto, use variáveis de ambiente em vez disso) |
|
Com suporte |
Com suporte |
|
Com suporte |
Com suporte |
|
Sem suporte |
Com suporte (mas recomendado apenas para variáveis de ambiente não secretas) |
|
Com suporte |
Não aplicável |
Para obter informações sobre como usar a seção [snowflake.sleep] para configurar temporizadores de suspensão em tempos de execução de warehouse, consulte Temporizador de sono personalizado para um aplicativo Streamlit.
A estrutura de diretório a seguir mostra um exemplo de um app Streamlit com um arquivo de configuração: