Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek je součástí série o zajištění integrity a pravosti imagí kontejnerů a dalších artefaktů OCI (Open Container Initiative). Pro úplný obrázek začněte přehledem, který vysvětluje, proč podepisování záleží a popisuje různé scénáře.
V tomto článku se dozvíte, jak vytvořit pracovní postup GitHub Actions pro:
- Sestavte image a nasdílíte ji do služby Azure Container Registry.
- Podepište image pomocí akcí GitHubu Notation a důvěryhodného podepisování.
- Automaticky uloží vygenerovaný podpis ve službě Container Registry.
Požadavky
Nastavte důvěryhodný podpisový účet a profil certifikátu. Profil důvěryhodného podpisového certifikátu musí obsahovat následující atributy v předmětu:
- Země/oblast (
C) - stát nebo kraj (
STneboS) - Organizace (
O)
Specifikace notářského projektu vyžaduje tato pole.
- Země/oblast (
Vytvořte nebo použijte registr kontejneru.
Vytvořte nebo použijte úložiště GitHub k uložení souboru pracovního postupu a tajných kódů GitHubu.
Poznámka:
V tuto chvíli je důvěryhodné podepisování k dispozici pouze organizacím založeným ve Spojených státech a Kanadě, které mají ověřitelnou historii tří let nebo více.
Ověřování z Azure na GitHub
V závislosti na použití GitHub Actions pro připojení k Azure je nutné provést ověření v Azure ve vašem pracovním postupu pomocí akce Azure Login před spuštěním Azure CLI nebo příkazů Azure PowerShellu. Akce Přihlášení k Azure podporuje více metod ověřování.
V této příručce se přihlásíte pomocí OpenID Connect (OIDC), použijete spravovanou identitu přiřazenou uživatelem a budete postupovat podle kroků v části Použití akce Přihlášení k Azure s OpenID Connect.
Vytvořte spravovanou identitu přiřazenou uživatelem. Pokud máte existující spravovanou identitu, tento krok přeskočte.
Získejte ID klienta spravované identity:
Přiřaďte spravované identitě role pro přístup ke službě Azure Container Registry.
U těchto registrů, které nevyužívají řízení přístupu na základě atributů (ABAC), přiřaďte role
AcrPushaAcrPull:ACR_SCOPE=/subscriptions/<subscription-id>/resourceGroups/<acr-resource-group> az role assignment create --assignee $CLIENT_ID --scope $ACR_SCOPE --role "acrpush" --role "acrpull"Pro registry s podporou ABAC přiřaďte role
Container Registry Repository ReaderaContainer Registry Repository Writer:
Trusted Signing Certificate Profile SignerPřiřaďte roli spravované identitě pro přístup k důvěryhodnému podepisování:TS_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 $TS_SCOPE --role "Trusted Signing Certificate Profile Signer"
Nakonfigurujte GitHub tak, aby důvěřoval vaší identitě. Postupujte podle konfigurace spravované identity přiřazené uživatelem, aby důvěřovala externímu poskytovateli identity.
Vytvořte tajné kódy GitHubu podle pokynů k vytvoření tajných kódů pro úložiště.
Namapujte hodnoty spravované identity k těmto tajemstvím:
Tajný kód GitHubu Hodnota spravované identity AZURE_CLIENT_IDID klienta AZURE_SUBSCRIPTION_IDIdentifikátor předplatného AZURE_TENANT_IDID adresáře (klienta)
Uložení kořenového certifikátu TSA
Časové razítko (RFC 3161) rozšiřuje důvěryhodnost podpisů nad rámec doby platnosti podpisového certifikátu. Důvěryhodné podepisování používá krátkodobé certifikáty, takže časové razítko je důležité. Adresa URL serveru pro autoritu časového razítka (TSA) je k dispozici na http://timestamp.acs.microsoft.com/, jak je doporučeno v Časové razítko kontrasignatury.
Stáhněte si kořenový certifikát TSA:
- Uložte kořenový certifikát do úložiště; například
.github/certs/msft-identity-verification-root-cert-authority-2020.crt. V pracovním postupu použijete cestu k souboru.
Vytvoření pracovního postupu GitHub Actions
Pokud
.github/workflowsadresář v úložišti neexistuje, vytvořte ho.Vytvoření nového souboru pracovního postupu; například
.github/workflows/sign-with-trusted-signing.yml.Zkopírujte do souboru následující šablonu podpisového pracovního postupu.
Rozbalením zobrazíte šablonu pracovního postupu podepisování.
# Build and push an image to Azure Container Registry, set up notation, and sign the image
name: notation-github-actions-sign-with-trusted-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-trustedsigning # name of Notation Trusted Signing plug-in; do not change
PLUGIN_DOWNLOAD_URL: <plugin-download-url> # example: "https://github.com/Azure/trustedsigning-notation-plugin/releases/download/v1.0.0-beta.1/notation-azure-trustedsigning_1.0.0-beta.1_linux_amd64.tar.gz"
PLUGIN_CHECKSUM: <plugin-package-checksum> # example: 538b497be0f0b4c6ced99eceb2be16f1c4b8e3d7c451357a52aeeca6751ccb44
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
TS_ACCOUNT_NAME: <trusted-signing-account-name> # Trusted Signing account name
TS_CERT_PROFILE: <trusted-signing-cert-profile-name> # Trusted Signing certificate profile name
TS_ACCOUNT_URI: <trusted-signing-account-uri> # Trusted 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 Trusted 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.TS_CERT_PROFILE }}
target_artifact_reference: ${{ env.target_artifact_reference }}
signature_format: cose
plugin_config: |-
accountName=${{ env.TS_ACCOUNT_NAME }}
baseUrl=${{ env.TS_ACCOUNT_URI }}
certProfile=${{ env.TS_CERT_PROFILE }}
force_referrers_tag: 'false'
Poznámky k proměnným prostředí:
-
PLUGIN_NAME: Vždy používejteazure-trustedsigning. -
PLUGIN_DOWNLOAD_URL: Získejte adresu URL ze stránky vydání modulu Trusted Signing. -
PLUGIN_CHECKSUM: Použijte soubor kontrolního součtu na stránce vydání; napříkladnotation-azure-trustedsigning_<version>_checksums.txt. -
TS_ACCOUNT_URI: Použijte koncový bod pro váš ověřený účet podepisování, specifický pro daný region; napříkladhttps://eus.codesigning.azure.net/.
Aktivace pracovního postupu GitHub Actions
Syntaxe on:push aktivuje ukázkový pracovní postup. Potvrzení změn spustí pracovní postup. Pod názvem úložiště GitHub vyberte Akce a zobrazte protokoly pracovního postupu.
Pracovní postup úspěšně sestaví image, odešle ji do služby Azure Container Registry a podepíše ji pomocí důvěryhodného podepisování. Můžete zobrazit protokoly pracovního postupu a potvrdit, že azure-trustedsigning modul plug-in byl nainstalován a image byla úspěšně podepsána.
Kromě toho můžete registr kontejneru otevřít na webu Azure Portal. Přejděte do úložišť, přejděte na svůj obraz, a poté vyberte odkazující. Ověřte, že jsou uvedeny artefakty (podpisy) typu application/vnd.cncf.notary.signature .