为 Snowflake Notebooks 设置外部访问¶
默认情况下,Snowflake 限制来自外部端点的网络流量请求。要访问外部端点,您需要创建 外部网络访问集成。本主题介绍如何为笔记本设置外部网络访问。
外部访问集成及其基础网络规则必须由组织管理员创建。
创建外部访问集成 (EAI)¶
要为笔记本创建外部访问集成,请执行以下操作:
使用 CREATE NETWORK RULE 命令创建网络规则,定义一组 IP 地址或域。
使用 CREATE EXTERNAL ACCESS INTEGRATION 命令创建外部访问集成,指定允许的网络规则列表。
备注
只有 ACCOUNTADMIN 或具有创建 EAIs 权限的角色才能为特定外部端点设置外部访问集成。有关所需权限的信息,请参阅 访问控制要求。
以下示例展示了如何为常见的数据科学和机器学习网站设置外部访问。
为 PyPI 设置外部访问:
CREATE OR REPLACE NETWORK RULE pypi_network_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('pypi.org', 'pypi.python.org', 'pythonhosted.org', 'files.pythonhosted.org');
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION pypi_access_integration
ALLOWED_NETWORK_RULES = (pypi_network_rule)
ENABLED = true;
为 HuggingFace 设置外部访问:
CREATE OR REPLACE NETWORK RULE hf_network_rule
MODE = EGRESS
TYPE = HOST_PORT
VALUE_LIST = ('huggingface.co', 'cdn-lfs.huggingface.co');
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION hf_access_integration
ALLOWED_NETWORK_RULES = (hf_network_rule)
ENABLED = true;
通过一个外部访问集成,允许所有网络访问:
CREATE OR REPLACE NETWORK RULE allow_all_rule
MODE= 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ('0.0.0.0:443','0.0.0.0:80');
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION allow_all_integration
ALLOWED_NETWORK_RULES = (allow_all_rule)
ENABLED = true;
授予创建外部访问集成所需的权限¶
创建 EAIs 后,必须向账户角色授予集成的 USAGE 权限。
用于创建 EAI 的角色将成为所有者。作为所有者,该角色必须向其他角色授予 USAGE 权限。要对集成授予 USAGE 权限,请使用以下命令:
GRANT USAGE ON INTEGRATION pypi_access_integration TO ROLE my_notebook_role;
GRANT USAGE ON INTEGRATION hf_access_integration TO ROLE my_notebook_role;
GRANT USAGE ON INTEGRATION allow_all_integration TO ROLE my_notebook_role;
备注
向创建笔记本的角色授予集成的 USAGE 权限非常重要。授予 PUBLIC 角色的 USAGE 权限将不起作用。有关详细语法,请参阅 外部网络访问。
启用外部访问集成 (EAI)¶
创建和配置 EAIs 后,确保重新启动笔记本会话,以便在外部访问窗格中看到创建的访问集成。
登录 Snowsight。
选择 Projects » Notebooks。
选择 Notebook settings,然后选择 External access 窗格。
在可用的外部访问集成列表中,选择每个集成旁边的切换按钮,以启用或禁用它们。
要启用新的集成,请参阅 启用外部访问集成 (EAI)。
在外部访问集成中使用密钥¶
在大多数情况下,APIs 需要 API 密钥。要允许外部访问,可使用 SQL 将密钥(例如 API 密钥)与笔记本关联。要手动将密钥与笔记本关联,请使用 ALTER NOTEBOOK ...SET SECRETS 命令:
ALTER NOTEBOOK <name>
SET SECRETS = ('<secret_variable_name>' = <secret_name>);
要在将密钥与笔记本关联后检索该密钥,请参阅 用于密钥访问的 Python API。