GitHub 操作存储库机密以及如何保护 client_payload 存储库调度事件 Azure 容器注册表

GitHub Action Repository Secrets & how to secure client_payload repo dispatch event Azure Container Registry

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

create a repository dispatch event for a CI pipeline I have between my two of my repos. My first repo uses Terraform in a GitHub Action 创建 Azure 云资源,然后假设使用我的 azure.tf 脚本获取我的容器注册表资源的服务器地址、用户名和密码的输出。

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

我的问题是 client_payload 被发送到我的第二个存储库,它使用不安全的原始 json 这将最重要地暴露密码和我的输出字符串中的其他信息 运行 CI 在我的第二个回购中 GitHub 行动下的工作。

这就是为什么我想了解是否有一种方法可以使用 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"
  }
}'

组织机密

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

手动触发工作流

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

工作流程

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}}

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

Masking a value in log