Секреты репозитория действий GitHub и способы защиты события отправки репозитория client_payload Реестр контейнеров Azure

Есть ли способ безопасно передавать данные между репозиториями с помощью client_payload в событии отправки репозитория?

Я создаю событие отправки репозитория для конвейера CI между двумя моими репозиториями. Мое первое репо использует Terraform в действии GitHub для создания облачных ресурсов 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"
  }
}'

1 ответ

Решение

Секреты организации

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

РЕДАКТИРОВАТЬ: чтобы включить некоторый уровень обфускации

Маскирование значения в журнале

Другие вопросы по тегам