Почему у действия нет доступа к секретам?

Я пытаюсь создать рабочий процесс для развертывания пакетов Nuget в репозитории пакетов Github с помощью действий Github.

В этом случае,

  • Репозиторий находится внутри организации
  • Я владелец этой организации
  • У меня есть доступ администратора к репозиторию
  • В репозитории перечислены секреты
  • Коммит мой
  • Коммит - это прямая фиксация в ветке

Но действие НЕ МОЖЕТ получить доступ к секретам

Ниже представлен рабочий процесс, который я пытаюсь выполнить.

name: Build and Publish
on:
push:
  branches:
    - gh-packages
jobs:
build_and_publish:
env:
  ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Publish Packages to NuGet
runs-on: ubuntu-latest
steps:
  - uses: actions/checkout@v2
  - uses: actions/setup-dotnet@v1
    with:
      dotnet-version: "3.0.100"
  - name: Dump Github Context
    env:
      CONTEXT: ${{ toJson(github) }}
      SECRETS: ${{ toJson(secrets) }}
      TOK: ${{ secrets.ACCESS_TOKEN }}
      TEST: ${{ secrets.TEST }
    run: |
      echo $ACCESS_TOKEN
      echo $TOK
      echo $TEST
      echo $GITHUB_TOKEN
      echo "$SECRETS"
      echo "$CONTEXT"
  - name: Setup Config
    run: sed "s/ACCESS_TOKEN/$ACCESS_TOKEN/g" .nuget.config > nuget.config
  - run: cat nuget.config
  - name: Build
    run: dotnet build -c Release
  - name: Publish
    run: chmod +x ./push.sh && ./push.sh

И GITHUB_TOKEN, и пользовательские секреты, такие как ACCESS_TOKEN, не работают.

дополнение 01:

Даже при установке имени переменной среды как GITHUB_TOKEN не работает

name: Build and Publish
env:
   GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
...

4 ответа

Решение

Эта проблема возникла из-за моего недоразумения: "Секретные значения должны отображаться в журналах, если они переданы в действие".

Я объединяю ответы Бена Виндинга и brian m. carlson, чтобы brian m. carlson.

Секретные значения очищаются в журналах действий. Не ожидайте увидеть фактические значения в журнале действий. Получение очищенного текста означает, что значение было передано действию. вы можете использовать значение, но не можете увидеть его в журналах. Проверьте ответ Бена, чтобы узнать, как можно увидеть значения, даже если это не рекомендуется.

Обновить

Да, это возможно, но это очень плохая практика. При необходимости вы можете использовать следующую команду, которая обходит меры безопасности Github, чтобы предотвратить утечку секретов из журналов.

run: echo MYSECRET | sed -e 's/\(.\)/\1 /g'
# this will print "M Y S E C R E T"

Просто замените MYSECRET с секретом, который вы пытаетесь напечатать, например $GITHUB_TOKEN.

Старый ответ

Ознакомьтесь с этим другим ответом, кажется, что это ожидаемое поведение действий Github.

Как видите, я могу получить (и использовать) значение переменных среды, но секреты не раскрываются.

Это потому, что они секреты. Выходные данные Actions явно очищаются от секретов, и они не отображаются.

Содержимое файла по-прежнему содержит секретное содержимое.

Обновлено:

Это обычное соглашение о том, как преобразовать секреты в действия.

env: 
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Так я использую это в своих действиях.

Обновление2

Ознакомьтесь с подробными инструкциями о том, как распечатать свои секреты, но настоятельно не рекомендуется.

https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets

Если вы хотите записать что-то, чтобы указать, что секрет существует, попробуйте следующее:

      auth_token="${{ inputs.auth_token }}"
echo "auth_token length: ${#auth_token}"

The ${#auth_token}сообщит длину секрета. В журналах вы найдете следующее:

      auth_token length: 72

Это позволяет вам узнать, что auth_token существует и как долго он существует, но не снижает безопасность токена.

Прочитав все содержимое документации GitHub, касающейся доступа к вашим секретам , и, наконец, я увидел это, это научило меня многому с точки зрения лучших практик и стандартных вариантов использования секретов.

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