actions/attest-build-provenance
Создавайте подписанные подтверждения происхождения сборки для артефактов рабочего процесса. Внутренняя поддержка пакета @actions/attest.
Аттестации привязывают некоторый субъект (именованный артефакт вместе с его дайджестом) к предикату происхождения сборки SLSA с использованием формата in-toto.
Для аттестации создается поддающаяся проверке подпись с использованием недолговечного сертификата подписи, выданного Sigstore. Если репозиторий, инициирующий рабочий процесс GitHub Actions, является общедоступным, для создания подписи подтверждения будет использоваться экземпляр Sigstore, являющийся общественным достоянием. Если репозиторий является частным/внутренним, он будет использовать частный экземпляр Sigstore GitHub.
После создания и подписания аттестации она будет загружена в API аттестаций GH и связана с репозиторием, из которого был инициирован рабочий процесс.
Аттестации можно проверить с помощью команды attestation
в интерфейсе командной строки GitHub.
Дополнительную информацию о аттестациях артефактов см. в разделе Использование аттестаций артефактов для установления происхождения сборок.
В рамках рабочего процесса GitHub Actions, который создает некий артефакт, который вы хотели бы подтвердить:
Убедитесь, что установлены следующие разрешения:
permissions :
id-token : write
attestations : write
Разрешение id-token
дает действию возможность создавать токен OIDC, необходимый для запроса сертификата подписи Sigstore. Разрешение attestations
необходимо для сохранения аттестации.
После создания артефакта добавьте в свой рабочий процесс следующее:
- uses : actions/attest-build-provenance@v1
with :
subject-path : ' '
Параметр subject-path
должен идентифицировать артефакт, для которого вы хотите создать аттестацию.
См. action.yml.
- uses : actions/attest-build-provenance@v1
with :
# Path to the artifact serving as the subject of the attestation. Must
# specify exactly one of "subject-path" or "subject-digest". May contain a
# glob pattern or list of paths (total subject count cannot exceed 2500).
subject-path :
# SHA256 digest of the subject for the attestation. Must be in the form
# "sha256:hex_digest" (e.g. "sha256:abc123..."). Must specify exactly one
# of "subject-path" or "subject-digest".
subject-digest :
# Subject name as it should appear in the attestation. Required unless
# "subject-path" is specified, in which case it will be inferred from the
# path.
subject-name :
# Whether to push the attestation to the image registry. Requires that the
# "subject-name" parameter specify the fully-qualified image name and that
# the "subject-digest" parameter be specified. Defaults to false.
push-to-registry :
# Whether to attach a list of generated attestations to the workflow run
# summary page. Defaults to true.
show-summary :
# The GitHub token used to make authenticated API requests. Default is
# ${{ github.token }}
github-token :
Имя | Описание | Пример |
---|---|---|
bundle-path | Абсолютный путь к файлу, содержащему сгенерированное подтверждение. | /tmp/attestation.jsonl |
Аттестации сохраняются в формате пакета Sigstore, сериализованном в формате JSON.
Если одновременно аттестуется несколько субъектов, каждая аттестация будет записана в выходной файл в отдельной строке (с использованием формата JSON Lines).
Одновременно может быть аттестовано не более 2500 субъектов. Субъекты будут обрабатываться партиями по 50 человек. После первоначальной группы из 50 человек каждая последующая партия будет вызывать экспоненциально увеличивающуюся задержку (ограниченную задержкой в 1 минуту на партию), чтобы избежать перегрузки API аттестации.
В базовом варианте использования просто добавьте действие attest-build-provenance
в свой рабочий процесс и укажите путь к артефакту, для которого вы хотите создать аттестацию.
name : build-attest
on :
workflow_dispatch :
jobs :
build :
permissions :
id-token : write
contents : read
attestations : write
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Build artifact
run : make my-app
- name : Attest
uses : actions/attest-build-provenance@v1
with :
subject-path : ' ${{ github.workspace }}/my-app '
Если вы создаете несколько артефактов, вы можете создать подтверждение происхождения для каждого, используя подстановочный знак во входных данных subject-path
.
- uses : actions/attest-build-provenance@v1
with :
subject-path : ' dist/**/my-bin-* '
Информацию о поддерживаемых подстановочных знаках, а также о поведении и документации см. в разделе @actions/glob, который используется для внутреннего поиска файлов.
Альтернативно, вы можете явно перечислить несколько предметов, разделив их запятыми или новой строкой:
- uses : actions/attest-build-provenance@v1
with :
subject-path : ' dist/foo, dist/bar '
- uses : actions/attest-build-provenance@v1
with :
subject-path : |
dist/foo
dist/bar
При работе с образами контейнеров вы можете вызвать действие с входными данными subject-name
и subject-digest
.
Если вы хотите опубликовать подтверждение в реестре контейнеров с опцией push-to-registry
, важно, чтобы subject-name
было указано полное имя образа (например, «ghcr.io/user/app» или «acme. azurecr.io/user/app»). НЕ включайте тег в имя изображения: конкретное аттестуемое изображение идентифицируется по предоставленному дайджесту.
Пакеты аттестации хранятся в реестре OCI в соответствии со спецификацией Cosign Bundle.
ПРИМЕЧАНИЕ . При отправке в Docker Hub используйте «index.docker.io» в качестве части реестра имени образа.
name : build-attested-image
on :
push :
branches : [main]
jobs :
build :
runs-on : ubuntu-latest
permissions :
id-token : write
packages : write
contents : read
attestations : write
env :
REGISTRY : ghcr.io
IMAGE_NAME : ${{ github.repository }}
steps :
- name : Checkout
uses : actions/checkout@v4
- name : Login to GitHub Container Registry
uses : docker/login-action@v3
with :
registry : ${{ env.REGISTRY }}
username : ${{ github.actor }}
password : ${{ secrets.GITHUB_TOKEN }}
- name : Build and push image
id : push
uses : docker/[email protected]
with :
context : .
push : true
tags : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
- name : Attest
uses : actions/attest-build-provenance@v1
id : attest
with :
subject-name : ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
subject-digest : ${{ steps.push.outputs.digest }}
push-to-registry : true