Skip to main content

Загрузка данных хранения и развертывания в linked artifacts page

Ассоциируйте пакеты и сборки в вашей организации с данными о хранении и развертывании.

Кто может использовать эту функцию?

Anyone with write access to an organization-owned repository

Organization accounts on any plan

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.