Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini adalah bagian dari rangkaian tentang memastikan integritas dan keaslian gambar kontainer dan artefak Open Container Initiative (OCI) lainnya. Untuk gambaran lengkap, mulailah dengan gambaran umum, yang menjelaskan mengapa penandatanganan penting dan menguraikan berbagai skenario.
Dalam artikel ini, Anda mempelajari cara membuat alur kerja GitHub Actions untuk:
- Buat gambar dan dorong ke Azure Container Registry.
- Tanda tangani gambar dengan menggunakan tindakan Notasi GitHub dan Penandatanganan Artefak.
- Simpan tanda tangan yang dihasilkan secara otomatis di Container Registry.
Prasyarat
Siapkan akun Penandatanganan Artefak dan profil sertifikat. Profil sertifikat Penandatanganan Artefak Anda harus menyertakan atribut berikut dalam subjeknya:
- Negara/wilayah (
C) - Negara bagian atau provinsi (
STatauS) - Organisasi (
O)
Spesifikasi Proyek Notaris memerlukan bidang ini.
- Negara/wilayah (
Membuat atau menggunakan registri kontainer.
Buat atau gunakan repositori GitHub untuk menyimpan file alur kerja dan rahasia GitHub Anda.
Mengautentikasi dari Azure ke GitHub
Menurut Gunakan Tindakan GitHub untuk menyambungkan ke Azure, Anda harus mengautentikasi dengan Azure di alur kerja Anda dengan menggunakan tindakan Azure Login sebelum Anda menjalankan perintah Azure CLI atau Azure PowerShell. Tindakan Azure Login mendukung beberapa metode autentikasi.
Dalam panduan ini, Anda masuk dengan OpenID Connect (OIDC), menggunakan identitas terkelola yang ditetapkan pengguna, dan ikuti langkah-langkah dalam Menggunakan tindakan Masuk Azure dengan OpenID Connect.
Buat identitas terkelola yang ditetapkan pengguna. Lewati langkah ini jika Anda memiliki identitas terkelola yang sudah ada.
Dapatkan ID klien identitas terkelola Anda:
Tetapkan peran ke identitas terkelola untuk mengakses Azure Container Registry.
Untuk registri yang tidak diaktifkan dengan kontrol akses berbasis atribut (ABAC), tetapkan peran
AcrPushdanAcrPull.ACR_SCOPE=/subscriptions/<subscription-id>/resourceGroups/<acr-resource-group> az role assignment create --assignee $CLIENT_ID --scope $ACR_SCOPE --role "acrpush" --role "acrpull"Untuk registri berkemampuan ABAC, tetapkan peran sebagai berikut:
Container Registry Repository ReaderdanContainer Registry Repository Writer.
Tetapkan peran
Artifact Signing Certificate Profile Signerkepada identitas terkelola untuk mengakses Penandatanganan Artefak.AS_SCOPE=/subscriptions/<subscription-id>/resourceGroups/<ts-account-resource-group>/providers/Microsoft.CodeSigning/codeSigningAccounts/<ts-account>/certificateProfiles/<ts-cert-profile> az role assignment create --assignee $CLIENT_ID --scope $AS_SCOPE --role "Artifact Signing Certificate Profile Signer"
Konfigurasikan GitHub untuk mempercayai identitas Anda. Ikuti konfigurasi identitas terkelola yang ditugaskan oleh pengguna untuk mempercayai penyedia identitas eksternal.
Buat rahasia GitHub dengan mengikuti Membuat rahasia untuk repositori.
Petakan nilai identitas terkelola ke rahasia tersebut:
Rahasia GitHub Nilai identitas terkelola AZURE_CLIENT_IDID Pelanggan AZURE_SUBSCRIPTION_IDIdentifikasi Langganan AZURE_TENANT_IDID Direktori (Penyewa)
Menyimpan sertifikat akar TSA
Penandaan waktu (RFC 3161) memperluas kepercayaan pada tanda tangan melebihi periode validitas sertifikat penandatanganan. Penandatanganan Artefak menggunakan sertifikat berumur pendek, sehingga tanda waktu sangat penting. URL server untuk otoritas stempel waktu (TSA) tersedia di http://timestamp.acs.microsoft.com/, seperti yang direkomendasikan dalam Tanda balik stempel waktu.
Unduh sertifikat akar TSA:
- Simpan sertifikat akar di repositori Anda; misalnya,
.github/certs/msft-identity-verification-root-cert-authority-2020.crt. Anda akan menggunakan jalur file dalam alur kerja.
Membuat alur kerja Tindakan GitHub
Buat
.github/workflowsdirektori di repositori Anda, jika tidak ada.Membuat file alur kerja baru; misalnya,
.github/workflows/sign-with-artifact-signing.yml.Salin templat alur kerja penandatanganan berikut ke dalam file Anda.
Perluas untuk menampilkan templat alur kerja penandatanganan.
# Build and push an image to Azure Container Registry, set up notation, and sign the image
name: notation-github-actions-sign-with-artifact-signing-template
on:
push:
env:
ACR_LOGIN_SERVER: <registry-login-server> # example: myregistry.azurecr.io
ACR_REPO_NAME: <repository-name> # example: myrepo
IMAGE_TAG: <image-tag> # example: v1
PLUGIN_NAME: azure-artifactsigning # name of Notation Artifact Signing plug-in; do not change
PLUGIN_DOWNLOAD_URL: <plugin-download-url> # example: "https://github.com/Azure/artifact-signing-notation-plugin/releases/download/v1.0.0/notation-azure-artifactsigning_1.0.0_linux_amd64.tar.gz"
PLUGIN_CHECKSUM: <plugin-package-checksum> # example: 2f45891a14aa9c88c9bee3d11a887c1adbe9d2d24e50de4bc4b4fa3fe595292f
TSA_URL: "http://timestamp.acs.microsoft.com/" # timestamping server URL
TSA_ROOT_CERT: <root-cert-file-path> # example: .github/certs/msft-identity-verification-root-cert-authority-2020.crt
AS_ACCOUNT_NAME: <artifact-signing-account-name> # Artifact Signing account name
AS_CERT_PROFILE: <artifact-signing-cert-profile-name> # Artifact Signing certificate profile name
AS_ACCOUNT_URI: <artifact-signing-account-uri> # Artifact Signing account URI; for example, "https://eus.codesigning.azure.net/"
jobs:
notation-sign:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
# packages: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: prepare
id: prepare
run: |
echo "target_artifact_reference=${{ env.ACR_LOGIN_SERVER }}/${{ env.ACR_REPO_NAME }}:${{ env.IMAGE_TAG }}" >> "$GITHUB_ENV"
# Log in to Azure with your service principal secret
# - name: Azure login
# uses: Azure/login@v1
# with:
# creds: ${{ secrets.AZURE_CREDENTIALS }}
# If you're using OIDC and federated credentials, make sure to replace the preceding step with the following:
- name: Azure login
uses: Azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
# Log in to your container registry
- name: ACR login
run: |
az acr login --name ${{ env.ACR_LOGIN_SERVER }}
# Build and push an image to the registry
# Use `Dockerfile` as an example to build an image
- name: Build and push
id: push
uses: docker/build-push-action@v4
with:
push: true
tags: ${{ env.target_artifact_reference }}
build-args: |
IMAGE_TAG={{ env.IMAGE_TAG }}
# Get the manifest digest of the OCI artifact
- name: Retrieve digest
run: |
echo "target_artifact_reference=${{ env.ACR_LOGIN_SERVER }}/${{ env.ACR_REPO_NAME }}@${{ steps.push.outputs.digest }}" >> "$GITHUB_ENV"
# Set up the Notation CLI
- name: setup notation
uses: notaryproject/notation-action/setup@v1.2.2
# Sign your container images and OCI artifacts by using a private key stored in Azure Key Vault
- name: sign OCI artifacts with Artifact Signing
uses: notaryproject/notation-action/sign@v1
with:
timestamp_url: ${{ env.TSA_URL}}
timestamp_root_cert: ${{env.TSA_ROOT_CERT }}
plugin_name: ${{ env.PLUGIN_NAME }}
plugin_url: ${{ env.PLUGIN_DOWNLOAD_URL }}
plugin_checksum: ${{ env.PLUGIN_CHECKSUM }}
key_id: ${{ env.AS_CERT_PROFILE }}
target_artifact_reference: ${{ env.target_artifact_reference }}
signature_format: cose
plugin_config: |-
accountName=${{ env.AS_ACCOUNT_NAME }}
baseUrl=${{ env.AS_ACCOUNT_URI }}
certProfile=${{ env.AS_CERT_PROFILE }}
force_referrers_tag: 'false'
Catatan tentang variabel lingkungan:
-
PLUGIN_NAME: Selalu gunakanazure-artifactsigning. -
PLUGIN_DOWNLOAD_URL: Dapatkan URL dari halaman rilis plugin Penandatanganan Artefak. -
PLUGIN_CHECKSUM: Gunakan file checksum pada halaman rilis; misalnya,notation-azure-artifactsigning_<version>_checksums.txt. -
AS_ACCOUNT_URI: Gunakan endpoint untuk akun Artifact Signing Anda, yang khusus untuk wilayahnya; contohnya,https://eus.codesigning.azure.net/.
Memulai alur kerja GitHub Actions
Sintaks on:push memicu alur kerja sampel. Menerapkan perubahan memulai alur kerja. Di bawah nama repositori GitHub Anda, pilih Tindakan untuk melihat log alur kerja.
Setelah berhasil, alur kerja membangun citra, membuahkannya ke Azure Container Registry, dan menandatanganinya dengan menggunakan Penandatanganan Artefak. Anda dapat melihat log alur kerja untuk mengonfirmasi bahwa azure-artifactsigning plug-in telah diinstal dan gambar berhasil ditandatangani.
Selain itu, Anda dapat membuka registri kontainer di portal Microsoft Azure. Buka Repositori, buka gambar Anda, lalu pilih Perujuk. Konfirmasikan bahwa artefak (tanda tangan) jenis application/vnd.cncf.notary.signature tercantum.