设置 Snowflake 以使用 Git

当您将 Snowflake 账户连接到远程 Git 存储库时,Snowflake 会创建 Git 存储库克隆,复制存储库中所有文件的最新版本(浅层克隆),并存储有关远程存储库位置的元数据、证书(如果需要)以及有关 Snowflake 应如何与 Git 存储库 API 交互的配置详细信息。

根据您的要求,通过配置组件(用于身份验证、与 Git API 的交互以及 Snowflake 与云服务提供商之间通过专用链接进行的通信),您可以设置 Snowflake,使远程 Git 存储库成为 Snowflake 工作流程不可分割的一部分。

选择配置模型

根据您的网络和工作流程要求,您可以配置 Snowflake,以多种方式访问远程 Git 存储库。以下列出了示例用例,以及您可能用来支持这些用例的存储库访问策略。

  • 通过包括提取、推送和创建文件在内的工作流程处理 Git 存储库中的文件。

    考虑使用 Snowflake 工作区。如果您在 github.com 上使用存储库,则可以 使用 OAuth 进行身份验证

  • 作为数据管道或 ML 项目的一部分引用 Git 存储库中的文件。

    如果脚本化进程将访问存储库,请考虑 使用令牌进行身份验证

  • 首先,克隆公共存储库(包括 Snowflake Labs)来运行脚本或笔记本文件。

    您可以使用工作区处理 .sql 文件,使用 Snowflake 笔记本 处理 .ipynb 文件,或使用 Snowflake 工作区 处理 .py 文件。

以下内容描述了您通过公共网络或专用网络进行访问时的选项:

通过公共网络访问

通过专用网络访问

通过公共网络访问 允许您使用 Snowflake 云提供商部署的整个 IP 范围向远程 Git 存储库服务器进行身份验证(因为 Snowflake 不提供静态 。IP 范围)

  1. 配置 Snowflake 以访问存储库。

    选择以下某种身份验证方法:

    • 不进行身份验证

      使用与 Git 存储库服务器有关的详细信息配置 API 集成。您未提供凭据。

    • 使用令牌进行身份验证,例如个人访问令牌。

      配置包含要使用的用户名和令牌的密钥,然后配置 API 集成,允许 Snowflake 在进行身份验证时使用该密钥。

    • 通过 OAuth 流程进行身份验证

      配置 API 集成以支持 OAuth2 身份验证。在这种情况下,您无需创建密钥。

  2. 创建 Git 存储库克隆,以将远程存储库中的文件同步到该克隆。

通过专用网络进行访问 可以避免允许在 Snowflake 云提供商部署的整个 IP 范围内访问 Git 服务器。

您可以将 Snowflake 配置为通过 Snowflake 和您的云基础架构之间的出站专用链接连接建立出站连接。Snowflake 通过此连接将 Git 流量路由到 Git 存储库服务器。

  1. 配置专用链接连接

    在配置 Snowflake 以访问远程 Git 存储库之前,您需要在 Snowflake 和云服务提供商之间设置专用链接。

  2. 配置 Snowflake 对远程 Git 存储库的访问权限

    在 Snowflake 和云服务提供商之间设置专用链接后,您可以配置 Snowflake 对远程 Git 存储库的访问权限。

  3. 创建 Git 存储库克隆,以将远程存储库中的文件同步到该克隆。

配置 Snowflake 以通过公共网络进行访问

您可以设置 Snowflake 以通过公共网络访问 Git 存储库。您可以使用以下任一策略让 Snowflake 进行身份验证:

  • 不进行身份验证

    使用与 Git 存储库服务器有关的详细信息配置 API 集成。

  • 使用令牌进行身份验证,例如个人访问令牌。

    配置包含要使用的用户名和令牌的密钥,然后配置 API 集成,允许 Snowflake 在进行身份验证时使用该密钥。

  • 通过 OAuth 流程进行身份验证

    将 API 集成配置为允许以下任何一种身份验证:OAuth2、个人访问令牌或不进行身份验证。

    备注

    仅当存储库托管在 github.com 上时,才能在工作区中将 OAuth 用于 Git 存储库。有关更多信息,请参阅 创建 Git 工作区

配置为不进行身份验证

该图显示了配置无需身份验证的 Git 连接所需的组件

要设置 Snowflake 以在不进行身份验证的情况下使用 Git 存储库,请按照以下步骤操作:

  1. 创建支持无需身份验证即可访问的 API 集成,并指定以下详细信息:

    • git_https_api 指定为 API_PROVIDER 参数的值

    • 将请求必须限制到的 HTTPS 端点指定为 API_ALLOWED_PREFIXES 参数的值

    有关更多信息,请参阅 CREATE API INTEGRATION

    CREATE OR REPLACE API INTEGRATION my_git_api_integration
      API_PROVIDER = git_https_api
      API_ALLOWED_PREFIXES = ('https://example.com/my-account')
      ENABLED = TRUE;
    
    Copy
  2. 按照 创建 Snowflake Git 存储库克隆 中所述创建 Git 存储库克隆。

配置为使用令牌进行身份验证

该图显示了配置无需身份验证的 Git 连接所需的组件

要让 Snowflake 使用用户名和个人访问令牌 (PAT) 等令牌向 Git 存储库进行身份验证,请按照以下步骤操作:

  1. 基本身份验证密钥 中提供凭据。

    要提供 Snowflake 用于向存储库进行身份验证的凭据,请创建包含以下内容的密钥:

    • TYPE 值为 password

    • 用户名和令牌,例如个人访问令牌 (PAT)

      如果您的 Git 存储库托管在 Bitbucket 上,请指定 x-token-auth 作为用户名值。

      备注

      有关在 GitHub 中创建个人访问令牌的信息,请参阅 ` 文档中的 <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens (https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)>管理个人访问令牌 `_GitHub。

    有关创建密钥所用的 SQL 命令的更多信息,请参阅 CREATE SECRET

    以下示例中的代码使用用户名和用户的个人访问令牌创建了名为 my_git_secret 的密钥,用作凭据:

    CREATE OR REPLACE SECRET my_git_secret
      TYPE = password
      USERNAME = 'gladyskravitz'
      PASSWORD = 'ghp_token';
    
    Copy
  2. 创建支持使用令牌进行身份验证的 API 集成。

    要创建 API 集成,以在不进行身份验证的情况下访问 Git 存储库,请指定以下详细信息:

    • git_https_api 指定为 API_PROVIDER 参数的值

    • 将请求必须限制到的 HTTPS 端点指定为 API_ALLOWED_PREFIXES 参数的值

    有关更多信息,请参阅 CREATE API INTEGRATION

    CREATE OR REPLACE API INTEGRATION my_git_api_integration
      API_PROVIDER = git_https_api
      API_ALLOWED_PREFIXES = ('https://github.com/my-account')
      ALLOWED_AUTHENTICATION_SECRETS = (my_git_secret)
      ENABLED = TRUE;
    
    Copy
  3. 按照 创建 Snowflake Git 存储库克隆 中所述创建 Git 存储库克隆。

配置为使用 OAuth 进行身份验证

备注

仅当存储库托管在 github.com 上时,才能在工作区中将 OAuth 用于 Git 存储库。有关更多信息,请参阅 创建 Git 工作区

该图显示了配置无需身份验证的 Git 连接所需的组件

要设置 Snowflake 以使其使用 OAuth 流程对远程 Git 存储库进行身份验证,请按照以下步骤操作:

  1. 创建支持通过 OAuth 进行身份验证的 API 集成。

    使用 OAuth2 流程指定身份验证方式时,请创建一个指定以下内容的 API 集成:

    • git_https_api 指定为 API_PROVIDER 参数的值

    • 将请求必须限制到的 HTTPS 端点指定为 API_ALLOWED_PREFIXES 参数的值

      这必须是在 https://github.com 的前缀。仅在 github.com 托管的存储库支持使用 OAuth 进行身份验证。

    • API_USER_AUTHENTICATION,其值为 (TYPE = SNOWFLAKE_GITHUB_APP)

    有关更多信息,请参阅 CREATE API INTEGRATION

    以下示例中的代码会创建名为 API 的 my_git_api_integration 集成:

    CREATE OR REPLACE API INTEGRATION my_git_api_integration
      API_PROVIDER = git_https_api
      API_ALLOWED_PREFIXES = ('https://github.com')
      API_USER_AUTHENTICATION = (TYPE = SNOWFLAKE_GITHUB_APP)
      ENABLED = TRUE;
    
    Copy
  2. 创建 Git 工作区 中所述,创建连接到 Git 存储库的工作区。

配置 Snowflake 以通过专用网络进行访问

您可以将 Snowflake 配置为通过 Snowflake 和您的云基础架构之间的出站专用链接连接建立出站连接。Snowflake 通过此连接将 Git 流量路由到 Git 存储库服务器。

使用专用链接连接,可以避免允许在 Snowflake 云提供商部署的整个 IP 范围内访问 Git 服务器。本节概述了这些步骤。

  1. 配置专用链接连接

    您将对 Snowflake 和云服务基础架构应用配置更改。本主题介绍了 Snowflake 端的步骤。有关所有步骤的详细信息,包括有关配置云服务提供商的详细信息,请参阅知识库文章 通过专用链接配置 Git 与 Snowflake 的集成 (https://community.snowflake.com/s/article/Configuring-Git-Integration-with-Snowflake-over-Private-Link)。

  2. 配置 Snowflake 对远程 Git 存储库的访问权限

备注

Snowflake 仅支持相同云和区域内的连接。例如,如果您的 Snowflake 部署位于 us-west-2 区域中的 AWS 上,则您的其他组件也必须位于该区域。

配置 Snowflake 对远程 Git 存储库的访问权限

在 Snowflake 和云服务提供商之间设置专用链接后,您可以配置 Snowflake 对远程 Git 存储库的访问权限。

  1. 创建支持使用证书进行身份验证的 API 集成。

    由于 Snowflake 将使用 HTTPS 协议访问您的 Git 服务器,因此域名需要具有有效的证书。根据您使用的是自签名证书还是由证书颁发机构签名的证书,您使用的配置会有所不同。

    • 使用自签名证书:

      该图显示了配置无需身份验证的 Git 连接所需的组件
      1. 通用字符串密钥 中提供凭据。

        这应该是用于建立 HTTPS 连接的自签名域名的公钥。要向 Snowflake 提供用于向服务器进行身份验证的凭据,请创建包含以下详细信息的密钥:

        • GENERIC_STRING 的 TYPE 参数值

        • 作为 SECRET_STRING 参数值的公共证书字符串

          对于参数的值,请指定密钥字符串,例如公共证书正文。

        CREATE OR REPLACE SECRET my_public_certificate
          TYPE = GENERIC_STRING
          SECRET_STRING = '-----BEGIN CERTIFICATE-----
                    <certificate_body>
                    -----END CERTIFICATE-----';
        
        Copy
      2. 创建用于与 Git API 集成的 API 集成,并指定以下详细信息:

        • API_PROVIDER 参数设置为 git_https_api

        • API_ALLOWED_PREFIXES 设置为允许访问的基础 URL

        • USE_PRIVATELINK_ENDPOINT 参数设置为 TRUE

        • TLS_TRUSTED_CERTIFICATES 参数设置为您创建的密钥的名称,其中包含证书

        有关更多信息,请参阅 CREATE API INTEGRATION

        CREATE OR REPLACE API INTEGRATION my_git_api_integration
          API_PROVIDER = git_https_api
          API_ALLOWED_PREFIXES = ('https://example.com/my-account')
          ALLOWED_AUTHENTICATION_SECRETS = ALL
          USE_PRIVATELINK_ENDPOINT = TRUE
          TLS_TRUSTED_CERTIFICATES = (my_public_certificate)
          ENABLED = TRUE;
        
        Copy
    • 使用由证书颁发机构签名的证书:

      该图显示了配置无需身份验证的 Git 连接所需的组件
      1. 创建用于与 Git API 集成的 API 集成,并指定以下详细信息:

        • API_PROVIDER 参数设置为 git_https_api

        • API_ALLOWED_PREFIXES 设置为允许访问的基础 URL

        • USE_PRIVATELINK_ENDPOINT 参数设置为 TRUE

        • TLS_TRUSTED_CERTIFICATES 参数设置为您创建的密钥的名称,其中包含证书

        有关更多信息,请参阅 CREATE API INTEGRATION

        CREATE OR REPLACE API INTEGRATION my_git_api_integration
          API_PROVIDER = git_https_api
          API_ALLOWED_PREFIXES = ('https://example.com/my-account')
          ALLOWED_AUTHENTICATION_SECRETS = ALL
          USE_PRIVATELINK_ENDPOINT = TRUE
          ENABLED = TRUE;
        
        Copy
  2. 基本身份验证密钥 中提供凭据。

    通过专用链接成功连接到 Git 服务器后,您仍必须通过创建另一个为存储库提供凭据的密钥来对存储库进行身份验证。

    要提供 Snowflake 用于向存储库进行身份验证的凭据,请创建包含以下内容的密钥:

    • TYPE 值为 password

    • 用户名和令牌,例如个人访问令牌 (PAT)

      备注

      有关在 GitHub 中创建个人访问令牌的信息,请参阅 ` 文档中的 <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens (https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)>管理个人访问令牌 `_GitHub。

    有关创建密钥所用的 SQL 命令的更多信息,请参阅 CREATE SECRET

  3. 按照 创建 Snowflake Git 存储库克隆 中所述创建 Git 存储库克隆。

创建 Snowflake Git 存储库克隆

要将 Snowflake 设置为使用远程 Git 存储库,请在 Snowflake 中创建 Git 存储库克隆,以包含从远程存储库提取的文件。

备注

在开始本节中的步骤之前,请考虑 首先 配置可能需要的组件,包括密钥(如果远程存储库需要身份验证)、API 集成以及 Snowflake 与云服务提供商之间的专用链接连接。

备注

有关在 Snowsight 中创建 Git 工作区的信息,请参阅 创建 Git 工作区

Snowflake 中的 Git 存储库克隆会指定以下详细信息:

  • 远程存储库的来源

    在 Git 中,origin 是远程存储库的 URL。设置 Snowflake 以使用远程 Git 存储库时使用此 URL。URL 必须使用 HTTPS。例如,您可以通过以下方式检索来源 URL:

    • 在 GitHub 用户界面中,您可以从存储库主页获取来源 URL。选择 Code 按钮,然后从按钮下方显示的框中复制 HTTPS URL。

    • 在命令行中,使用本地存储库中的 git config 命令,如以下示例所示:

      $ git config --get remote.origin.url
      
      Copy

      该命令生成的输出如以下内容所示:

      https://github.com/my-account/snowflake-extensions.git
      

      有关 git config 的参考信息,请参阅 Git 文档 (https://git-scm.com/docs/git-config)。

  • 凭据(如果需要),以供 Snowflake 在对存储库进行身份验证时使用

    对于 GIT_CREDENTIALS 参数,请指定您创建的 Snowflake 密钥

  • API 集成,用于指定 Snowflake 与存储库 API 交互的详细信息

您可以使用 Snowsight 或 SQL 创建 Git 存储库克隆。

备注

在创建 Git 存储库克隆之前,您需要创建 密钥

以下示例中的代码创建了一个名为 snowflake_extensions 的 Git 存储库克隆。该克隆指定 my_git_api_integration API 集成和带有身份验证凭据的 my_git_secret 密钥。

USE ROLE ACCOUNTADMIN;
GRANT CREATE GIT REPOSITORY ON SCHEMA myco_db.integrations TO ROLE myco_git_admin;

USE ROLE myco_git_admin;

CREATE OR REPLACE GIT REPOSITORY snowflake_extensions
  API_INTEGRATION = my_git_api_integration
  GIT_CREDENTIALS = my_git_secret
  ORIGIN = 'https://github.com/my-account/snowflake-extensions.git';
Copy
语言: 中文