github 帖子 /repos/{owner}/{repo}/actions/runners/registration-token API 上的“资源无法通过集成访问”

nu_*_*pli 93 git packer github-actions

我正在从我的 github 工作流程(操作)发出一个 curl 发布请求,以获取自托管运行器的注册令牌,但我收到以下响应:

{
  "message": "Resource not accessible by integration",
  "documentation_url": "https://docs.github.com/rest/reference/actions#create-a-registration-token-for-a-repository"
}
Run Code Online (Sandbox Code Playgroud)

下面是我的 github 工作流程的精简版本:


name: get-token

"on":
  push: { branches: ["token"] }

jobs:
  
  print-token:
    name: print-token
    environment: dev
    # needs: pre-pkr
    runs-on: ubuntu-latest

    steps:
      - name: Check out code
        uses: actions/checkout@v2

      - name: Get registration token
        id: getRegToken
        run: |
          curl -X POST -H \"Accept: application/vnd.github.v3+json\"  -H 'Authorization: token ${{ secrets.GITHUB_TOKEN }}' https://api.github.com/repos/myprofile/myrepo/actions/runners/registration-token
Run Code Online (Sandbox Code Playgroud)

最终我想将此令牌传递给我使用 packer build 命令创建的 ami(下一步)。我也尝试使用加壳器的 shell 配置程序执行上述curl 请求,但响应相同。无法弄清楚我是否必须允许 github ui 的某些权限?或者还有什么办法可以做到这一点?提前致谢。

fre*_*nky 103

尝试添加permissions到您的工作中:

name: get-token

"on":
  push: { branches: ["token"] }

jobs:
  
  print-token:
    permissions: write-all
    name: print-token
    environment: dev
    # needs: pre-pkr
    runs-on: ubuntu-latest

    steps:
      - name: Check out code
        uses: actions/checkout@v2

      - name: Get registration token
        id: getRegToken
        run: |
          curl -X POST -H \"Accept: application/vnd.github.v3+json\"  -H 'Authorization: token ${{ secrets.GITHUB_TOKEN }}' https://api.github.com/repos/myprofile/myrepo/actions/runners/registration-token
Run Code Online (Sandbox Code Playgroud)

这应该告诉您这是否是问题所在,然后您可以找出您缺少的权限并更详细地正确配置它们。

正如评论和其他答案所提到的,您可以通过多种方式配置权限:

  • 使用 PAT(个人访问令牌
  • 覆盖工作流文件本身的权限,如上面的代码片段所示
  • 在操作设置中配置权限

第三个选项可以在几个不同的级别上完成:

您可以在此处找到默认权限的详细信息。

  • 这是您在互联网上可以找到的关于这个问题的最佳答案,甚至比 chatGPT 更好。 (6认同)
  • 你好。感谢你的回答。我接受了建议,据我了解,这不能直接在工作流程中完成。我明确分配允许工作流程中的所有权限,但它仍然不起作用。GH 令牌的权限也设置为读/写。PAT 需要存储库权限才能生成注册令牌,但无法在工作流程中分配这些条件。 (2认同)

Osc*_*car 83

转到https://github.com/OWNER/REPO/settings/actions并在工作流程权限部分中授予操作读取和写入权限。这为您的令牌提供了修改您的存储库并解决您的问题的权利。

  • 此权限的默认值最近是否已更改?在我的旧版本中,我不必手动启用此功能。 (9认同)
  • 这实际上有帮助。看到路径过滤器需要写访问权限是很烦人的...:-/ (3认同)

Gui*_*urd 16

GITHUB_TOKEN这里的问题与Github Actions 工作流程运行中自动生成的权限范围有关。

正如他的回答中所分享的,可以在此处frennky找到此令牌的默认权限。

基于此,你有2个解决方案:

  • 第一个是 所建议的freenky,使用作业中的权限字段GITHUB_TOKEN更新工作流运行中的权限。

  • 第二种是使用个人访问令牌而不是默认的GITHUB_TOKEN,使用您需要的特定权限创建它,然后将其添加为存储库密钥

  • 我确实尝试过这个。据我了解,这是不可能的。 (3认同)

小智 11

在您提到的操作系统下方添加此权限行,如下所示

    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      repository-projects: write
Run Code Online (Sandbox Code Playgroud)


Mud*_*hmi 9

  1. 转到存储库“设置”。
  2. 之后,它将向您显示左侧窗格,您可以在其中找到“操作”
  3. 展开“操作”选项卡
  4. 单击选项选项卡下的“常规”。
  5. 现在在新页面上向下滚动,您将获得“工作流程权限”
  6. 选择“工作流程权限”下的“读取和写入”。

您的其余设置似乎很好,因为您没有报告更多错误。如果问题仍然存在,请告诉我,我会解决它。