linked artifacts page включает записи хранения и записи развертывания артефактов, которые вы создаёте в вашей организации. Метаданные для каждого артефакта предоставляются вашей организацией с помощью одного из следующих методов:
- Рабочий процесс, содержащий одно из действий GitHub для аттестации артефактов
- Интеграция с JFrog Artifactory или Microsoft Defender for Cloud
- Пользовательский скрипт с использованием REST API метаданных артефактов
Доступные методы зависят от того, загружаете ли вы запись хранения или запись развертывания. Для получения дополнительной информации о типах записей см. АВТОЗАГОЛОВОК.
Загрузка записи хранения
Вы можете загрузить запись памяти, создав аттестацию артефакта или включив интеграцию с JFrog Artifactory. Если вы не хотите использовать эти опции, необходимо настроить кастомную интеграцию с REST API.
Аттестирование с помощью GitHub Actions
Вы можете загрузить запись хранения артефакта, используя действия GitHub для подтверждения артефактов. Вы можете сделать это в том же рабочем процессе, что и для создания артефакта. Эти действия создают подписанные гарантии происхождения и целостности созданного вами программного обеспечения, а также автоматически загружают запись хранения в linked artifacts page.
Действия attest и attest-build-provenance автоматически создают записи хранения на linked artifacts page, если оба:
- Опция
push-to-registryустановлена наtrue - Рабочий процесс, включающий действие, имеет разрешение
artifact-metadata: write
Для получения дополнительной информации об использовании этих действий см. АВТОЗАГОЛОВОК.
Если артефакт не требует подтверждения или вы хотите загрузить записи развертывания или дополнительные метаданные хранилища, смотрите следующие разделы.
Использование интеграции JFrog
Эта двусторонняя интеграция автоматически поддерживает ваши записи хранения на GitHub актуальными с артефактом на JFrog. Например, аттестации, которые вы создаёте на GitHub, автоматически загружаются в JFrog, а продвижение артефакта в продакшн на JFrog автоматически добавляет производственный контекст в запись на GitHub.
Для инструкций по установке см. раздел «Начать с JFrog Artifactory и интеграцией с GitHub » в документации JFrog.
Использование REST API
Для артефактов, которые не требуют подтверждения и которые не хранятся в JFrog, можно создать пользовательскую интеграцию с помощью API хранения записей метаданных Create artifact. Вам следует настроить систему так, чтобы она вызывала эндпоинт всякий раз, когда артефакт публикуется в выбранном репозитории пакета.
Примечание.
Если артефакт не связан с аттестацией происхождения GitHub, параметр github_repository является обязательным.
Загрузка записи развертывания
Если вы храните артефакты в Microsoft Defender for Cloud (MDC), вы можете использовать интеграцию для автоматической синхронизации данных с linked artifacts page. В противном случае нужно настроить кастомную интеграцию с REST API.
Использование интеграции Microsoft Defender для облака
Вы можете подключить свою MDC экземпляр с организацией GitHub. MDC автоматически отправляет данные развертывания и выполнения в GitHub.
Для инструкций по установке см. Быстрый старт: Соедините вашу GitHub Окружение с Microsoft Defender for Cloud в документации для MDC.
Примечание.
Интеграция с Microsoft Defender for Cloud находится в public preview и может измениться.
Использование REST API
[Конечная точка API Create a artifact deployment record](/rest/orgs/artifact-metadata#create-an-artifact-deployment-record) позволяет системам отправлять данные о развертывании конкретного артефакта в GitHub, такие как его название, дайджест, среды, кластер и развертывание. Вы должны называть эту конечную точку всякий раз, когда артефакт развёртывается в новой стадинговой или производственной среде.
Примечание.
Если артефакт не связан с аттестацией происхождения GitHub, параметр github_repository является обязательным.
Проверка загрузки
Чтобы проверить, что запись была успешно загружена, вы можете просмотреть обновлённый артефакт в настройках вашей организации. См . раздел AUTOTITLE.
Удаление нежелательных записей
Невозможно удалить артефакт из linked artifacts page. Однако вы можете обновить запись хранения или запись развертывания, чтобы отразить статус артефакта. См . раздел AUTOTITLE.
GitHub Actions примеры
Вы можете загружать данные в linked artifacts page в том же рабочем процессе, что и для создания и публикации артефакта.
Генерация аттестации
В следующем примере мы создаём и публикуем образ Docker, а затем на следующем этапе используем ${{ steps.push.outputs.digest }} выход для генерации аттестации происхождения.
Действие attest-build-provenance автоматически загружает запись хранения в linked artifacts page, когда push-to-registry: true установлена, и рабочий процесс включает это artifact-metadata: write разрешение.
env:
IMAGE_NAME: my-container-image
ACR_ENDPOINT: my-registry.azurecr.io
jobs:
generate-build:
name: Build and publish Docker image
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
attestations: write
packages: write
artifact-metadata: write
steps:
- name: Build and push Docker image
id: push
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
with:
context: .
push: true
tags: |
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:latest
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v3
with:
subject-name: ${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true
Использование REST API
Или, если вы не генерируете аттестацию, можно напрямую вызвать API метаданных артефактов.
env:
IMAGE_NAME: my-container-image
IMAGE_VERSION: 1.1.2
ACR_ENDPOINT: my-registry.azurecr.io
jobs:
generate-build:
name: Build and publish Docker image
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
packages: write
artifact-metadata: write
steps:
- name: Build and push Docker image
id: push
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
with:
context: .
push: true
tags: |
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:latest
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
- name: Create artifact metadata storage record
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
jq -n --arg artifactName "${{ env.IMAGE_NAME }}" --arg artifactVersion "${{ env.IMAGE_VERSION }}" --arg artifactDigest "${{ steps.push.outputs.digest }}" '{"name": $artifactName, "digest": $artifactDigest, "version": $artifactVersion, "registry_url": "https://azurecr.io", "repository": "my-repository"}' > create-record.json
gh api -X POST orgs/${{ github.repository_owner }}/artifacts/metadata/storage-record --input create-record.json
shell: bash
Дальнейшие шаги
После загрузки данных команды вашей организации могут использовать контекст данных хранения и развертывания для приоритизации оповещений о безопасности. См . раздел AUTOTITLE.