,

Anaconda 匿名使用数据收集的更改

迈克尔·格兰特

编者注:自本文发布以来,我们已将此更改提交到 Miniconda 安装程序。如果您选择,我们已简化禁用此数据收集的操作。

Anaconda 致力于不断改善客户和社区的用户体验。我们的目标是成为安全访问数千个 Python 和 R 仓库、软件包和库的首选提供商,同时还支持为这些软件包提供支持的开源社区。这些双重目标体现在 Anaconda 的产品和我们的开源贡献中。

更深入地了解仓库使用模式,增强了我们为免费用户和付费用户提供服务的能力。考虑到这一点,我们正在扩展 conda 包管理器在与以下 Anaconda 产品一起使用时提供匿名使用数据:Anaconda 发行版Anaconda Navigator

如果您完全依赖于 conda-forge 等社区频道和 Miniforge 等安装程序,则此更改不会影响您。考虑到我们对社区的承诺,我们不会将此更改提交到 conda 项目、conda 包本身或 Miniconda 安装程序。如果您选择,我们还简化了禁用此额外数据收集的操作。

在本文中,我们详细介绍了正在收集哪些数据、将收集哪些额外数据、此更新发生的位置和时间、我们现在为什么要收集这些额外数据、Anaconda 将如何使用此数据以及它将如何使我们的客户和社区受益。本文最后深入探讨了用户数据在 Anaconda 产品中的管理方式。

正在收集哪些数据?

当 conda 客户端从仓库请求软件包或索引时,它使用 行业标准机制 将通用识别信息提供到请求中

  • conda 和 requests Python 软件包的版本;
  • Python 解释器的变体和版本;以及
  • 主机操作系统的变体和版本。

在我们实施的更改中,三个随机生成的令牌将添加到每个请求中

  • 一个客户端令牌,对于每个不同的 conda 客户端都是唯一的;
  • 一个环境令牌,对于每个 conda 环境都是唯一的;以及
  • 一个会话令牌,对于每次单独的 conda 事务都是唯一的。

工作原理的详细信息在下面的“深入探讨”部分中给出。但如上所述,令牌是随机的:它们不包含任何个人身份信息,甚至不包含您的 conda 环境名称。但是,它们确实帮助我们通过允许我们更精确地区分访问日志中的不同用户、环境和事务来得出更好的统计结论。

此更改发生在哪里以及何时?

此更新是使用新的 conda 插件 完成的,该插件是在新的 anaconda-anon-usage conda 软件包中实现的。此软件包将分阶段添加到 Anaconda 产品中,以帮助确保顺利推出

  • 最初,它被添加到 Anaconda Navigator 的依赖项中,从 2023 年 9 月 7 日发布的 2.4.3 版开始。此版本已通过完整的 QA 流程,以确保包含 anaconda-anon-usage 不会影响操作。
  • 它将被纳入计划于 2023 年 9 月底发布的 Anaconda 发行版 2023.09 安装程序中。
  • 将在以后确定的日期,该软件包将被纳入 Anaconda 频道上提供的其他产品的后续版本中
    • anaconda-client,我们用于在 Anaconda.org 上管理社区软件包频道的工具;以及
    • anaconda-cloud-auth,一个软件包,它促进与各种 Anaconda 云服务(现在和将来)的认证连接。

如引言中所述,此软件包被添加到 conda 本身中。我们的目的是收集与使用 Anaconda 产品的用户相关的数据,而不是更大的开源社区,其成员可能更喜欢完全依赖于社区驱动的资源。

为什么要收集扩展的使用数据?

这些额外数据将帮助 Anaconda 以多种方式更好地为我们的社区和客户服务。

在社区方面,我们一直在寻找以轻量级、保护隐私的方式更好地了解使用模式的方法。这些额外信息使我们能够通过对分解或分离跨用户、事务和环境的原始使用数据来更准确地执行分析。

以下是一些我们可以更好地回答的问题示例

  • 一个 IP 地址后面有多少个单独的 conda 安装?
  • 给定的 conda 事务来自由人类管理的长期存在的桌面环境还是由 CI 作业创建的临时环境?
  • 特定的软件包安装是否发生在基本环境还是子环境中?它是新安装还是对现有软件包的更新,后者表明更强烈的主动使用感?
  • 我们看到了多少个特定软件包漏洞的单独安装?其中有多少已通过更新修复?

我们承诺,将找到与您分享这些见解的方法。具体而言,我们正在研究将这些信息提供给 Anaconda 频道所有者和软件包开发人员的方法,这可能涉及扩展我们现有的 condastats 项目

当然,我们对 conda 社区进行重大资源投入的能力也取决于我们盈利产品的成功。为此,我们承认这些数据可以帮助我们改进业务的几种方式。例如

  • 更好的使用信息使我们能够更好地优先考虑软件包构建和 CVE 维护,从而提高我们安全软件供应链的价值。
  • 向我们提供 IP 地址列表的客户可以获取其用户群的准确数量,以便为我们的商业产品正确调整许可证。
  • Anaconda 专业版客户将能够匿名汇总其用户对新漏洞的暴露情况。
  • Anaconda 商业版客户可以选择加入更多遥测数据,使我们能够将漏洞追踪到特定用户和主机。

有关 Anaconda 如何产生收入以支持我们的业务运营并继续我们的社区投资的更多信息,请参阅我们最近的博客文章 “conda 免费吗?”

禁用扩展使用数据

我们当然希望您考虑保留随机令牌。但是,如果您想禁用它们,可以通过运行以下命令来实现

conda config --set anaconda_anon_usage off

您也可以手动编辑您的 conda 配置文件 并添加以下行

anaconda_anon_usage: false

要重新启用额外使用数据,请运行以下命令:

conda config --set anaconda_anon_usage on

或从您的配置文件中删除 anaconda_anon_usage 条目。无论您选择什么,您的选择都会生效,即使您卸载并重新安装 Anaconda,只要您在卸载时没有删除您的 conda 配置文件,您的选择就会生效。

谢谢!

我们感谢用户对我们的信任。与往常一样,我们对解决方案做出的每一项更改,都是为了更好地为您服务,并继续努力为数千个 Python 和 R 仓库、软件包和库提供集中式、安全的访问。我们将继续支持数据科学社区,并管理开源项目,让您更容易在自己的领域内进行创新、构建和部署有效的解决方案。

深入探讨:conda 和 anaconda-anon-usage 中的用户数据

在本节中,我们将提供有关 condaanaconda-anon-usage 如何确定和传输上述用户数据的更技术性的介绍。

传输用户数据的关键机制是通过行业标准 HTTP 用户代理字符串。您的网络浏览器在向网站发出每个请求时都会传输这些字符串。它通常包含有关计算机、操作系统和浏览器的信息;例如

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36

Conda 使用相同的协议向软件包存储库发出请求,因此它也生成用户代理字符串。以下是一个典型的示例

conda/23.7.3 requests/2.31.0 CPython/3.10.12 Darwin/22.6.0 OSX/13.5.1

如您所见,此字符串包含有关操作系统和 conda 环境的各个组件版本的信息。您可以通过运行命令 conda info 并检查用户代理行来查看您的 conda 环境使用的精确字符串。其他 conda 客户端,如 mamba 和 pixi,也使用非常类似的用户代理。HTTPS 加密确保这些标头的内容受到保护,免受窥探。

安装 anaconda-anon-usage 后,它将使用 conda 的 插件机制 来扩展 conda 用户代理字符串。具体来说,它添加了一个新的版本标记和三个额外的随机生成的标记。此更长的用户代理字符串可能如下所示

conda/23.7.3 requests/2.31.0 CPython/3.10.12 Darwin/22.6.0 OSX/13.5.1 aau/0.3.0 c/16lUJyi7R8u-Co33mZJElQ s/YYFCctOeTjyDnXLazjLy_A e/rVB0_HxgRXKPLzKt9sKcVA

以下是每个标记的含义

  • aau/: anaconda-anon-usage 包本身的版本。
  • c/: 您 conda 安装的客户端标记,与您 conda 安装唯一对应。每次运行 conda 时,都会传递相同的标记。
  • s/: 与单个 conda 运行唯一的会话标记。例如,像 conda install pandas 这样的命令可能会向软件包存储库发出五个单独的请求;这些请求中的每一个都将共享相同的会话标记。
  • e/: 环境标记对于每个 conda 环境(包括基本环境和子环境)都是唯一的。

例如,如果您在同一台机器上运行命令“conda install -n base pandas”和“conda install -n child1 panel”,则用户代理字符串将具有相同的客户端标记,但不同的会话和环境标记。

每个标记的生成方式相同

  • 使用 os.urandom 生成 16 字节的加密质量随机数据。
  • 通过 base64.urlsafe_b64encode 对数据进行编码,以生成 22 个字符的文本友好的表示形式。
  • 每次调用 conda 时都会重新生成会话标记。
  • 客户端和环境标记将保存到磁盘,以便可以重复使用
    • macOS/Linux: ~/.conda/aau_token, $CONDA_PREFIX/etc/aau_token
    • Windows: %USERPROFILE%\.conda\aau_token, %CONDA_PREFIX%\etc\aau_token

如果您删除了保存的标记,则在下一次 conda 事务期间将自动重新生成一组新值,除非您完全禁用此遥测。

anaconda-anon-usage 包当然是开源的,拥有标准的 BSD 许可证。如果您想深入了解,可以 公开获取源代码

与专家交谈

与我们的专家交谈,为您的 AI 旅程寻找解决方案。

与专家交谈