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.
Tuto příručku můžete použít ve dvou scénářích:
- Využívání podepsaných imagí: Pomocí Notation a Důvěryhodného podepisování ověřte image kontejnerů, které už podepsaly jiné týmy nebo organizace.
- Ověření vlastních imagí: Pokud publikujete obrázky sami, nejdřív je podepište pomocí pracovního postupu GitHubu nebo rozhraní příkazového řádku notace (CLI). Pak podle tohoto průvodce ověřte podpisy.
V tomto článku se naučíte:
- Nakonfigurujte pracovní postup GitHubu.
- Ověřte, že obrazy kontejnerů byly podepsány pomocí důvěryhodného podepisování a GitHub Actions pro Notaci.
Požadavky
- Registr kontejnerů, který obsahuje podepsané obrazy.
- Úložiště GitHubu pro ukládání souboru pracovního postupu, zásad důvěryhodnosti a úložiště důvěryhodnosti.
Ověřování z Azure na GitHub
Podle použití GitHub Actions pro připojení k Azure musíte před spuštěním příkazů Azure CLI nebo Azure PowerShellu nejprve provést ověření v Azure ve vašem pracovním postupu pomocí akce Přihlášení k Azure. 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 registrů, které nejsou povolené pomocí řízení přístupu na základě atributů (ABAC), přiřaďte
AcrPullroli: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
Container Registry Repository Readerroli:
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)
Příprava úložiště důvěryhodných certifikátů a politiky důvěryhodnosti
Ověření vyžaduje, aby úložiště důvěry notářského projektu a zásady důvěry byly uloženy v úložišti.
Vytvořte úložiště důvěryhodnosti
Úložiště důvěryhodných certifikátů (.github/truststore/) obsahuje certifikáty certifikační autority (CA) a kořenové certifikáty TSA (Time Stamp Authority), které jsou potřeba k ověření.
Stáhněte důvěryhodný kořenový certifikát a uložte ho do ca adresáře:
curl -o .github/truststore/x509/ca/mycerts/msft-identity-verification-root-cert-2020.crt \
"https://www.microsoft.com/pkiops/certs/Microsoft%20Enterprise%20Identity%20Verification%20Root%20Certificate%20Authority%202020.crt"
Stáhněte kořenový certifikát TSA důvěryhodného podepisování a uložte ho tsa do adresáře:
curl -o .github/truststore/x509/tsa/mytsacerts/msft-identity-verification-tsa-root-cert-2020.crt \
"http://www.microsoft.com/pkiops/certs/microsoft%20identity%20verification%20root%20certificate%20authority%202020.crt"
Vytvoření zásady důvěryhodnosti
Zásady důvěryhodnosti (.github/trustpolicy/trustpolicy.json) definují, které identity a certifikační autority jsou důvěryhodné.
Tady je příklad trustpolicy.json. Nahraďte identifikátory URI úložiště, názvy úložišť důvěryhodných certifikátů a předmět profilu důvěryhodného podpisového certifikátu hodnotami.
{
"version": "1.0",
"trustPolicies": [
{
"name": "mypolicy",
"registryScopes": [ "myregistry.azurecr.io/myrepo1","myregistry.azurecr.io/myrepo2" ],
"signatureVerification": {
"level" : "strict"
},
"trustStores": [ "ca:mycerts", "tsa:mytsacerts" ],
"trustedIdentities": [
"x509.subject: C=US, ST=WA, L=Seattle, O=MyCompany.io, OU=Tools"
]
}
]
}
Potvrďte adresářovou strukturu.
Úložiště by mělo vypadat jako v tomto příkladu:
.github/
├── trustpolicy/
│ └── trustpolicy.json
└── truststore/
└── x509/
├── ca/
│ └── mycerts/
│ └── msft-identity-verification-root-cert-2020.crt
└── tsa/
└── mytsacerts/
└── msft-identity-verification-tsa-root-cert-2020.crt
Vytvoření pracovního postupu GitHub Actions
Až bude konfigurace ověřování a důvěryhodnosti připravená, vytvořte pracovní postup:
Vytvořte v úložišti adresář
.github/workflows, pokud ještě neexistuje.Vytvoření nového souboru pracovního postupu; například
verify-with-trusted-signing.yml.Zkopírujte do souboru následující šablonu pracovního postupu.
Rozbalením zobrazíte šablonu pracovního postupu ověření.
name: notation-verify-with-trusted-signing on: push: env: ACR_LOGIN_SERVER: <registry-name>.azurecr.io # example: myRegistry.azurecr.io ACR_REPO_NAME: <repository-name> # example: myRepo IMAGE_TAG: <image-tag> # example: v1 #IMAGE_DIGEST: <image-digest> # example: sha256:xxx jobs: notation-verify: runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v3 # 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 }} # Set up the Notation CLI - name: setup notation uses: notaryproject/notation-action/setup@v1.2.2 # Verify the OCI artifact, such as container images - name: verify OCI artifact uses: notaryproject/notation-action/verify@v1 with: target_artifact_reference: ${{ env.ACR_LOGIN_SERVER }}/${{ env.ACR_REPO_NAME }}:${{ env.IMAGE_TAG }} # Alternatively, use the image digest # target_artifact_reference: ${{ env.ACR_LOGIN_SERVER }}/${{ env.ACR_REPO_NAME }}@${{ env.IMAGE_DIGEST }} trust_policy: .github/trustpolicy/trustpolicy.json trust_store: .github/truststoreAktualizujte proměnné prostředí vlastním registrem, úložištěm a značkou/otiskem obrazu. Uložte a potvrďte soubor.
Aktivace pracovního postupu GitHub Actions
Push notifikace aktivuje vzorový pracovní postup. Pokud chcete úlohu spustit, potvrďte soubor pracovního postupu do úložiště.
Můžete zobrazit protokoly pracovního postupu a potvrdit, že úloha byla úspěšně dokončena. Zkontrolujte například import zásad důvěryhodnosti, načtou se certifikáty z úložiště důvěryhodnosti a ověří se podpis.