掩盖你的踪迹: 如何隐藏GitHub操作日志中的内容

如何隐藏GitHub操作日志中的内容

GitHub Actions是GitHub内置的持续集成和持续交付(CI/CD)平台,使开发团队能够实现工作流程的自动化,包括构建、测试和部署管道。

使用GitHub Actions的一个缺点是,你的日志是公开的,任何人都可以通过必要的权限访问它们。

为了防止敏感数据暴露在GitHub Actions的日志中,你应该使用加密的环境变量来安全存储敏感数据。这些加密的环境变量被称为GitHub Actions Secrets。

本文告诉你如何使用GitHub Actions Secrets来防止敏感信息出现在GitHub Actions日志中。

  1. 先决条件
  2. 如何保持GitHub操作日志的安全性
  3. 如何屏蔽日志
  4. 如何使用GitHub Actions Secrets
  5. 如何屏蔽Secret

先决条件

要学习本教程:

  • 确保你有一个GitHub账户
  • 拥有一个现有的GitHub仓库。对于本教程,你可以克隆这个演示仓库。
  • 按照这些说明克隆演示仓库

如何保持GitHub操作日志的安全性

当你使用GitHub Actions构建工作流程时,任何访问你仓库的人都可以查看日志,所以它们不应该包括敏感信息。然而,你不能就这样删除你的令牌、密码和其他敏感信息–你需要它们来进行测试和让你的应用程序正常运行。

解决方案是用 ::add-mask:: 工作流命令来隐藏它们,该命令将星号(*)放在它所应用的敏感数据的位置上。

下面的部分向你展示了如何屏蔽日志。

如何屏蔽日志

首先,在你的文本编辑器中打开克隆的版本库。

在版本库的根部创建.github/workflows/目录,以存储你的工作流文件。然后,在.github/workflows目录中创建一个名为hide-secrets.yml的新文件,并在其中添加以下代码:

name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: echo a secret
run: echo "your secret token is verySecretToken"

提交修改并推送到你的GitHub仓库。更新后的GitHub操作工作流程是激活的,每当你推送一个新的改动时,就会触发。

在GitHub上打开你的仓库,选择Actions标签来查看日志。你的工作流程应该显示如下:

预览你的工作流程

预览你的工作流程

检查工作流程的日志,你会发现打印在日志上的 verySecretToken 字符串。点击你的工作流程,然后点击任务名称(print-secret-token)来查看日志。它应该看起来像这样:

检查你的GitHub动作日志

检查你的GitHub动作日志

要隐藏它,使用 ::add-mask:: 命令,编辑hide-secrets.yml文件,并在 print-secret-token 工作中添加一个新步骤:

name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: Add Mask
run: echo "::add-mask::verySecretToken"
- name: echo a secret  
run: echo "your secret token is verySecretToken"

你应该在顶部添加 Add Mask 的步骤,因为掩码只在 ::add-mask:: 运行后适用。如果你把Secret的 verySecretToken 放在 Add Mask 步骤之前,它仍然会出现未被掩码。因此,为了确保该值被屏蔽,必须尽快使用 ::add-mask::

一旦你提交并发布你的修改到你的GitHub仓库,字符串 verySecretToken 将被星号(*)取代,无论它出现在你的日志中:

制作普通文本

制作普通文本

虽然这解决了屏蔽的问题,但却引入了一个新的问题。你的 verySecretToken 仍然在工作流文件中,所以任何能够访问源代码的人都可以看到它。

屏蔽纯文本的另一个缺点是,只屏蔽一个词的一部分会隐藏它的所有实例。例如,以下面的句子为例: “Programming is great, but my most productive days are those when I do not write a program”。如果你屏蔽了 “program” 这个词,它不仅会屏蔽句子末尾的这个词,还会屏蔽它出现的任何地方,比如 “programming” 中。

如果你试图屏蔽纯文本,你会得到这样的结果:

屏蔽纯文本的问题

屏蔽纯文本的问题

在GitHub动作日志中隐藏敏感数据的更好方法是使用GitHub Actions Secrets,如下节所示。

如何使用GitHub Actions Secrets

你可以使用GitHub Actions Secrets来存储任何你想在GitHub操作工作流程中使用的私人数据。Secret是在仓库或组织层面以键/值对的形式创建的。

仓库只能访问在仓库级别创建的Secret,而在组织级别创建的Secret则由组织内的所有仓库共享。

在存储库级别创建的Secret可供任何有合作者角色权限的人在操作中使用。你可以在任何时候改变你的Secret的值。然而,Secret不能被用于分支版本库的工作流。

以下准则适用于命名Secret:

  • Secret名称不能包含空格。
  • Secret名称不区分大小写。
  • Secret名称不能以数字开头。
  • Secret名称不能以前缀 GITHUB_ 开头。
  • Secret名称必须是唯一的 – 具有相同名称的秘密不能存在于同一级别。

你可以在GitHub操作的工作流程中使用这些Secret,只需在Secret名称前添加 secrets 作为YML变量,如下所示:

${{ secrets.MY_SECRET_TOKEN }}

你也可以掩盖Secret,以获得更多的安全性,如下所示。

如何屏蔽secret

首先,创建一个GitHub secret。在你的 GitHub 仓库中,点击设置标签,从左边的侧边栏中选择Secrets Actions,然后点击New repository secret来添加一个新的secret:

创建一个新的版本库secret

创建一个新的版本库secret

给你的secret一个名字和一个secret值,然后点击Add secret

添加一个新的GitHub Secret

添加一个新的GitHub Secret

现在你已经创建了你的secret,并给了它 verySecretToken 值,你可以在你的工作流文件中使用它。打开你的 hide-secrets.yml 文件,做如下修改:

name: Hide Sensitive Information
on: push
jobs:
print-secret-token:
runs-on: ubuntu-latest
steps:
- name: Add Mask
run: echo "::add-mask::${{ secrets.MY_SECRET_TOKEN }}"
- name: Echo a secret  
run: echo "your secret token is ${{ secrets.MY_SECRET_TOKEN }}"

这与之前的代码唯一的区别是,你用新创建的GitHub secret ” ${{secrets.MY_SECRET_TOKEN }} ” 替换了Secret令牌。

一旦你提交了代码并将修改推送到你的GitHub仓库,你的Secret就被屏蔽了:

屏蔽的GitHub操作私钥

屏蔽的GitHub操作私钥

小结

你不能在你的GitHub操作日志中泄露任何敏感信息。纯文本屏蔽是隐藏数据的一种方式,但任何访问工作流文件的人都可以看到你试图隐藏的信息。

正如本教程所展示的,GitHub Actions Secret是一种更安全的方法,可以保护你的敏感数据,然后将其屏蔽。

评论留言