【问题标题】:"Resource not accessible by integration" on github post /repos/{owner}/{repo}/actions/runners/registration-token APIgithub post /repos/{owner}/{repo}/actions/runners/registration-token API 上的“资源无法通过集成访问”
【发布时间】:2022-01-22 20:46:06
【问题描述】:

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

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

以下是我的 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

最终我想将此令牌传递给我正在使用打包程序构建命令创建的 ami(下一步)。我也尝试了使用加壳程序的外壳配置程序进行上述 curl 请求,但响应相同。 无法弄清楚我是否必须允许来自 github ui 的某些权限?或者这还能怎么做? 提前致谢。

【问题讨论】:

  • 嗨,您是否尝试在 curl 中使用个人访问令牌 (PAT) 而不是 GITHUB_TOKEN?
  • 你好。抱歉延迟回复。是的,我有,这对我有用。我倾向于 GITHUB_TOKEN 因为它是一个临时令牌。此外,还少了一个步骤(无需创建具有相关权限的 PAT 并将其存储在机密中)。只寻找解释为什么 GITHUB_TOKEN 不起作用。谢谢。
  • 大多数情况下,当操作使用 PAT 而不是 GITHUB_TOKEN 时,这是一个范围问题。 GHA 令牌只有一个特定的范围,当 Github API 需要更广泛的范围来执行某些操作时。在这里,创建注册令牌可能需要管理员权限,并且它们不包含在 GHA 令牌中。我会添加一个更详细的官方答案????????????

标签: git github-actions packer


【解决方案1】:

尝试将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

这应该告诉您是否是问题所在,然后您可以找出您缺少哪个权限并在更多details中正确配置它们。

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

  • 使用 PAT (Personal Access Token)
  • 覆盖工作流文件本身的权限,如上面的 sn-p 所示
  • 在操作设置中配置权限

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

您可以找到默认权限的详细信息here

【讨论】:

  • 你好。感谢您的回答。我接受了建议,据我了解,这不能直接在工作流程中完成。我在工作流程中明确分配了允许的所有权限,但它仍然不起作用。 GH Token 的权限也设置为读/写。 PAT 需要 repo 权限才能生成注册令牌,但无法在工作流中分配这些条件。
【解决方案2】:

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

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

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

  • 第一个是freenky 建议的,在你的工作中使用permissions field 更新工作流运行中的GITHUB_TOKEN 权限。

  • 第二种是使用Personal Access Token而不是默认的GITHUB_TOKEN,使用您需要的特定权限创建它,然后将其添加为repository secret

【讨论】:

  • 感谢您的回答。据我了解,使用 PAT 的路线是唯一可行的方法(我已经测试过,正在工作)。如果我错了,请纠正我,但我认为注册令牌 API 不能直接与 GITHUB_TOKEN 在操作工作流中一起使用。
  • API 不能与 default GITHUB_TOKEN 权限一起使用。但是有可能使用permission field 更新GITHUB_TOKEN 权限范围(我没有尝试过,所以无法确定)。
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 2020-04-13
  • 2018-03-26
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多