在 Notebooks in Workspaces 中使用密钥¶
工作区笔记本中的密钥支持¶
在 Workspaces 中运行的 Snowflake 笔记本可以结合使用 密钥对象 和外部访问集成 (EAIs),从而确保凭据不会以字面量形式出现在笔记本代码中。您可以通过 SQL(例如在工作表中)配置密钥和 EAIs;然后将它们附加到 Notebook 服务、排程器或 EXECUTE NOTEBOOK PROJECT 调用中。
先决条件:设置密钥和外部访问¶
在 Snowflake 笔记本中使用密钥之前,请先配置底层安全对象和网络规则。这些步骤在笔记本外部执行(例如,在 Snowflake 工作表中)。
文档链接¶
有关详细的配置选项和安全工作流程,请参阅:
CREATE SECRET (密钥类型、语法和示例)
外部网络访问概述 (外部访问集成及网络规则)
SYSTEM$START_OAUTH_FLOW 和 SYSTEM$FINISH_OAUTH_FLOW (手动 OAuth 授权流程)
外部网络访问示例 (使用 EAIs 的 OAuth 示例)
为 Snowflake Notebooks 设置外部访问 (针对外部 APIs 的笔记本模式,包括 GitHub)
基本密钥设置¶
要使用现有密钥,请运行 SHOW SECRETS (例如,SHOW SECRETS IN ACCOUNT;)。要创建新密钥,请使用 CREATE SECRET。
备注
将示例中的 SNOWPUBLIC 和 NOTEBOOKS 替换为您的数据库和模式。
其他常见的密钥类型包括:
PASSWORD,这需要同时提供USERNAME和PASSWORD。OAUTH2,用于与外部提供商(例如,GitHub)进行集成。
外部访问集成 (EAI)¶
高级身份验证 (OAuth)¶
对于基于 OAuth 的提供商,创建 安全集成,并使用 SYSTEM$START_OAUTH_FLOW 完成手动 OAuth 流程(且在同一会话中执行 SYSTEM$FINISH_OAUTH_FLOW)。该流程允许 Snowflake 与外部提供商交换令牌。有关端到端示例,请参阅 外部网络访问示例 和 为 Snowflake Notebooks 设置外部访问。
具有密钥的笔记本服务集成¶
您可以在笔记本 创建、编辑 和 排程器 对话框中选择密钥。
在导航菜单中,选择 Projects » Workspaces。
打开 Notebooks,然后开始 :ui:`Create service`(或编辑现有服务)。
在 Service settings 中,附加外部访问集成,并从下拉列表中选择一个或多个密钥。您可以附加多个密钥。
确认服务成功启动,然后使用 Python 单元格,通过 Snowpark 密钥 API 或下方示例中所示的挂载路径来读取密钥。
备注
如果完全限定的密钥名称包含特殊字符(例如 SNOWPUBLIC.NOTEBOOKS."my secret 1"),Snowflake 会对 Python 和容器中使用的路径进行规范化处理。密钥 名称 段中的连字符、空格和类似字符将变为下划线。数据库和模式段不区分大小写。
示例:SNOWPUBLIC.NOTEBOOKS."my secret 1" 在 Python 辅助函数中显示的路径为 :code:`snowpublic/notebooks/my_secret_1`(请根据密钥的存储位置调整数据库和模式)。
密钥文件在 Snowflake 提供的容器内挂载于 /secrets/ 下。例如,通用字符串密钥可能出现在:
/secrets/snowpublic/notebooks/my_secret_1/secret_string
请将 snowpublic 和 notebooks 替换为您存储密钥的数据库和模式。数据库、模式和密钥名称匹配不区分大小写。
Snowpark 库为每种密钥类型提供了不同的辅助函数,如下所示。
从 Python 单元格中调用 GENERIC_STRING 密钥¶
从 Python 单元格中调用 PASSWORD 密钥¶
从 Python 单元格中调用 OAUTH2 密钥¶
请将 _/_/github_secret 替换为您 OAuth2 密钥的规范化路径(数据库/模式/名称),遵循与上文相同的规则。
使用密钥调度笔记本¶
当您在 Snowsight 中调度笔记本时,请在调度对话框中添加调度任务所需的 EAIs 和密钥,以便“无头运行”模式能够继承与交互式开发相同的外部访问权限和凭据。
使用 EXECUTE NOTEBOOK PROJECT 和密钥进行非交互式运行¶
当笔记本依赖 EAIs 和密钥时,无头运行必须列出这两者。通过 EXTERNAL_ACCESS_INTEGRATIONS 传递集成,并通过 SECRETS 传递密钥。有关完整语法,请参阅 EXECUTE NOTEBOOK PROJECT。
请将占位符替换为笔记本所需的集成和完全限定的密钥。