Přenos ACR pomocí Az CLI
Tento článek ukazuje, jak používat funkci ACR Transfer s rozšířením Az CLI acrtransfer.
Dokončení požadavků
Před pokusem o akce v tomto článku dokončete požadavky uvedené zde . To znamená, že:
- V obou cloudech máte existující registr skladové položky Premium.
- V obou cloudech máte existující kontejner účtu úložiště.
- Máte existující keyvault s tajným kódem obsahujícím platný token SAS s potřebnými oprávněními v obou cloudech.
- V obou cloudech máte nainstalovanou nejnovější verzi Az CLI.
Instalace rozšíření Az CLI
V AzureCloudu můžete rozšíření nainstalovat pomocí následujícího příkazu:
az extension add --name acrtransfer
V AzureCloudu a dalších cloudech můžete objekt blob nainstalovat přímo z kontejneru veřejného účtu úložiště. Objekt blob je hostovaný v acrtransferext
účtu úložiště, dist
kontejneru nebo acrtransfer-1.0.0-py2.py3-none-any.wh
objektu blob. Možná budete muset změnit příponu identifikátoru URI úložiště v závislosti na tom, ve kterém cloudu se nacházíte. V AzureCloudu se nainstaluje následující:
az extension add --source https://acrtransferext.blob.core.windows.net/dist/acrtransfer-1.0.0-py2.py3-none-any.whl
Vytvoření ExportPipeline pomocí rozšíření Az CLI pro acrtransfer
Vytvořte prostředek ExportPipeline pro registr kontejneru AzureCloud pomocí rozšíření Az CLI acrtransfer.
Vytvořte kanál exportu bez možností a identitu přiřazenou systémem:
az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer
Vytvořte kanál exportu se všemi možnými možnostmi a identitou přiřazenou uživatelem:
az acr export-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options OverwriteBlobs ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity
Možnosti exportu
options
Vlastnost pro export kanálů podporuje volitelné logické hodnoty. Doporučuje se následující hodnoty:
Parametr | Hodnota |
---|---|
options | PřepsáníBlobs – Přepsání existujících cílových objektů blob ContinueOnErrors – Pokud selže export jednoho artefaktu, pokračujte v exportu zbývajících artefaktů ve zdrojovém registru. |
Udělení přístupu k zásadám služby KeyVault identity ExportPipeline
Pokud jste kanál vytvořili s identitou přiřazenou uživatelem, jednoduše udělte této zásadě přístupu identit secret get
přiřazené uživatelem oprávnění ke službě keyvault.
Pokud jste vytvořili kanál s identitou přiřazenou systémem, budete nejprve muset načíst id objektu zabezpečení, které systém přiřadil vašemu prostředku kanálu.
Spuštěním následujícího příkazu načtěte prostředek kanálu:
az acr export-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline
Z tohoto výstupu principalId
budete chtít zkopírovat hodnotu v poli.
Potom spustíte následující příkaz, který tomuto objektu zabezpečení udělí příslušná secret get
oprávnění zásad přístupu ke službě keyvault.
az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID
Vytvoření ImportPipeline s rozšířením Az CLI acrtransfer
Vytvořte prostředek ImportPipeline v cílovém registru kontejneru pomocí rozšíření Az CLI acrtransfer. Ve výchozím nastavení je kanál povolený tak, aby automaticky vytvořil Import PipelineRun, když připojený kontejner účtu úložiště obdrží nový objekt blob artefaktu.
Vytvořte kanál importu bez možností a identitu přiřazenou systémem:
az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer
Vytvořte kanál importu se všemi možnými možnostmi, zakázaným triggerem zdroje a identitou přiřazenou uživatelem:
az acr import-pipeline create \
--resource-group $MyRG \
--registry $MyReg \
--name $MyPipeline \
--secret-uri https://$MyKV.vault.azure.net/secrets/$MySecret \
--storage-container-uri https://$MyStorage.blob.core.windows.net/$MyContainer \
--options DeleteSourceBlobOnSuccess OverwriteTags ContinueOnErrors \
--assign-identity /subscriptions/$MySubID/resourceGroups/$MyRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$MyIdentity \
--source-trigger-enabled False
Možnosti importu
options
Vlastnost kanálu importu podporuje volitelné logické hodnoty. Doporučuje se následující hodnoty:
Parametr | Hodnota |
---|---|
options | PřepsáníTags – Přepsání existujících cílových značek DeleteSourceBlobOnSuccess – Odstranění objektu blob zdrojového úložiště po úspěšném importu do cílového registru ContinueOnErrors – Pokud selže import jednoho artefaktu, pokračujte v importu zbývajících artefaktů v cílovém registru. |
Udělení přístupu k zásadám služby KeyVault identity ImportPipeline
Pokud jste kanál vytvořili s identitou přiřazenou uživatelem, jednoduše udělte této zásadě přístupu identit secret get
přiřazené uživatelem oprávnění ke službě keyvault.
Pokud jste vytvořili kanál s identitou přiřazenou systémem, budete nejprve muset načíst id objektu zabezpečení, které systém přiřadil vašemu prostředku kanálu.
Spuštěním následujícího příkazu načtěte prostředek kanálu:
az acr import-pipeline show --resource-group $MyRG --registry $MyReg --name $MyPipeline
Z tohoto výstupu principalId
budete chtít zkopírovat hodnotu v poli.
Potom spustíte následující příkaz, který tomuto objektu zabezpečení udělí odpovídající secret get
zásady přístupu ve službě keyvault.
az keyvault set-policy --name $MyKeyvault --secret-permissions get --object-id $MyPrincipalID
Vytvoření pipelineRunu pro export pomocí rozšíření Az CLI acrtransfer
Vytvořte prostředek PipelineRun pro registr kontejneru pomocí rozšíření Az CLI acrtransfer. Tento prostředek spustí prostředek ExportPipeline, který jste vytvořili dříve, a exportuje zadané artefakty z registru kontejneru jako objekt blob do kontejneru účtu úložiště.
Vytvoření exportu spuštění kanálu:
az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type export \
--storage-blob $MyBlob \
--artifacts hello-world:latest hello-world@sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 \
--force-redeploy
Pokud znovu nasadíte prostředek PipelineRun se stejnými vlastnostmi, musíte použít příznak --force-redeploy.
Export artefaktů může trvat několik minut. Po úspěšném dokončení nasazení ověřte export artefaktu výpisem exportovaného objektu blob v kontejneru zdrojového účtu úložiště. Spusťte například příkaz az storage blob list :
az storage blob list --account-name $MyStorageAccount --container $MyContainer --output table
Přenos objektu blob mezi doménou
Ve většině případů použití teď použijete řešení křížové domény nebo jinou metodu k přenosu objektu blob z účtu úložiště ve zdrojové doméně (účet úložiště přidružený k vašemu exportnímu kanálu) do účtu úložiště ve vaší cílové doméně (účet úložiště přidružený k vašemu importnímu kanálu). V tomto okamžiku budeme předpokládat, že objekt blob přišel do cílového účtu úložiště domény přidruženého k vašemu kanálu importu.
Aktivace prostředku ImportPipeline
Pokud jste při vytváření kanálu importu nepoužili --source-trigger-enabled False
parametr, kanál se aktivuje do 15 minut od doručení objektu blob do kontejneru účtu úložiště. Import artefaktů může trvat několik minut. Po úspěšném dokončení importu ověřte import artefaktů výpisem značek v úložišti, které importujete do cílového registru kontejneru. Například spusťte příkaz az acr repository show-tags:
az acr repository show-tags --name $MyRegistry --repository $MyRepository
Poznámka:
Trigger zdroje bude importovat pouze objekty blob, které mají čas poslední změny za posledních 60 dnů. Pokud máte v úmyslu použít trigger zdroje k importu objektů blob starších, aktualizujte čas poslední změny objektů blob přidáním metadat objektů blob nebo je naimportujte pomocí ručně vytvořených spuštění kanálu.
Pokud jste při vytváření importPipeline použili --source-trigger-enabled False
parametr, budete muset ručně vytvořit PipelineRun, jak je znázorněno v následující části.
Vytvoření pipelineRunu pro import pomocí rozšíření Az CLI pro acrtransfer
Vytvořte prostředek PipelineRun pro registr kontejneru pomocí rozšíření Az CLI acrtransfer. Tento prostředek spustí prostředek ImportPipeline, který jste vytvořili dříve, a importuje zadané objekty blob z vašeho účtu úložiště do registru kontejneru.
Vytvoření spuštění kanálu importu:
az acr pipeline-run create \
--resource-group $MyRG \
--registry $MyReg \
--pipeline $MyPipeline \
--name $MyPipelineRun \
--pipeline-type import \
--storage-blob $MyBlob \
--force-redeploy
Pokud znovu nasadíte prostředek PipelineRun se stejnými vlastnostmi, musíte použít příznak --force-redeploy.
Import artefaktů může trvat několik minut. Po úspěšném dokončení importu ověřte import artefaktů výpisem úložišť v cílovém registru kontejneru. Například spusťte příkaz az acr repository show-tags:
az acr repository show-tags --name $MyRegistry --repository $MyRepository
Odstranění prostředků ACR Transfer
Odstraňte exportpipeline:
az acr export-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline
Odstraňte importpipeline:
az acr import-pipeline delete --resource-group $MyRG --registry $MyReg --name $MyPipeline
Odstranění prostředku PipelineRun Všimněte si, že se tím nevrátí akce provedené spuštěním kanálu. To se podobá odstranění protokolu Spuštění kanálu.
az acr pipeline-run delete --resource-group $MyRG --registry $MyReg --name $MyPipelineRun
Řešení potíží s ACR Transferem
Pokyny k řešení potíží najdete v řešení potíží s přenosem ACR.
Další kroky
- Zjistěte, jak blokovat vytváření kanálů exportu z registru kontejnerů s omezeným přístupem k síti.