GitHub Actions 中的 GITHUB_TOKEN:工作原理、更改权限、自定义
今天我将向你详细介绍GitHub Actions 中的GITHUB_TOKEN。你将了解它是什么、它如何工作、如何自定义它的行为以及如何限制或更改它的权限。
视频
与往常一样,如果您是视觉学习者,或者只是喜欢观看和聆听而不是阅读,那么这里有包含完整解释和演示的视频,公平地说,它比这篇文章完整得多。
视频链接:https://youtu.be/jEK07KPEjnY
如果你更喜欢阅读,那么...我们就继续吧:)
什么是 GITHUB_TOKEN
让我们首先了解 GitHub Actions 中的 GITHUB_TOKEN 是什么以及它是如何工作的。
GITHUB_TOKEN 是一个特殊的访问令牌,您可以使用它代表 GitHub Actions 进行身份验证。GitHub 会自动创建一个 GITHUB_TOKEN 密钥供您在工作流程中使用,您可以使用它在工作流程运行中进行身份验证。
它的工作原理是,当你在仓库中启用 GitHub Actions 时,GitHub 会在该仓库上安装一个 GitHub App。GITHUB_TOKEN密钥本质上是一个 GitHub App 安装访问令牌。
在每项作业开始之前,GitHub 都会从相应的 GitHub App 获取该作业的安装访问令牌。由于该 App 只能访问单个仓库,因此该令牌的权限仅限于包含您的工作流程的仓库。为了更加安全,该令牌会在作业完成后过期。
希望现在机制更清晰了。让我们快速看看如何使用 GITHUB_TOKEN
使用 GitHub 令牌
有两种使用令牌的方法:来自秘密和来自上下文。
- uses: actions/labeler@v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
在第一个示例中,我们使用secrets.GITHUB_TOKEN
来使用它。如上所述,密钥是自动生成的,因此您可以立即使用。
- name: Create a Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ github.token }}
这里我们使用包含 token 的 GitHub 上下文。注意,两者是等效的。
个人访问令牌与 GITHUB_TOKEN
如果您正在思考“为什么我应该使用 GITHUB_TOKEN 而不是我的普通 PAT?”,请记住个人访问令牌始终可用,因此如果有人能够窃取该 PAT,他们可能会造成一些危害。
GITHUB_TOKEN 会在工作结束后立即过期。所以即使有人能够窃取它(这几乎是不可能的),他们基本上也无法做任何坏事。
默认权限
默认情况下,GITHUB_TOKEN 分配有相当全面的权限列表。
此表显示了默认授予 GITHUB_TOKEN 的权限。值得庆幸的是,拥有企业、组织或代码库管理员权限的用户可以将默认权限设置为 permissive 或 restricted。
权限用户界面
那么,让我们看看如何更改 GITHUB_TOKEN 的权限以使其更加安全。
只需转到您的存储库或组织设置,然后单击操作。
Read and Write
在这里,您可以通过选择(允许您访问内容并进行更改)或 来更改分配给您的令牌的权限Read-only
。
这虽然非常快捷,但另一方面也相当有限。如果我想更精细地分配权限怎么办?
通过 YAML 实现细粒度权限
您可以使用YAML 工作流permissions
文件中的密钥来修改整个工作流或单个作业的 GITHUB_TOKEN 权限。
permissions:
contents: write
pull-requests: write
issues: read
packages: none
您可以使用上表列出的所有权限。此外,如下所示,如果您直接在 GitHub 界面中执行此操作,它将支持智能感知:
当使用权限键时,所有未指定的权限都将设置为无访问权限,但元数据范围除外,它始终具有读取访问权限。
您可以在作业级别或整个工作流级别(或实际上两者)个性化令牌权限:
[...]
permissions:
contents: write
pull-requests: write
jobs:
job1:
runs-on: ubuntu-latest
<span class="na">steps</span><span class="pi">:</span>
<span class="pi">[</span><span class="nv">...</span><span class="pi">]</span>
job2:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
[...]
结论
希望你现在对 GITHUB_TOKEN 有了更深入的理解,包括它的作用以及如何正确设置它的权限。如果你还有其他疑问,请在下方评论区留言。
另外,请查看此视频,我在其中讨论了如何在 GitHub 中创建个人访问令牌。
喜欢、分享并关注我🚀以获取更多内容:
📽 YouTube
☕给我买杯咖啡
💖 Patreon
🌐 CoderDave.io 网站
👕周边商品
👦🏻 Facebook 页面
🐱💻 GitHub
👲🏻 Twitter
👴🏻 LinkedIn
🔉 播客