Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

5 лет назад
Открыть в
День 1086. #ЗаметкиНаПолях Защитите Контейнеры с Помощью Подписи в GitHub Actions Большинство контейнеров, доступных сегодня, уязвимы для атак цепочки поставок, потому что они могут быть опубликованы только с помощью простого ключа API. В случае утечки этого ключа злоумышленник может легко опубликовать законно выглядящий контейнер, который на самом деле содержит вредоносное ПО. Один из лучших способов защитить пользователей от таких атак — подписать образ во время создания. GitHub является одним из основателей Open Software Security Foundation (OpenSSF), отраслевой группы, занимающейся созданием решений с открытым исходным кодом для защиты разработчиков от угроз безопасности. Один из проектов, спонсируемых OpenSSF, — это sigstore, который позволяет разработчикам безопасно создавать, распространять и проверять подписанные артефакты ПО. Теперь поддержка sigstore интегрирована в стартовый рабочий процесс GitHub Actions для подписи образов контейнеров. Использование этого рабочего процесса даёт вашим пользователям уверенность в том, что образы контейнеров, полученные ими из их реестра контейнеров, являются надёжным кодом, созданным и опубликованным вами. Для подписи контейнеров используется инструмент cosign. Он поддерживает несколько типов ключей подписи, а также добавление аннотаций вида ключ-значение к подписи. Предположим, что у вас есть ключ, сгенерированный с помощью команды
cosign generate-key-pair
который вы сохранили в секретах репозитория GitHub Actions под именем SIGNING_SECRET. Подписать контейнер в рабочем процессе можно, выполнив что-то вроде:
...

jobs:
  build:
    steps:
      # ... шаги сборки

- uses: sigstore/cosign-installer@main
- name: Write signing key to disk (only needed for `cosign sign --key`)
  run: echo "${{ secrets.SIGNING_SECRET }}" > cosign.key

- name: Sign container image
  run: |
    cosign sign --key cosign.key \
      -a "repo=${{ github.repository }}" \
      -a "workflow=${{ github.workflow }}" \
      -a "ref=${{ github.sha }}" \
      ghcr.io/your-org/your-repo:some-tag
    env:
      COSIGN_PASSWORD: ""

Заметьте, что в подпись добавлены аннотации репозитория, рабочего процесса и ссылки на коммит. Вот и всё. Затем проверить подпись после получения образа можно с помощью команды:
cosign verify --key cosign.pub ghcr.io/your-org/your-repo:some-tag

А используя инструменты fulcio и Rekor от sigstore вы можете подписывать свои образы контейнеров с помощью токена OIDC, предоставленного GitHub, без необходимости предоставления и поддержки собственного закрытого ключа. Источник: github.blog/2021-12…-actions