1

client_payload有没有办法使用存储库调度事件在存储库之间安全地传递数据?

我为我的两个存储库之间的 CI 管道创建了存储库调度事件。我的第一个 repo 在GitHub Action中使用 Terraform创建 Azure 云资源,然后假设输出使用我的azure.tf脚本创建的容器注册表资源的服务器地址、用户名和密码。

在第一个存储库中我的 GitHub Action 的最后一步中,它发出一个 POST 请求curl来通知我的第二个存储库已创建 Azure 容器注册表 (ACR) 的初始云资源。现在应该可以安全地从我的第二个 repo 构建我的容器映像并将它们推送到 ACR。

我的问题是client_payload被发送到我的第二个 repo,它使用不安全的原始 json,这将在我的第二个 repo 中的 GitHub 操作下,在我正在运行的 CI 作业的输出字符串中公开最重要的密码和其他信息。

这就是为什么我想了解是否有一种方法可以使用client_payload?

curl --location --request POST 'https://api.github.com/repos/ME_SECOND_REPO_WITH_THE_CONTAINERS/dispatches' \
--header 'Accept: application/vnd.github.everest-preview+json' \
--header 'Authorization: token <MY_PAT>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "event_type": "MY_EVENT_TYPE",
  "client_payload": {
    "login_server": "UNSECURE_VALUE",
    "username": "UNSECURE_VALUE",
    "password": "UNSECURE_VALUE"
  }
}'
4

1 回答 1

3

组织机密

Github Action 最近推出了一个叫做组织机密的东西。这将是处理服务帐户凭据的更好方法(假设您使用的是服务帐户)。

手动触发工作流

如果您没有设置服务帐户,那么最新的workflow_dispatch产品可能更合适。

工作流程

on: 
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

触发截图: 截屏

修改后的工作流程就像

on: 
  workflow_dispatch:
    inputs:
      login_server:
        description: 'login server'     
        required: true
        default: "xx.xx.xx.xx"
      username:
        description: 'username'  
        required: true
      password:
        description: 'password'  
        required: true        

你可以使用访问它们作为

  • ${{github.event.inputs.login_server}}
  • ${{github.event.inputs.username}}
  • ${{github.event.inputs.password}}

编辑:启用某种程度的混淆

屏蔽日志中的值

于 2020-07-06T19:06:32.197 回答