Guidelines and requirements for listing Apps on Snowflake Marketplace

概述

These guidelines define the enforced standards for publishing applications—both Snowflake Native Apps and Connected Apps—on Snowflake Marketplace.

原生应用程序

Publish on Snowflake Marketplace

When your application package is ready to be published on the Snowflake Marketplace, you must submit it to Snowflake for review and approval.

Note

The approval process required to publish an app on the Snowflake Marketplace is in addition to the automated security scan that is run when the DISTRIBUTION property of an application package is set to EXTERNAL. See Snowflake Native App listing approval flow for details.

在创建列表之前,请确认您了解强制执行的要求,并确保您的应用程序包符合每项要求。如果应用程序包不符合这些要求,您的提交可能会遭到拒绝。

如果您收到针对所提交应用程序包的拒绝通知,请执行建议的更改,然后重新提交应用程序包以供审批。

Standards for Snowflake Native Apps on Snowflake Marketplace

The Snowflake Native App functional review process ensures the quality of apps published on Snowflake Marketplace. To provide clarity into what is evaluated during this process, the following standards apply to all Snowflake Native Apps distributed through Snowflake Marketplace.

立即可供使用

应用程序功能必须在使用者账户中提供,并且应用程序在安装后必须可以正常运行。

独立

应用程序必须在 Snowflake 上提供产品体验,并通过 Snowflake 功能满足外部需求。

以数据为中心

应用程序应该基于以数据为中心的用例,此类用例应利用存储在 Snowflake 中的数据。

透明、简单且安全

应用程序必须使用 Snowflake 功能来披露应用程序的资源和访问要求,并简化使用者的配置流程。

强制执行的标准

Snowflake uses the following requirements to determine if a Snowflake Native App meets the standards for publication on Snowflake Marketplace. These requirements are verified when you submit a listing with an attached application package to Snowflake Marketplace.

  1. 立即可供使用

    1. 应用程序不得是宣传功能的外壳应用程序。应用程序必须提供宣传的功能。
    2. 应用程序必须包含使用应用程序功能的清晰框架和说明。
    3. 应用程序不应崩溃、冻结或存在其他功能异常。
    4. 应用程序必须列出所有必需的凭据,提供商在提交应用程序以供测试时必须与 Snowflake 共享所需凭据。
    5. 如果应用程序无法立即使用,则必须为使用者记录预期的工作流程,以便使用者能够完整安装并配置该应用程序。
  2. 独立

    1. Apps must not be pass-through. For example, they must not redirect consumers to an external service to enable the app’s core functionality.
    2. 安装后,必须可直接从 Snowflake 访问应用程序界面。
    3. Apps cannot use the Snowflake Marketplace as a distribution platform for cross-selling external applications or services.
    4. 访问外部服务并利用用户身份验证的应用程序应符合以下标准:
      1. 应用程序可能会要求使用者在其 Snowflake 账户中创建服务用户,仅用于访问外部服务。

        1. 可接受的身份验证方法有:编程访问令牌 (PAT)、OAuth 或密钥对。必须仅向服务用户授予应用程序运行所需的最低权限。
      2. 需要用户身份验证的应用程序永远不应要求使用者执行以下身份验证操作:

        1. 输入使用者的 Snowflake 用户名和密码。
        2. 创建私钥/公钥并共享私钥。
  3. 以数据为中心

    1. 应用程序必须通过以下方式之一来利用 Snowflake 数据:
      1. 共享来自应用程序提供商账户的数据。
      2. Use datasets from the Snowflake Marketplace.
      3. 访问消费者账户中的数据。
  4. 透明且简单

    1. 应用程序包的清单文件中必须列出应用程序所需的全部账户级别权限和引用。

    2. All resource requirements for the Snowflake Native App must be listed in the marketplace.yml file of the app. The app must create these resources as part of installation and setup.

    3. All account-level privileges and references listed in the application package manifest file must be requested from the consumer through Snowsight or the Python Permission SDK.

    4. 应用程序必须提供自述文件。不包含 Streamlit 或自定义用户界面的应用程序必须在自述文件中包含以下信息:

      1. 对应用程序功能的描述。
      2. 安装应用程序后,使用者为配置应用程序而必须执行的步骤。
      3. 应用程序使用的存储过程和用户定义的函数。
      4. 应用程序所需的权限。
      5. 向使用者展示如何使用应用程序的示例 SQL 命令。
    5. 所有必需的 SQL 命令都必须使用 Snowflake 传送并格式化为代码块。

    6. 如果应用程序提供示例数据,则必须包括有关如何使用示例数据的过程。

    7. If an application package contains a Streamlit app but does not contain a readme file, you must configure a default Streamlit app.

    8. Apps that use Snowflake Cortex must comply with the following standards:

      1. Apps that call Cortex functions with a specific model (rather than ‘auto’ or a Snowflake-managed model) must document the model name(s) in the listing, application or readme, enabling consumers to evaluate availability in their region. See Cross-region inference.
      2. Apps must declare SNOWFLAKE.CORTEX_USER as a required privilege in the application package manifest.yml, rather than requesting broad IMPORTED PRIVILEGES on the SNOWFLAKE database. See Manifest file privileges and Calling Cortex functions from an app.

Best practices when publishing a Snowflake Native App

In addition to the requirements for submitting an application package to Snowflake Marketplace, Snowflake also recommends the following best practices when publishing a Snowflake Native App:

  • 确保将所有必要的文件上传到您提交的应用程序版本的指定暂存区,包括:

    • 清单文件。
    • 安装脚本。
    • README 文件。
    • 应用程序包需要的任何外部存储过程或用户定义的函数。
    • 应用程序包需要的任何 Streamlit 文件。
    • 任意外部源代码,包括 Python、Java 等。
  • Ensure that the version of the app you are developing passes the automated security scan.

  • Test the new version of your application package by creating the application object locally by using the CREATE APPLICATION command.

    • Do not add a new version to your application package or set the DISTRIBUTION property to EXTERNAL while you are developing and testing an app. These actions trigger the automated security scan. Instead, create the application object using files on a named stage.
    • If your app includes a Streamlit app, test the application in Snowsight to ensure the Streamlit app works as expected.
    • 确认 Streamlit 应用程序与 Snowflake Worksheets 之间的交互是无缝的,并且使用者不必过度地在两者之间切换。
  • 在提交列表以进行审批之前,请先审查列表的所有部分。

  • 确保列表、readme 文件和 Streamlit 应用程序中没有拼写错误或其他文本错误。

针对试用列表的建议

  • 在应用程序试用列表到期时,Snowflake 会自动暂停该应用程序,以避免使用者承担额外的计算成本。Snowflake 仅会暂停应用程序所拥有的、当前处于活动状态的对象。Snowflake 不会修改已暂停对象的状态。
  • When a trial listing is converted to a full or paid listing, Snowflake attempts to re-enable the app by resuming tasks, containers, and compute pools. Snowflake only resumes services and compute pools that have the auto_resume property set to false.

针对具有容器的应用程序的建议

  • Compute pools should be set to automatically suspend in combination with Snowpark Container Services jobs to avoid idle compute nodes.
  • For higher availability during upgrades and to reduce cold start latency, Snowflake recommends that you set the MIN_NODES parameter greater than 1.
  • 如果在同一个应用程序中需要跨不同服务的连接,请使用服务的 DNS 名称,而非配置外部访问集成。

针对事件共享的建议

  • Providers should configure an app to emit log messages and trace events that conform to supported event definitions to ensure that consumers understand what information is collected.
  • 强制性事件定义应该仅限于应用程序所需的日志消息和跟踪事件。应避免过多或不必要的强制性事件定义。
  • 在版本升级中添加新的强制性事件定义时,必须要求使用者重新启用应用程序的事件定义。
  • 使用 Python 权限 SDK 以允许使用者共享可选事件。

连接应用程序

Snowflake allows SaaS providers to list their Connected Apps on Snowflake Marketplace. Connected Apps are integrated SaaS applications that securely connect to a Snowflake customer’s account to read or ingest specified data as part of their workflow. Connected Apps enable consumers to interact with their Snowflake data directly through an external UI.

Requirements to publish a Connected App on Snowflake Marketplace

  • Partner network tier: Providers must be active members of the Snowflake Partner Network (SPN), be enrolled in the AI Data Cloud Products Partner Program, and hold a Connected Application Select tier designation or higher.
  • CSID 要求: 每个连接应用程序都必须使用连接字符串标识符 (CSID)以启用完整的遥测和使用情况跟踪。鼓励提供商将每个应用程序整合到一个 CSID;但是,必要时也可以支持多个 CSIDs。CSID 最初必须通过 SPN 提交,随后将在您的列表提交中需要,并在审核流程中进行验证。
  • 安全透明度: 作为列表流程的一部分,提供商必须填写一份简短的 安全和数据处理证明
  • 列表类型: 所有连接应用程序列表都必须利用公开的付费列表,并使用标准优惠或专属优惠履行交易。

Ongoing standards for Connected Apps on Snowflake Marketplace

  1. 生态系统贡献: 连接应用程序应为 Snowflake Data Cloud 生态系统 做出有意义的贡献,帮助推动数据协作、使用或工作负载采用。
  2. 活动的合作伙伴关系: 提供商必须是 Snowflake 生态系统的 活跃贡献者。要保持名列 Marketplace 之上,提供商必须保持其处于合作伙伴网络中的“Select”或更高层级,并且其应用程序必须继续使生态系统获益。如果提供商不再为生态系统做出贡献(由 Snowflake 自行决定)或不再符合合作伙伴资格标准,则 Snowflake 可能会移除列表。