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í artefaktu
    metadata/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ů.

Registry tokens and scope maps

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-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 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šť:

Úložiště 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.

  1. Na portálu přejděte do registru kontejneru.

  2. V části Oprávnění úložiště vyberte Tokeny > + Přidat.

    Create token in portal

  3. Zadejte název tokenu.

  4. V části Mapa oboru vyberte Vytvořit nový.

  5. Konfigurace mapy oboru:

    1. Zadejte název a popis mapování oboru.

    2. V části Úložiště zadejte samples/hello-worlda v části Oprávnění vyberte content/read a content/write. Pak vyberte +Přidat.

      Create scope map in portal

    3. Po přidání úložišť a oprávnění vyberte Přidat a přidejte mapování oboru.

  6. 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.

  1. Na portálu přejděte do registru kontejneru.

  2. V části Oprávnění úložiště vyberte Tokeny a vyberte token.

  3. V podrobnostech o tokenu vyberte heslo1 nebo heslo2 a vyberte ikonu Generovat.

  4. Na obrazovce s heslem volitelně nastavte datum vypršení platnosti hesla a vyberte Vygenerovat. Doporučujeme nastavit datum vypršení platnosti.

  5. 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.

    Create token password in portal

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 CLI

Příklad: az acr repository delete --name myregistry --repository myrepo --username MyToken --password xxxxxxxxxx
content/read docker login

az acr login v Azure CLI

Pří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-mapcontent/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:

  1. Přejděte do registru kontejneru.
  2. V části Oprávnění úložiště vyberte Mapy oborů a vyberte mapování oboru, které chcete aktualizovat.
  3. V části Úložiště zadejte samples/nginxa v části Oprávnění vyberte content/read a content/write. Pak vyberte +Přidat.
  4. V části Úložiště vyberte samples/hello-world a v části Oprávnění zrušte výběr content/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_PWDprostř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