Podepsání a ověření image kontejneru pomocí notace v Azure Pipeline
Úloha zápisu v Azure DevOps je integrovaná úloha pro podepisování a ověřování imagí kontejnerů a dalších artefaktů Open Container Initiative (OCI) v rámci azure Pipeline. Úloha zápisu používá k provedení těchto operací rozhraní příkazového řádku notace, aby artefakty byly podepsány důvěryhodnou entitou a nebyly manipulovány od jejich vytvoření.
Tento článek vás provede vytvořením kanálu Azure, který sestaví image kontejneru, vloží ji do ACR a přidá podpisy pomocí notace a modulu plug-in Azure Key Vault poskytující vrstvu zabezpečení a integrity artefaktů. Cílem kanálu je:
- Sestavte image kontejneru a nasdílíte ji do služby Azure Container Registry (ACR).
- Podepište image pomocí modulu plug-in Notation and Notation Azure Key Vault. Podpis se pak automaticky odešle do ACR.
Požadavky
- Vytvořte ve službě Azure Key Vault službu Key Vault a vygenerujte podpisový klíč a certifikát podepsaný svým držitelem. Tento dokument můžete použít k vytvoření klíče podepsaného svým držitelem a certifikátu pro účely testování. Pokud máte certifikát vydaný certifikační autoritou, projděte si podrobnosti v tomto dokumentu .
- Vytvořte registr ve službě Azure Container Registry (ACR).
- Ujistěte se, že máte úložiště Azure DevOps nebo úložiště GitHub.
Vytvoření Připojení služby
Vytvořte připojení služby ve službě Azure Pipelines, které kanálu umožňuje přístup k externím službám, jako je Azure Container Registry (ACR), můžete postupovat takto:
Podepište image ve službě Azure Container Registry (ACR) pomocí přihlašovacích údajů ACR.
Pomocí úlohy Dockeru ve službě Azure Pipelines se přihlaste k ACR. Úloha Dockeru je integrovaná úloha ve službě Azure Pipelines, která umožňuje mimo jiné vytvářet, odesílat a stahovat image Dockeru.
Vytvořte připojení služby Docker Registry ve službě Azure Pipeline pro udělení přístupu k vašemu registru ACR následujícím způsobem:
- Přihlaste se ke své organizaci (
https://dev.azure.com/{yourorganization}
) a vyberte svůj projekt. - V levém dolním rohu vyberte tlačítko Nastavení.
- Přejděte na Kanály a pak vyberte Připojení ke službě.
- Zvolte Nové připojení služby a vyberte Registr Dockeru.
- Pak zvolte Azure Container Registry.
- V typu ověřování zvolte instanční objekt a zadejte podrobnosti o instančním objektu, včetně vašeho předplatného Azure a registru ACR.
- Zadejte uživatelsky přívětivý název Připojení, který se má použít při odkazování na toto připojení služby.
- Přihlaste se ke své organizaci (
Vytvořte připojení služby Azure Resource Manager ve službě Azure Pipelines pro autorizaci přístupu ke službě Azure Key Vault:
- Zvolte instanční objekt (automatický).
- V dalším kroku zvolte Předplatné a v rozevíracím seznamu vyhledejte své předplatné Azure.
- V rozevíracím seznamu vyberte dostupnou skupinu prostředků.
- Zadejte uživatelsky přívětivý název připojení služby, který se má použít při odkazech na toto připojení služby.
- Uložte ho a dokončete vytvoření.
Pomocí následujícího postupu udělte zásadám přístupu instančnímu objektu:
- Otevřete vytvořené připojení služby Azure Resource Manager a kliknutím na Spravovat instanční objekt zadejte portál instančního objektu Azure.
- Zkopírujte soubor
Application (client) ID
. Použije se k udělení oprávnění pro instanční objekt. - Otevřete portál služby Azure Key Vault a zadejte stránku Zásady přístupu.
- Vytvořte novou zásadu přístupu s oprávněním a
certificate get
s oprávněními.key sign
secret get
- Udělte tuto novou zásadu přístupu k instančnímu objektu
Application (client) ID
pomocí vložení z předchozího kroku. - Uložte ho a dokončete vytvoření.
Další informace o připojení služby najdete tady.
Vytvoření kanálu a použití úlohy Notation
Následujícím postupem vytvořte pro úložiště Git kanál Azure:
- Přejděte na projekt ve vaší organizaci AOD.
- V nabídce vlevo přejděte na Kanály a pak vyberte Nový kanál.
- Zvolte úložiště Git. K předvedení pohodlí používáme úložiště Azure DevOps.
- Pokud s Azure DevOps začínáte, nakonfigurujte kanál s počátečním kanálem. Kanál zkontrolujte a vytvořte kliknutím na Uložit a spustit.
Poznámka:
Příklad předpokládá, že výchozí větev je main
. Pokud tomu tak není, aktualizujte výchozí větev podle průvodce .
Úlohy zápisu můžete přidat dvěma způsoby úpravou kanálu Azure:
Použijte panel Azure DevOps (ADO): Panel ADO poskytuje uživatelské rozhraní, ve kterém můžete do kanálu přidávat úkoly. Pomocí tohoto rozhraní můžete vyhledat úlohy notace a přidat je do kanálu.
Zkopírujte z ukázkového souboru kanálu Azure: Pokud máte ukázkový soubor kanálu Azure, který už obsahuje úlohy zápisu, můžete tyto úlohy zkopírovat z ukázkového souboru a vložit je do souboru kanálu.
Možnost 1: Použití panelu pro úpravy Azure DevOps (ADO)
Docker
Vyhledejte úlohu z panelu pro úpravy kanálu na pravé straně. K ověření pomocí ACR použijte jeho login
příkaz s připojením ke službě Registr Dockeru.
- V rozevíracím seznamu Registr kontejneru zvolte připojení služby Docker Registry vytvořené v předchozím kroku.
- Vyberte
login
z rozevíracího seznamu Příkaz . - Kliknutím na Přidat přidáte úlohu Dockeru s příkazem
login
do souboru kanálu vlevo.
Podobně znovu vyhledejte Docker
úlohu z panelu pro úpravy kanálu. Pomocí příkazu buildAndPush
automaticky sestavte zdrojový kód do image a nasdílíte ho do cílového úložiště ACR. Vygeneruje se hodnota hash obrázku, která se použije k přihlášení v dalším kroku.
- Zadejte název úložiště do úložiště kontejneru.
- V rozevíracím seznamu Command zvolte buildAndPush.
- Zadejte cestu k souboru souboru Dockerfile. Použijte
./Dockerfile
například, pokud je váš soubor Dockerfile uložený v kořenové složce. - Kliknutím na Přidat přidáte úlohu Dockeru s příkazem
buildAndPush
do souboru kanálu vlevo.
Notation
Vyhledejte úlohu z panelu pro úpravy kanálu na pravé straně.
- V rozevíracím seznamu zvolte Nainstalovat, který chcete spustit.
- Kliknutím na Přidat přidáte
notation install
úlohu do kanálu. - Podobně znovu vyhledejte
Notation
úlohu na panelu pro úpravy kanálu a zvolte Podepsat. - Odkazy na artefakty můžete přeskočit, protože podepíšeme image pomocí nejnovějšího přehledu, který je sestavený a vložený do registru úlohou Dockeru. Místo toho můžete ručně zadat hodnotu hash pomocí
<registry_host>/<repository>@<digest>
. - Vyplňte konfiguraci modulu plug-in ve formuláři. Použijeme výchozí modul plug-in AKV a připojení služby vytvořené v předchozím kroku. Zkopírujte ID klíče z AKV do ID klíče.
- Zaškrtněte políčko Certifikát podepsaný svým držitelem, protože pro demonstrační pohodlí používáme certifikát podepsaný svým držitelem. Místo toho můžete cestu k souboru certifikátu zadat do cesty k souboru sady certifikátů, pokud chcete použít certifikát vystavený certifikační autoritou.
- Kliknutím na Přidat přidáte
notation sign
soubor kanálu doleva.
Možnost 2: Úprava ukázkového souboru kanálu Azure
- Pokud znáte Službu Azure Pipelines a zápis, je efektivní začít se souborem kanálu šablony.
- Zkopírujte šablonu kanálu poskytnutou v dokumentu do vlastního souboru kanálu. Tato šablona je navržená tak, aby používala úlohy notace, které slouží k podepisování a ověřování imagí kontejneru.
- Po zkopírování šablony vyplňte požadované hodnoty podle odkazů a komentářů uvedených níže.
Podívejte se na šablonu podpisového úkolu možnosti 1 (klikněte sem).
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
# log in to registry
- task: Docker@2
inputs:
containerRegistry: <your_docker_registry_service_connection>
command: 'login'
# build and push artifact to registry
- task: Docker@2
inputs:
repository: <your_repository_name>
command: 'buildAndPush'
Dockerfile: './Dockerfile'
# install notation
- task: Notation@0
inputs:
command: 'install'
version: '1.1.0'
# automatically detect the artifact pushed by Docker task and sign the artifact.
- task: Notation@0
inputs:
command: 'sign'
plugin: 'azureKeyVault'
akvPluginVersion: <azure_key_vault_plugin_version>
azurekvServiceConection: <your_akv_service_connection>
keyid: <your_key_id>
selfSigned: true
Poznámka:
Kromě použití úlohy Dockeru můžete podepsat zadanou hodnotu hash image ručním zadáním odkazu na artifactRefs
artefakt následujícím způsobem.
Podívejte se na příklad (klikněte sem).
# sign the artifact
- task: Notation@0
inputs:
artifactRefs: '<registry_host>/<repository>@<digest>'
command: 'sign'
plugin: 'azureKeyVault'
akvPluginVersion: <azure_key_vault_plugin_version>
azurekvServiceConection: <akv_service_connection>
keyid: <key_id>
selfSigned: true
Aktivace kanálu
Podle kroků spusťte kanál v Azure DevOps a ověřte jeho spuštění.
- Po vyplnění vstupů v kanálu uložte a spusťte ho, aby se aktivoval kanál.
- Přejděte na stránku Úlohy spuštěného kanálu. Tady vidíte provádění jednotlivých kroků. Tento kanál sestaví a podepíše nejnovější build nebo zadanou hodnotu hash a potom odešle podepsanou image spolu s jeho přidruženým podpisem do registru.
- Po úspěšném spuštění uvidíte image vloženou do služby Azure Container Registry (ACR) s připojeným podpisem formátu CBOR Object Signing and Encryption (COSE).
Ověření podepsané image
Podobně můžete k ověření podepsané image použít panel pro úpravy nebo upravit soubor kanálu a přidat do kanálu úlohu zápisu verify
. Kanál ověří podepsanou image pomocí zásad důvěryhodnosti a úložiště důvěryhodnosti, které jste zadali.
Příprava zásad důvěryhodnosti notace a úložiště důvěryhodnosti
Obecně platí, že ověřovatel se liší od podepisující osoby. Pro demonstrační účely používáme stejný kanál a úložiště ADO v této ukázce. Postupujte podle následujících kroků a vytvořte zásady důvěryhodnosti notace, úložiště důvěryhodnosti a přidejte verify
úlohu do kanálu:
- V aktuálním úložišti ADO vytvořte ukázkovou složku
.pipeline
pro uložení zásad.pipeline/trustpolicy/
důvěryhodnosti notace . Vytvořte ukázkový soubortrustpolicy.json
JSON zásad důvěryhodnosti . Vyplňte šablonu zásad důvěryhodnosti vlastními hodnotami a uložte ji do složky.
Poznámka:
Všimněte si, že úložiště důvěryhodnosti notation v současné době podporuje tři druhy identit, včetně kořenových certifikátů certifikační autority (CA), SigningAuthority a TSA (Time Stamping Authority). Pro demonstrační účely používáme certifikační autoritu (CA) x509/ca
v zásadách důvěryhodnosti a úložišti důvěryhodnosti níže. Podrobnosti najdete v úložišti důvěryhodnosti.
Podívejte se na šablonu zásad důvěryhodnosti (klikněte sem).
{
"version": "1.0",
"trustPolicies": [
{
"name": "<yourPolicyName>",
"registryScopes": [ "<yourRegistry>.azurecr.io/<yourArtifact>" ],
"signatureVerification": {
"level" : "strict"
},
"trustStores": [ "ca:<yourTrustStore>"],
"trustedIdentities": [
"*"
]
}
]
}
- V aktuálním úložišti ADO vytvořte novou složku pro úložiště důvěryhodnosti Notation pro uložení
/.pipeline/truststore/x509/ca/$<yourTrustStore>/
certifikátu. Pokud jste postupovali podle pokynů pro podepsání image v tomto dokumentu, stáhněte si pomocí následujícího příkazu certifikát podepsaný svým držitelem ze služby Azure Key Vault (AKV):
KEY_NAME=<key_name_you_picked_when_creating_the_key>
AKV_NAME=<akv_name_where_certificate_is_stored>
CERT_ID=$(az keyvault certificate show -n $KEY_NAME --vault-name $AKV_NAME --query 'id' -o tsv)
CERT_PATH=./${KEY_NAME}.pem
az keyvault certificate download --file $CERT_PATH --id $CERT_ID --encoding PEM
- Nahrajte certifikát do složky
/.pipeline/truststore/x509/ca/$<yourTrustStore>/
úložiště důvěryhodnosti, kterou jsme vytvořili v posledním kroku.
Přidání úlohy ověření zápisu
- Znovu na panelu pro úpravy kanálu vyhledejte úlohu Notation a zvolte Ověřit.
- Vyplňte odkazy na artefakty hodnotou hash podepsaného obrázku.
- Zadejte hodnotu
.pipeline/trustpolicy/trustpolicy.json
do cesty k souboru zásad důvěryhodnosti. - Zadejte hodnotu
.pipeline/truststore/
do cesty ke složce úložiště důvěryhodnosti. - Kliknutím na Přidat přidáte ověření zápisu do souboru kanálu vlevo.
Vaše notation verify
bude uložena následujícím způsobem.
Podívejte se na příklad (klikněte sem).
# sign the artifact
- task: Notation@0
inputs:
command: 'verify'
artifactRefs: '<registry_host>/<repository>@<digest>'
trustPolicy: .pipeline/trustpolicy.json
trustStore: .pipeline/truststore/
Aktivace kanálu (aktualizováno)
Kanál můžete znovu aktivovat a ověřit podepsanou image. Po úspěšném spuštění se protokoly zobrazí na stránce Úlohy spuštěného kanálu. Kanál ověří podepsanou image pomocí zásad důvěryhodnosti a úložiště důvěryhodnosti, které jste zadali.
Závěr
V tomto článku se dozvíte, jak podepsat a ověřit image kontejneru pomocí notace ve službě Azure Pipeline. K přidání úloh zápisu do kanálu můžete použít panel Azure DevOps nebo upravit soubor kanálu. Kanál vytvoří, odešle, podepíše a ověří image pomocí zásad důvěryhodnosti a úložiště důvěryhodnosti, které jste zadali. Tento proces zajišťuje, že artefakty jsou podepsány důvěryhodnou entitou a nebyly manipulovány od jejich vytvoření.