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 popisuje, jak vytvořit tokeny a mapování oborů pro správu přístupu k úložištím v registru kontejneru. Vytvořením tokenů může vlastník registru poskytovat uživatelům nebo službám s vymezeným oborem, časově omezený přístup k úložištím za účelem vyžádání nebo nabízení imagí nebo provádění dalších akcí. Token poskytuje jemněji odstupňovaná oprávnění než jiné možnosti ověřování registru, které oborují oprávnění pro celý registr.
Poznámka:
K správě oprávnění úložiště bez použití nástroje Microsoft Entra je možné použít tokeny a mapy oborů jiných společností než Microsoft Entra. Pokud chcete spravovat oprávnění úložiště pomocí přiřazení rolí Microsoft Entra pro identity Microsoft Entra, přečtěte si téma Řízení přístupu na základě atributů Microsoft Entra (ABAC) pro oprávnění úložiště.
Mezi běžné scénáře vytvoření tokenu patří:
- Povolte zařízením IoT s jednotlivými tokeny vyžádat image z úložiště.
- Zadejte externí organizaci s oprávněními k cestě k úložišti.
- Omezte přístup úložiště k různým skupinám uživatelů ve vaší organizaci. Můžete například poskytnout vývojářům přístup pro zápis a čtení, kteří vytvářejí image, které cílí na konkrétní úložiště, a přístup ke čtení týmům, které nasazují z těchto úložišť.
Tato funkce je dostupná ve všech úrovních služby. Informace o úrovních a omezeních služby registru najdete v tématu Úrovně služby Azure Container Registry.
Omezení
- Aktuálně nemůžete přiřadit oprávnění specifická pro úložiště identitě Microsoft Entra, jako je služební účet nebo spravovaná identita.
Koncepce
Pokud chcete nakonfigurovat oprávnění v oboru úložiště, vytvoříte token s přidruženou mapou oboru.
Token spolu s vygenerovaným heslem umožňuje uživateli ověřit se v registru. Pro heslo tokenu můžete nastavit datum vypršení platnosti nebo token kdykoli zakázat.
Po ověření pomocí tokenu může uživatel nebo služba provádět jednu nebo více akcí s vymezeným oborem na jedno nebo více úložišť.
Činnost Popis Příklad content/deleteOdebrání dat z úložiště Odstranění úložiště nebo manifestu content/readČtení dat z úložiště Stažení artefaktu content/writeZápis dat do úložiště Použijte s content/readpro protlačení artefaktumetadata/readČtení metadat z úložiště Seznam značek nebo manifestů metadata/writeZápis metadat do úložiště Povolení nebo zakázání operací čtení, zápisu nebo odstranění
Poznámka:
Oprávnění omezená na úložiště nepodporují schopnost zobrazit seznam všech úložišť v registru.
Mapování oboru seskupí oprávnění úložiště, která použijete u tokenu, a může se znovu použít na jiné tokeny. Každý token je přidružený k jedné mapě oboru. Pomocí mapy rozsahu můžete:
- Nakonfigurujte více tokenů s identickými oprávněními pro sadu úložišť.
- Aktualizujte oprávnění tokenu, když přidáte nebo odeberete akce úložiště v mapě rozsahu nebo použijete jinou mapu rozsahu.
Azure Container Registry také poskytuje několik map oborů definovaných systémem, které můžete použít při vytváření tokenů. Oprávnění map oboru definovaných systémem se vztahují na všechna úložiště ve vašem registru. Jednotlivé akce odpovídají limitu úložišť na mapování oboru.
Následující obrázek znázorňuje vztah mezi tokeny a mapami oborů.
Požadavky
-
Azure CLI – Příklady příkazů Azure CLI v tomto článku vyžadují Azure CLI verze 2.17.0 nebo novější. Verzi zjistíte spuštěním příkazu
az --version. Pokud potřebujete instalovat nebo upgradovat, podívejte se na Install Azure CLI. - Docker – K ověření v registru pro vyžádání nebo nabízení imagí potřebujete místní instalaci Dockeru. Docker poskytuje pokyny k instalaci pro systémy macOS, Windows a Linux .
- Registr kontejnerů – Pokud ho nemáte, vytvořte v předplatném Azure registr kontejneru. Použijte například Azure Portal nebo Azure CLI.
Vytvořit token - CLI
Vytvoření tokenu a zadání úložišť
Vytvořte token pomocí příkazu az acr token create . Při vytváření tokenu můžete zadat jedno nebo více úložišť a přidružených akcí pro každé úložiště. Úložiště zatím nemusí být v registru. Pokud chcete vytvořit token zadáním existující mapy oboru, přečtěte si další část.
Následující příklad vytvoří token v registru myregistry s následujícími oprávněními v úložišti samples/hello-world : content/write a content/read. Ve výchozím nastavení nastaví příkaz výchozí stav tokenu enabled na disabled, ale stav můžete kdykoli aktualizovat.
az acr token create --name MyToken --registry myregistry \
--repository samples/hello-world \
content/write content/read \
--output json
Výstup zobrazuje podrobnosti o tokenu. Ve výchozím nastavení se vygenerují dvě hesla, jejichž platnost nevyprší, ale volitelně můžete nastavit datum vypršení platnosti. Doporučujeme uložit hesla na bezpečné místo pro pozdější použití pro ověřování. Hesla se nedají znovu načíst, ale dají se vygenerovat nové.
{
"creationDate": "2023-01-18T00:15:34.066221+00:00",
"credentials": {
"certificates": [],
"passwords": [
{
"creationTime": "2023-01-18T00:15:52.837651+00:00",
"expiry": null,
"name": "password1",
"value": "uH54BxxxxK7KOxxxxRbr26dAs8JXxxxx"
},
{
"creationTime": "2023-01-18T00:15:52.837651+00:00",
"expiry": null,
"name": "password2",
"value": "kPX6Or/xxxxLXpqowxxxxkA0idwLtmxxxx"
}
],
"username": "MyToken"
},
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myresourcegroup/providers/Microsoft.ContainerRegistry/registries/myregistry/tokens/MyToken",
"name": "MyToken",
"objectId": null,
"provisioningState": "Succeeded",
"resourceGroup": "myresourcegroup",
"scopeMapId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myresourcegroup/providers/Microsoft.ContainerRegistry/registries/myregistry/scopeMaps/MyToken-scope-map",
"status": "enabled",
"type": "Microsoft.ContainerRegistry/registries/tokens"
}
Poznámka:
Pokud chcete znovu vygenerovat hesla tokenů a období vypršení platnosti, přečtěte si část Opětovné generování hesel tokenů dále v tomto článku.
Výstup obsahuje podrobnosti o mapě rozsahu, kterou vytvořil příkaz. Mapu oboru zde pojmenovanou MyToken-scope-mapmůžete použít k použití stejných akcí úložiště u jiných tokenů. Nebo později aktualizujte mapu oboru, abyste změnili oprávnění přidružených tokenů.
Vytvoření tokenu a definování mapy rozsahu
Alternativní způsob, jak vytvořit token, je zadat existující mapu rozsahu. Pokud ještě nemáte mapování oboru, nejprve vytvořte ho zadáním úložišť a přidružených akcí. Poté při vytváření tokenu zadejte mapu rozsahu.
K vytvoření mapování oboru použijte příkaz az acr scope-map create . Následující příkaz vytvoří mapování oboru se stejnými oprávněními na úložišti samples/hello-world, které jste použili dříve.
az acr scope-map create --name MyScopeMap --registry myregistry \
--repository samples/hello-world \
content/write content/read \
--description "Sample scope map"
Spusťte příkaz az acr token create za účelem vytvoření tokenu a specifikování mapování oboru MyScopeMap. Stejně jako v předchozím příkladu nastaví příkaz výchozí stav tokenu na enabled.
az acr token create --name MyToken \
--registry myregistry \
--scope-map MyScopeMap
Výstup zobrazuje podrobnosti o tokenu. Ve výchozím nastavení se generují dvě hesla. Doporučujeme uložit hesla na bezpečné místo pro pozdější použití pro ověřování. Hesla se nedají znovu načíst, ale dají se vygenerovat nové.
Poznámka:
Pokud chcete znovu vygenerovat hesla tokenů a období vypršení platnosti, přečtěte si část Opětovné generování hesel tokenů dále v tomto článku.
Jak používat mapy oborů k definování a přiřazování oprávnění pro více úložišť
Mapa rozsahu umožňuje použití zástupného znaku k definování a udělení podobných oprávnění pro více úložišť, která sdílejí společnou předponu. Úložiště s určitými oprávněními a úložiště se zástupným znakem lze také použít ve stejné mapě oboru. To poskytuje flexibilitu při správě oprávnění pro množinu úložišť v jediné kontextové mapě.
Oprávnění úložiště lze vytvořit, když je vytvořena mapa oboru a přiřazena tokenu. Případně můžete token vytvořit a přímo přiřadit k úložišti.
Následující příklad vytvoří mapu rozsahu se zástupným znakem a pak ji přiřadí k tokenu.
az acr scope-map create --name MyScopeMapWildcard --registry myregistry \
--repository samples/* \
content/write content/read \
--description "Sample scope map with wildcards"
az acr token create --name MyTokenWildcard \
--registry myregistry \
--scope-map MyScopeMapWildcard
Následující příklad vytvoří token se zástupným znakem.
az acr token create --name MyTokenWildcard --registry myregistry \
--repository samples/* \
content/write content/read \
Oprávnění se zástupnými čísly jsou doplňková, což znamená, že při přístupu ke konkrétnímu úložišti budou výsledná oprávnění obsahovat oprávnění pro všechna pravidla mapování oboru, která odpovídají předponě zástupného znaku.
V tomto příkladu mapa oboru definuje oprávnění pro tři různé typy úložišť:
| Úložiště | Povolení |
|---|---|
sample/* |
content/read |
sample/teamA/* |
content/write |
sample/teamA/projectB |
content/delete |
Tokenu je mapování oboru přiřazeno k udělení [content/read, content/write, content/delete] oprávnění pro přístup k úložišti sample/teamA/projectB. Pokud se ale stejný token používá pro přístup k úložišti sample/teamA/projectC, má pouze [content/read, content/write] oprávnění.
Důležité
Úložiště používající zástupné znaky v mapě rozsahu musí vždy končit příponou /*, aby byla platná, a mít v názvu úložiště pouze jeden zástupný znak.
Tady je několik příkladů neplatných zástupných znaků:
-
sample/*/teamAse zástupným znakem uprostřed názvu úložiště. -
sample/teamA*se zástupným znakem nekončí na `/*`. -
sample/teamA/*/projectB/*s více zástupnými znaky v názvu úložiště.
Zástupné znaky na kořenové úrovni
Zástupné cardy lze použít také na kořenové úrovni. To znamená, že všechna oprávnění přiřazená k úložišti definovanému jako *, se použijí v celém registru.
Příklad ukazuje, jak vytvořit token se zástupným znakem kořenové úrovně, který udělí oprávnění tokenu [content/read, content/write] všem úložištím v registru. To poskytuje jednoduchý způsob, jak udělit oprávnění všem úložištím v registru, aniž byste museli zadávat jednotlivá úložiště.
az acr token create --name MyTokenWildcard --registry myregistry \
--repository * \
content/write content/read \
Důležité
Pokud pravidlo se zástupným znakem zahrnuje úložiště, které ještě neexistuje, oprávnění pravidla zástupného znaku se na tento název úložiště budou nadále vztahovat.
Například token, který je přiřazený k mapě oboru a uděluje [content/write, metadata/write] oprávnění pro sample/* úložiště.
Předpokládejme také, že sample/teamC/teamCimage úložiště ještě neexistuje.
Token bude mít oprávnění k nahrání obrázků do úložiště sample/teamC/teamCimage, které současně vytvoří úložiště při úspěšném nahrání.
Vytvoření tokenu – portál
Pomocí webu Azure Portal můžete vytvářet tokeny a mapy oborů. Stejně jako u příkazu CLI az acr token create můžete použít existující mapování oboru nebo vytvořit mapování oboru při vytváření tokenu a zadat jedno nebo více úložišť a přidružené akce. Úložiště zatím nemusí být v registru.
Následující příklad vytvoří token a mapu rozsahu s následujícími oprávněními v úložišti samples/hello-world: content/write a content/read.
Na portálu přejděte do registru kontejneru.
V části Oprávnění úložiště vyberte Tokeny > + Přidat.
Zadejte název tokenu.
V části Mapa rozsahu zvolte Vytvořit nový.
Konfigurace mapy oboru:
Zadejte název a popis pro mapu rozsahu.
V části Úložiště zadejte
samples/hello-worlda v části Oprávnění vybertecontent/readacontent/write. Pak vyberte +Přidat.
Po přidání úložišť a oprávnění vyberte Přidat a přidejte mapování oboru.
Přijměte výchozí stav tokenu Povoleno a pak vyberte Vytvořit.
Po ověření a vytvoření tokenu se podrobnosti o tokenu zobrazí na obrazovce Tokens (Tokens ).
Přidání hesla tokenu
Pokud chcete použít token vytvořený na portálu, musíte vygenerovat heslo. Můžete vygenerovat jedno nebo dvě hesla a pro každou z nich nastavit datum vypršení platnosti. Nová hesla vytvořená pro tokeny jsou k dispozici okamžitě. Opětovné vygenerování nových hesel pro tokeny bude trvat 60 sekund, než se replikují a budou k dispozici.
Na portálu přejděte do registru kontejneru.
V části Oprávnění úložiště vyberte Tokeny a vyberte token.
V podrobnostech o tokenu vyberte heslo1 nebo heslo2 a vyberte ikonu Generovat.
Na obrazovce s heslem volitelně nastavte datum vypršení platnosti hesla a vyberte Vygenerovat. Doporučujeme nastavit datum vypršení platnosti.
Po vygenerování hesla ho zkopírujte a uložte do bezpečného umístění. Po zavření obrazovky nemůžete načíst vygenerované heslo, ale můžete vygenerovat nové heslo.
Ověřování pomocí tokenu
Když uživatel nebo služba používá token k ověření v cílovém registru, poskytne název tokenu jako uživatelské jméno a jedno z vygenerovaných hesel.
Metoda ověřování závisí na nakonfigurované akci nebo akcích přidružených k tokenu.
| Činnost | Jak ověřovat přihlašovací údaje |
|---|---|
content/delete |
az acr repository delete v Azure CLIPříklad: az acr repository delete --name myregistry --repository myrepo --username MyToken --password xxxxxxxxxx |
content/read |
docker loginaz acr login v Azure CLIPříklad: az acr login --name myregistry --username MyToken --password xxxxxxxxxx |
content/write |
docker loginaz acr login v Azure CLI |
metadata/read |
az acr repository showaz acr repository show-tagsaz acr manifest list-metadata v Azure CLI |
metadata/write |
az acr repository untagaz acr repository update v Azure CLI |
Příklady: Použití tokenu
Následující příklady používají token vytvořený dříve v tomto článku k provádění běžných operací v úložišti: vložení a vyžádání imagí, odstranění imagí a výpis značek úložiště. Token byl původně nastaven s oprávněními pro push (akce content/write a content/read) v úložišti samples/hello-world.
Stažení a štítkování testovacích obrázků
V následujících příkladech si stáhněte veřejné hello-world a nginx obrázky ze služby Microsoft Container Registry a označte je pro svůj registr a úložiště.
docker pull mcr.microsoft.com/hello-world
docker pull mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
docker tag mcr.microsoft.com/hello-world myregistry.azurecr.io/samples/hello-world:v1
docker tag mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine myregistry.azurecr.io/samples/nginx:v1
Ověřování pomocí tokenu
Spusťte docker login nebo az acr login pro ověření identity v registru a následné nahrání nebo stažení imagí. Zadejte název tokenu jako uživatelské jméno a zadejte jedno z jeho hesel. Token musí mít Enabled stav.
Následující příklad je formátován pro prostředí Bash a poskytuje hodnoty pomocí proměnných prostředí.
TOKEN_NAME=MyToken
TOKEN_PWD=<token password>
echo $TOKEN_PWD | docker login --username $TOKEN_NAME --password-stdin myregistry.azurecr.io
Výstup by měl zobrazit úspěšné ověření:
Login Succeeded
Nahrávání imagí do registru
Po úspěšném přihlášení se pokuste odeslat označené image do registru. Vzhledem k tomu, že token má oprávnění k nahrání obrázků do samples/hello-world úložiště, následující nahrání proběhne úspěšně:
docker push myregistry.azurecr.io/samples/hello-world:v1
Token nemá oprávnění k úložišti samples/nginx, takže pokus o odeslání selže s chybou podobnou requested access to the resource is denied.
docker push myregistry.azurecr.io/samples/nginx:v1
Aktualizace oprávnění tokenu
Pokud chcete aktualizovat oprávnění tokenu, aktualizujte oprávnění v přidružené mapě oboru. Aktualizovaná mapa oboru se použije okamžitě u všech přidružených tokenů.
Aktualizujte MyToken-scope-map pomocí akcí content/write a content/read v úložišti samples/ngnx, a odeberte akci content/write v úložišti samples/hello-world.
Pokud chcete použít Azure CLI, spuštěním příkazu az acr scope-map update aktualizujte mapu oboru:
az acr scope-map update \
--name MyScopeMap \
--registry myregistry \
--add-repository samples/nginx content/write content/read \
--remove-repository samples/hello-world content/write
Na webu Azure Portal:
- Přejděte do registru kontejneru.
- V části Oprávnění úložiště vyberte Mapy oborů a vyberte mapu oboru, kterou chcete aktualizovat.
- V části Úložiště zadejte
samples/nginxa v části Oprávnění vybertecontent/readacontent/write. Pak vyberte +Přidat. - V části Úložiště vyberte
samples/hello-worlda v části Oprávnění zrušte výběrcontent/write. Pak vyberte Uložit.
Po aktualizaci mapy rozsahu se následující odeslání podaří.
docker push myregistry.azurecr.io/samples/nginx:v1
Vzhledem k tomu, že mapa rozsahu má oprávnění pouze k content/read v samples/hello-world úložišti, pokus o odeslání do úložiště samples/hello-world nyní selže:
docker push myregistry.azurecr.io/samples/hello-world:v1
Načtení imagí z obou úložišť proběhne úspěšně, protože mapa oboru poskytuje content/read oprávnění pro obě úložiště:
docker pull myregistry.azurecr.io/samples/nginx:v1
docker pull myregistry.azurecr.io/samples/hello-world:v1
Smazat obrázky
Aktualizujte mapu oboru přidáním content/delete akce do nginx úložiště. Tato akce umožňuje odstranění imagí v úložišti nebo odstranění celého úložiště.
Pro stručnost zobrazujeme pouze příkaz az acr scope-map update k aktualizaci mapy oboru:
az acr scope-map update \
--name MyScopeMap \
--registry myregistry \
--add-repository samples/nginx content/delete
Pokud chcete mapování oboru aktualizovat pomocí portálu, přečtěte si předchozí část.
K odstranění úložiště použijte následující příkaz az acr repository deletesamples/nginx. Pokud chcete odstranit image nebo úložiště, předejte do příkazu název a heslo tokenu. Následující příklad používá proměnné prostředí vytvořené dříve v článku:
az acr repository delete \
--name myregistry --repository samples/nginx \
--username $TOKEN_NAME --password $TOKEN_PWD
Zobrazení značek úložiště
Aktualizujte mapu oboru přidáním metadata/read akce do hello-world úložiště. Tato akce umožňuje čtení dat manifestu a značek v úložišti.
Pro stručnost zobrazujeme pouze příkaz az acr scope-map update k aktualizaci mapy oboru:
az acr scope-map update \
--name MyScopeMap \
--registry myregistry \
--add-repository samples/hello-world metadata/read
Pokud chcete mapování oboru aktualizovat pomocí portálu, přečtěte si předchozí část.
Pokud chcete číst metadata v samples/hello-world úložišti, spusťte příkaz az acr manifest list-metadata nebo az acr repository show-tags .
Pokud chcete číst metadata, předejte název a heslo tokenu každému z příkazů. Následující příklad používá proměnné prostředí vytvořené dříve v článku:
az acr repository show-tags \
--name myregistry --repository samples/hello-world \
--username $TOKEN_NAME --password $TOKEN_PWD
Ukázkový výstup:
[
"v1"
]
Správa tokenů a map oborů
Mapy rozsahu seznamu
Pomocí příkazu az acr scope-map list nebo obrazovky Mapy oborů na portálu zobrazte seznam všech map oborů nakonfigurovaných v registru. Například:
az acr scope-map list \
--registry myregistry --output table
Výstup se skládá ze tří map oboru definovaných systémem a dalších map oborů generovaných vámi. Tokeny je možné nakonfigurovat s libovolnou z těchto map oboru.
NAME TYPE CREATION DATE DESCRIPTION
------------------- ------------- -------------------- ------------------------------------------------------------
_repositories_admin SystemDefined 2023-01-20T09:44:24Z Can perform all read, write and delete operations on the ...
_repositories_pull SystemDefined 2023-01-20T09:44:24Z Can pull any repository of the registry
_repositories_push SystemDefined 2023-01-20T09:44:24Z Can push to any repository of the registry
MyScopeMap UserDefined 2022-11-15T21:17:34Z Sample scope map
Zobrazení podrobností o tokenu
Pokud chcete zobrazit podrobnosti o tokenu, například stav a data vypršení platnosti hesla, spusťte příkaz az acr token show nebo vyberte token na obrazovce Tokens na portálu. Například:
az acr scope-map show \
--name MyScopeMap --registry myregistry
Pomocí příkazu az acr token list nebo obrazovky Tokens na portálu zobrazte seznam všech tokenů nakonfigurovaných v registru. Například:
az acr token list --registry myregistry --output table
Opětovné generování hesel tokenů
Pokud jste nevygenerovali heslo tokenu nebo chcete vygenerovat nová hesla, spusťte příkaz az acr token credential generate . Opětovné vygenerování nových hesel pro tokeny bude trvat 60 sekund, než se replikují a budou k dispozici.
Následující příklad vygeneruje novou hodnotu pro heslo1 pro token MyToken s obdobím vypršení platnosti 30 dnů. Uloží heslo do proměnné prostředí TOKEN_PWD. Tento příklad je naformátovaný pro prostředí Bash.
TOKEN_PWD=$(az acr token credential generate \
--name MyToken --registry myregistry --expiration-in-days 30 \
--password1 --query 'passwords[0].value' --output tsv)
Pokud chcete k vygenerování hesla tokenu použít Azure Portal, projděte si kroky v části Vytvoření tokenu – portál výše v tomto článku.
Aktualizace tokenu s novou mapou oboru
Pokud chcete token aktualizovat pomocí jiného mapování oboru, spusťte příkaz az acr token update a zadejte nové mapování oboru. Například:
az acr token update --name MyToken --registry myregistry \
--scope-map MyNewScopeMap
Na portálu na obrazovce Tokeny vyberte token a v části Mapa oboru vyberte jinou mapu oboru.
Návod
Po aktualizaci tokenu pomocí nové mapy oboru můžete chtít vygenerovat nová hesla tokenů. Použijte příkaz az acr token credential generate nebo vygenerujte heslo tokenu na webu Azure Portal.
Zakázání nebo odstranění tokenu
Možná budete muset dočasně zakázat použití přihlašovacích údajů tokenu pro uživatele nebo službu.
Pomocí Azure CLI spusťte příkaz az acr token update a nastavte na status :disabled
az acr token update --name MyToken --registry myregistry \
--status disabled
Na portálu vyberte token na obrazovce Tokeny a v části Stav zvolte Zakázáno.
Pokud chcete odstranit token, který trvale zneplatní přístup kýmkoli pomocí svých přihlašovacích údajů, spusťte příkaz az acr token delete .
az acr token delete --name MyToken --registry myregistry
Na portálu vyberte token na obrazovce Tokeny a vyberte Zahodit.
Další kroky
- Ke správě map oborů a tokenů použijte další příkazy ve skupinách příkazů az acr scope-map a az acr token .
- Další možnosti ověřování v registru kontejneru Azure, včetně použití identity Microsoft Entra, instančního objektu nebo účtu správce, najdete v přehledu ověřování .
- Přečtěte si o připojených registrech a používání tokenů pro přístup.