在 travis-ci 上使用秘密 api 密钥

Posted

技术标签:

【中文标题】在 travis-ci 上使用秘密 api 密钥【英文标题】:Using secret api keys on travis-ci 【发布时间】:2012-03-09 10:53:11 【问题描述】:

我想将travis-ci 用作我的projects 之一。

该项目是一个 API 包装器,因此许多测试依赖于 API 密钥的使用。为了在本地进行测试,我只是将它们存储为环境变量。在 Travis 上使用这些密钥的安全方法是什么?

【问题讨论】:

【参考方案1】:

根据 travis ci 文档中的this ,据说:

如果您同时安装了 Heroku 和 Travis CI 命令行客户端,则可以通过在项目目录中运行以下命令来获取您的密钥、对其进行加密并将其添加到您的 .travis.yml 中:

travis encrypt $(heroku auth:token) --add deploy.api_key

参考the following 教程根据你的操作系统安装heroku客户端

【讨论】:

我只是想验证一下:它添加到您文件中的密钥可以安全地上传到版本控制,对吧?【参考方案2】:

你也可以定义秘密variables in repository settings:

存储库设置中定义的变量对于所有构建都是相同的,当您重新启动旧构建时,它会使用最新值。这些变量不会自动用于分叉。

在存储库设置中定义变量:

因存储库而异。 包含敏感数据,例如第三方凭据。

要在存储库设置中定义变量,请确保您已登录,导航到相关存储库,从 cog 菜单中选择“设置”,然后单击“环境变量”部分中的“添加新变量”。

【讨论】:

不明白如何创建 secret 变量。谷歌搜索时,结果解释了如何加密。 @XedinUnknown 这可用于秘密变量。来自链接:“默认情况下,这些新环境变量的值在日志中的导出行中是隐藏的。这对应于您的 .travis.yml 中加密变量的行为。变量以加密方式存储在我们的系统中,并且生成构建脚本时解密。”【参考方案3】:

Travis 具有加密环境变量的功能 ("Encrypting environment variables")。这可用于保护您的 API 密钥。我已经成功地将它用于我的 Heroku API 密钥。

您所要做的就是安装 travis gem,加密您想要的字符串并将加密的字符串添加到您的.travis.yml。加密仅对一个存储库有效。 travis 命令获取您的存储库的公钥,然后可以在构建期间解密字符串。

gem install --user travis
travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo

这将为您提供以下输出:

Please add the following to your .travis.yml file:

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="

【讨论】:

不要忘记记录您使用的变量以及原因,因为一旦加密它们,只有拥有原始密钥的人才能恢复它们。 使用--add env.global 选项到travis 命令,它会自动修改你的.travis.yml。 @RamIdavalapati:因为秘密是加密的,这被认为是安全的,是的。 @Ramesh-X:是的,因为这种加密是针对 TravisCI 的。如果有人控制 TravisCI,他们可以获得 SECRET_ENV @Michael Goerz:是的,只是add the env variables via the Travis web interface【参考方案4】:

使用一组不同的 API 密钥并以相同的方式进行操作。您的 travis 盒子为您的构建运行设置,然后在构建完成后再次完全拆除。在构建过程中您拥有对您的盒子的 root 访问权限,因此您可以对它做任何您想做的事情。

【讨论】:

“以同样的方式做”是什么意思?我不太喜欢将 API 密钥存储在 repo 本身(即在 .travis.yml 文件中)的想法,但似乎没有另一种方法可以在 travis 上配置环境变量。 环境变量将使用公钥加密,因此只有密钥的所有者才能解密它。您不应该使用重要的令牌。就我而言,我使用了 travis 已经为 GitHub 提供的那个。这工作得很好,只要我觉得 travis 有风险,我就可以在 github 中撤销该令牌。在我的仓库中拥有加密令牌不会让我睡不好觉。 github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml

以上是关于在 travis-ci 上使用秘密 api 密钥的主要内容,如果未能解决你的问题,请参考以下文章

服务如何生成和使用公共和秘密 API 密钥?

如何使用 API 密钥和秘密保护 Spring Boot API

在数据库中存储 API 密钥和秘密

当我推送到 GitHub 时如何处理秘密 API 密钥,以便在克隆存储库时我的项目仍然有效?

使用授权密钥和秘密的 PHP Curl API GET 调用

如何将秘密 API 密钥存储在应用程序的二进制文件中?