Vytvoření tokenu s oprávněními v oboru úložiště
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.
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í v oboru úložiště identitě Microsoft Entra, jako je instanční objekt nebo spravovaná identita.
Koncepty
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šť.
Akce Popis Příklad content/delete
Odebrá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/write
Zápis dat do úložiště content/read
Použití s k nasdílení artefaktumetadata/read
Čtení metadat z úložiště Výpis značek nebo manifestů metadata/write
Zápis metadat do úložiště Povolení nebo zakázání operací čtení, zápisu nebo odstranění
Poznámka:
Oprávnění v oboru úložiště nepodporují možnost vypsat katalog 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šť.
- Aktualizovat oprávnění tokenu, když přidáte nebo odeberete akce úložiště v mapě oboru nebo použijete jinou mapu oboru.
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 instalaci nebo upgrade, přečtěte si téma Instalace 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ření tokenu – rozhraní příkazového řádku
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 disabled
na enabled
, 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": "2020-01-18T00:15:34.066221+00:00",
"credentials": {
"certificates": [],
"passwords": [
{
"creationTime": "2020-01-18T00:15:52.837651+00:00",
"expiry": null,
"name": "password1",
"value": "uH54BxxxxK7KOxxxxRbr26dAs8JXxxxx"
},
{
"creationTime": "2020-01-18T00:15:52.837651+00:00",
"expiry": null,
"name": "password2",
"value": "kPX6Or/xxxxLXpqowxxxxkA0idwLtmxxxx"
}
],
"username": "MyToken"
},
"id": "/subscriptions/xxxxxxxx-adbd-4cb4-c864-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerRegistry/registries/myregistry/tokens/MyToken",
"name": "MyToken",
"objectId": null,
"provisioningState": "Succeeded",
"resourceGroup": "myresourcegroup",
"scopeMapId": "/subscriptions/xxxxxxxx-adbd-4cb4-c864-xxxxxxxxxxxx/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 mapování oboru vytvořeného příkazu. Mapu oboru zde pojmenovanou MyToken-scope-map
můž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 určení mapování oboru
Alternativní způsob, jak vytvořit token, je zadat existující mapování oboru. Pokud ještě nemáte mapování oboru, nejprve vytvořte ho zadáním úložišť a přidružených akcí. Pak při vytváření tokenu zadejte mapování oboru.
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 k úložišti, které samples/hello-world
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"
Spuštěním příkazu az acr token create vytvořte token a zadejte 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 oboru umožňuje použití zástupného znaku definovat a udělit podobná 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 lze úložiště se zástupným znakem použít také ve stejné mapě oboru. To poskytuje flexibilitu při správě oprávnění pro více sad úložišť v jediné mapě oboru.
Oprávnění úložiště je možné vytvořit při vytvoření mapování oboru a přiřazení k tokenu. Případně můžete token vytvořit a přímo přiřadit k úložišti.
Následující příklad vytvoří mapování oboru se zástupným znakem a pak ho přiřadí 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šť:
Repository | Oprávnění |
---|---|
sample/* |
content/read |
sample/teamA/* |
content/write |
sample/teamA/projectB |
content/delete |
Token je přiřazen mapování oboru pro udělení [content/read, content/write, content/delete]
oprávnění pro přístup k úložišti sample/teamA/projectB
. Pokud se ale pro přístup sample/teamA/projectC
k úložišti používá stejný token, má [content/read, content/write]
oprávnění pouze.
Důležité
Úložiště používající zástupné znaky v mapě oboru by měla vždy končit příponou /*
, která má být platná a mít v názvu úložiště jeden zástupný znak.
Tady je několik příkladů neplatných zástupných znaků:
sample/*/teamA
se zástupným znakem uprostřed názvu úložiště.sample/teamA*
se zástupným znakem nekončí znakem /*.sample/teamA/*/projectB/*
s více zástupnými cardy v názvu úložiště.
Zástupné kóty 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 přiřazený k mapě oboru, který 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 nasdílení imagí do úložiště sample/teamC/teamCimage
, které současně vytvoří úložiště při úspěšném nasdílení změn.
Vytvoření tokenu – portál
Pomocí webu Azure Portal můžete vytvářet tokeny a mapy oborů. Stejně jako u příkazu rozhraní příkazového az acr token create
řádku můžete použít existující mapování oboru nebo vytvořit mapování oboru při vytváření tokenu zadáním jednoho nebo více úložišť a přidružených akcí. Úložiště zatím nemusí být v registru.
Následující příklad vytvoří token a vytvoří mapování oboru s následujícími oprávněními v samples/hello-world
úložišti: 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 oboru vyberte Vytvořit nový.
Konfigurace mapy oboru:
Zadejte název a popis mapování oboru.
V části Úložiště zadejte
samples/hello-world
a v části Oprávnění vybertecontent/read
acontent/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.
Akce | Ověření |
---|---|
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 login az acr login v Azure CLIPříklad: az acr login --name myregistry --username MyToken --password xxxxxxxxxx |
content/write |
docker login az acr login v Azure CLI |
metadata/read |
az acr repository show az acr repository show-tags az acr manifest list-metadata v Azure CLI |
metadata/write |
az acr repository untag az 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 push (content/write
a content/read
akcemi) v samples/hello-world
úložišti.
Vyžádání a označení testovacích obrázků
V následujících příkladech si stáhněte veřejné hello-world
image a nginx
image 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
Spuštěním docker login
nebo az acr login
ověřením v registru za účelem nasdílení nebo vyžádání 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 nasdílení imagí do samples/hello-world
úložiště, následující nasdílení změ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 následující pokus o nabízení 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
content/write
například pomocí a content/read
akcí v samples/ngnx
úložišti a odeberte content/write
akci v samples/hello-world
úložišti.
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 mapování oboru, které chcete aktualizovat.
- V části Úložiště zadejte
samples/nginx
a v části Oprávnění vybertecontent/read
acontent/write
. Pak vyberte +Přidat. - V části Úložiště vyberte
samples/hello-world
a v části Oprávnění zrušte výběrcontent/write
. Pak vyberte Uložit.
Po aktualizaci mapy oboru se následující nasdílení změn podaří:
docker push myregistry.azurecr.io/samples/nginx:v1
Vzhledem k tomu, že mapování oboru má content/read
oprávnění pouze v samples/hello-world
úložišti, pokus o vložení do samples/hello-world
úložiště teď 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
Odstranění imagí
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 oborů 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. Pří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 2020-01-20T09:44:24Z Can perform all read, write and delete operations on the ...
_repositories_pull SystemDefined 2020-01-20T09:44:24Z Can pull any repository of the registry
_repositories_push SystemDefined 2020-01-20T09:44:24Z Can push to any repository of the registry
MyScopeMap UserDefined 2019-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. Pří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. Pří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é TOKEN_PWD
prostředí . 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 pomocí nové mapy 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. Pří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.
Tip
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 Tokens (Tokens) a v části Stav vyberte Disabled (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 Tokens (Tokens ) 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.