该 linked artifacts page 包含组织中构建的工件的存储记录和部署记录。 您的组织通过以下方法之一为每个工件提供元数据:
- 包含GitHub的用于工件验证的操作之一的工作流
- 与 Dynatrace、JFrog Artifactory 或 Microsoft Defender for Cloud
- 使用项目元数据 REST API 的自定义脚本
可用方法取决于是上传存储记录还是部署记录。 有关记录类型的详细信息,请参阅 关于关联的项目。
上传存储记录
可以通过创建 项目证明 或启用与 JFrog Artifactory 的集成来上传存储记录。 如果不想使用这些选项,则必须设置与 REST API 的自定义集成。
认证 GitHub Actions
可以使用 GitHub 的第一方操作上传工件的存储记录以进行工件认证。 可以在用于构建工件的同一工作流中执行此操作。 这些操作为您构建的软件创建签名的溯源性和完整性保证,并自动将存储记录上传到linked artifacts page。
证明操作会在 linked artifacts page 上自动创建存储记录(如果满足以下两个条件):
push-to-registry选项已设置为true- 包含该操作的工作流具有
artifact-metadata: write权限
有关使用这些操作的详细信息,请参阅 使用项目证明确立生成的来源。
如果项目不需要证明,或者想要上传部署记录或其他存储元数据,请参阅以下部分。
使用 JFrog 集成功能
这种双向集成会自动使 GitHub 上的存储记录与 JFrog 上的工件保持最新状态。 例如,您在 GitHub 创建的证明会自动上传到 JFrog,并在 JFrog 上变更工件至生产环境时,自动将生产上下文添加到 GitHub 的记录中。
有关设置说明,请参阅 JFrog 文档中的 Get Started with JFrog Artifactory and GitHub Integration。
使用 REST API
对于不需要证明且不存储在 JFrog 上的项目,可以使用 “创建项目元数据存储记录 API 终结点”创建自定义集成。 应将系统配置为在项目发布到所选的软件包存储库时调用该终结点。
注意
如果工件未与 GitHub 上的来源证明相关联,则 github_repository 参数是必须的。
上传部署记录
如果使用 Dynatrace 或 Microsoft Defender for Cloud (MDC)监视已部署的工作负荷,则可以使用集成自动将部署数据同步到linked artifacts page。 否则,必须设置与 REST API 的自定义集成。
使用 Dynatrace 集成功能
可以将 Dynatrace 配置为将部署记录发送到 GitHub,用于 Dynatrace 监控的 Kubernetes 环境中运行的容器镜像。 Dynatrace 将已部署的映像映射到存储库,然后报告运行时上下文。
此外,Dynatrace 中的部署记录可以包括运行时风险上下文,例如:
- 公共互联网曝露
- 敏感数据访问
可以在组织级别警报筛选和安全活动中使用此上下文来确定影响 Internet 公开或敏感数据工作负荷的警报的修正优先级。
有关设置说明,请参阅 GitHub Advanced Security 安全集成 - Dynatrace 文档中的入门。
使用 Microsoft Defender for Cloud 的集成功能
您可以将MDC实例连接到GitHub组织。 MDC 将自动将部署和运行时数据发送到 GitHub。
有关设置说明,请参阅快速入门:在文档中将您的GitHub环境连接到Microsoft Defender for Cloud。MDC
注意
与Microsoft Defender for Cloud的集成处于公共预览版,并可能会发生更改。
使用 REST API
[创建项目部署记录](/rest/orgs/artifact-metadata#create-an-artifact-deployment-record) API 终结点允许系统向特定项目GitHub发送部署数据,例如其名称、摘要、环境、群集和部署。 每当将工件部署到新的过渡或生产环境时,都应调用此端点。
注意
如果工件未与 GitHub 的来源证明相关联,则 github_repository 参数是必需的。
验证上传
若要检查是否已成功上传记录,可以在组织设置中查看更新的项目。 请参阅“审核组织在 linked artifacts page 上的构建”。
删除不需要的记录
无法从linked artifacts page中删除项目。 但是,可以更新存储记录或部署记录以反映项目的状态。 请参阅“从 linked artifacts page 中删除工件”。
GitHub Actions 示例
可以在用于生成和发布项目的同一工作流中将数据上传到 linked artifacts page。
生成证明
在以下示例中,我们生成并发布 Docker 映像,然后使用 ${{ steps.push.outputs.digest }} 下一步中的输出生成证明证明。
当push-to-registry: true被设置且工作流包含artifact-metadata: write权限时,attest操作会自动将存储记录上传到linked artifacts page。
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@v4
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
后续步骤
上传数据后,组织中的团队可以使用存储和部署数据的上下文来确定安全警报的优先级。 请参阅“使用生产上下文确定 Dependabot 和代码扫描警报的优先级”。