Skapa en token med behörigheter för lagringsplatsen

Den här artikeln beskriver hur du skapar token och omfångsmappningar för att hantera åtkomst till specifika lagringsplatsen i containerregistret. Genom att skapa token kan en registerägare ge användare eller tjänster begränsad åtkomst till lagringsplatsen för att hämta eller skicka avbildningar eller utföra andra åtgärder. En token ger mer omfattande behörigheter än andra alternativ för registerautentisering, som omfångsbehörigheter till ett helt register.

Scenarier för att skapa en token är:

  • Tillåt att IoT-enheter med enskilda token hämtar en avbildning från en lagringsplats
  • Ge en extern organisation behörighet till en specifik lagringsplats
  • Begränsa lagringsplatsens åtkomst till olika användargrupper i din organisation. Du kan till exempel ge skriv- och läsåtkomst till utvecklare som skapar avbildningar som riktar in sig på specifika lagringsplatsen och läsåtkomst till team som distribuerar från dessa lagringsplatsen.

Den här funktionen är tillgänglig Premium containerregistrets tjänstnivå. Information om registertjänstnivåer och begränsningar finns i Azure Container Registry tjänstnivåer.

Viktigt

Den här funktionen är för närvarande i förhandsversion och vissa begränsningar gäller. Förhandsversioner är tillgängliga för dig under förutsättning att du godkänner de kompletterande användningsvillkoren. Vissa aspekter av funktionen kan ändras innan den är allmänt tillgänglig (GA).

Begränsningar för förhandsversion

  • Du kan för närvarande inte tilldela behörigheter som är begränsade till lagringsplatsen till en Azure Active Directory identitet, till exempel ett huvudnamn för tjänsten eller en hanterad identitet.
  • Du kan inte skapa en omfångskarta i ett register som aktiverats för anonym pull-åtkomst.

Begrepp

Om du vill konfigurera behörigheter som är begränsade till lagringsplatsen skapar du en token med en associerad omfångskarta.

  • Med en token tillsammans med ett genererat lösenord kan användaren autentisera med registret. Du kan ange ett förfallodatum för ett tokenlösenord eller inaktivera en token när som helst.

    Efter autentisering med en token kan användaren eller tjänsten utföra en eller flera åtgärder som är begränsade till en eller flera lagringsplatsen.

    Åtgärd Beskrivning Exempel
    content/delete Ta bort data från lagringsplatsen Ta bort en lagringsplats eller ett manifest
    content/read Läsa data från lagringsplatsen Hämta en artefakt
    content/write Skriva data till lagringsplatsen Använd med content/read för att push-skicka en artefakt
    metadata/read Läsa metadata från lagringsplatsen Lista taggar eller manifest
    metadata/write Skriva metadata till lagringsplatsen Aktivera eller inaktivera läs-, skriv- eller borttagningsåtgärder
  • En omfångskarta grupperar de lagringsplatsbehörigheter som du tillämpar på en token och kan tillämpas på andra token igen. Varje token är associerad med en enda omfångskarta.

    Med en omfångskarta:

    • Konfigurera flera token med identiska behörigheter till en uppsättning lagringsplatsen
    • Uppdatera tokenbehörigheter när du lägger till eller tar bort åtgärder för lagringsplatsen i omfångskartan eller tillämpar en annan omfångskarta

    Azure Container Registry också flera systemdefinierade omfångskartor som du kan tillämpa när du skapar token. Behörigheterna för systemdefinierade omfångsmappningar gäller för alla lagringsplatsen i registret.

Följande bild visar relationen mellan token och omfångsmappningar.

Registertoken och omfångsmappningar

Förutsättningar

  • Azure CLI – Kommandoexempel för Azure CLI-kommandon i den här artikeln kräver Azure CLI version 2.17.0 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.
  • Docker – Om du vill autentisera med registret för att hämta eller skicka avbildningar behöver du en lokal Docker-installation. I Docker finns installationsanvisningar för macOS, Windows och Linux.
  • Containerregister – Om du inte har ett skapar du ett Premium ett containerregister i din Azure-prenumeration eller uppgraderar ett befintligt register. Använd till exempel Azure Portal eller Azure CLI.

Skapa token – CLI

Skapa token och ange lagringsplatsen

Skapa en token med kommandot az acr token create. När du skapar en token kan du ange en eller flera lagringsplatsen och tillhörande åtgärder på varje lagringsplats. Lagringsplatsen behöver inte finnas i registret ännu. Information om hur du skapar en token genom att ange en befintlig omfångskarta finns i nästa avsnitt.

I följande exempel skapas en token i registret myregistry med följande behörigheter på samples/hello-world lagringsplatsen: content/write och content/read . Som standard anger kommandot standardtokenstatusen enabled till , men du kan uppdatera statusen till när som disabled helst.

az acr token create --name MyToken --registry myregistry \
  --repository samples/hello-world \
  content/write content/read \
  --output json

Utdata visar information om token. Som standard genereras två lösenord som inte upphör att gälla, men du kan också ange ett förfallodatum. Vi rekommenderar att du sparar lösenorden på en säker plats för senare autentisering. Lösenorden kan inte hämtas igen, men nya kan genereras.

{
  "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"

Anteckning

Information om hur du återskapar tokenlösenord och förfalloperioder finns i Återskapa tokenlösenord senare i den här artikeln.

Utdata innehåller information om omfångskartan som kommandot skapade. Du kan använda omfångskartan, här med namnet MyToken-scope-map , för att tillämpa samma åtgärder på lagringsplatsen på andra token. Du kan också uppdatera omfångskartan senare för att ändra behörigheterna för de associerade token.

Skapa token och ange omfångskarta

Ett annat sätt att skapa en token är att ange en befintlig omfångskarta. Om du inte redan har en omfångskarta skapar du först en genom att ange lagringsplatsen och tillhörande åtgärder. Ange sedan omfångskartan när du skapar en token.

Om du vill skapa en omfångskarta använder du kommandot az acr scope-map create. Följande kommando skapar en omfångskarta med samma behörigheter på den samples/hello-world lagringsplats som användes tidigare.

az acr scope-map create --name MyScopeMap --registry myregistry \
  --repository samples/hello-world \
  content/write content/read \
  --description "Sample scope map"

Kör az acr token create för att skapa en token och ange omfångskartan MyScopeMap. Som i föregående exempel anger kommandot standardtokenstatusen till enabled .

az acr token create --name MyToken \
  --registry myregistry \
  --scope-map MyScopeMap

Utdata visar information om token. Som standard genereras två lösenord. Vi rekommenderar att du sparar lösenorden på en säker plats för senare autentisering. Lösenorden kan inte hämtas igen, men nya kan genereras.

Anteckning

Information om hur du återskapar tokenlösenord och förfalloperioder finns i Återskapa tokenlösenord senare i den här artikeln.

Skapa token – portalen

Du kan använda Azure Portal för att skapa token och omfångsmappningar. Precis som med CLI-kommandot kan du använda en befintlig omfångskarta eller skapa en omfångskarta när du skapar en token genom att ange en eller flera az acr token create lagringsplatsen och associerade åtgärder. Lagringsplatsen behöver inte finnas i registret ännu.

I följande exempel skapas en token och en omfångskarta med följande behörigheter på samples/hello-world lagringsplatsen: content/write och content/read .

  1. Navigera till containerregistret i portalen.

  2. Under Lagringsplatsbehörigheter väljer du Token (förhandsversion) > +Lägg till.

    Skapa token i portalen

  3. Ange ett tokennamn.

  4. Under Omfångskarta väljer du Skapa ny.

  5. Konfigurera omfångskartan:

    1. Ange ett namn och en beskrivning för omfångskartan.

    2. Under Lagringsplatsen anger du samples/hello-world och under Behörigheter väljer du content/read och content/write . Välj sedan +Lägg till.

      Skapa omfångskarta i portalen

    3. När du har lagt till lagringsplatsen och behörigheterna väljer du Lägg till för att lägga till omfångskartan.

  6. Acceptera standardtokenstatusen Aktiverad och välj sedan Skapa.

När token har verifierats och skapats visas tokeninformation på skärmen Token.

Lägga till tokenlösenord

Om du vill använda en token som skapats i portalen måste du generera ett lösenord. Du kan generera ett eller två lösenord och ange ett förfallodatum för vart och ett.

  1. Navigera till containerregistret i portalen.

  2. Under Lagringsplatsbehörigheter väljer du Token (förhandsversion) och väljer en token.

  3. I tokeninformationen väljer du password1 eller password2 och sedan ikonen Generera.

  4. På lösenordsskärmen kan du välja att ange ett förfallodatum för lösenordet och välja Generera. Vi rekommenderar att du anger ett förfallodatum.

  5. När du har genererat ett lösenord kopierar du och sparar det på en säker plats. Du kan inte hämta ett genererat lösenord när du har stängt skärmen, men du kan generera ett nytt.

    Skapa tokenlösenord i portalen

Autentisera med token

När en användare eller tjänst använder en token för att autentisera med målregistret anger den tokennamnet som ett användarnamn och ett av dess genererade lösenord.

Autentiseringsmetoden beror på den konfigurerade åtgärden eller de åtgärder som är associerade med token.

Åtgärd Så här autentiserar du
content/delete az acr repository delete i Azure CLI

Exempel: az acr repository delete --name myregistry --repository myrepo --username MyToken --password xxxxxxxxxx
content/read docker login

az acr login i Azure CLI

Exempel: az acr login --name myregistry --username MyToken --password xxxxxxxxxx
content/write docker login

az acr login i Azure CLI
metadata/read az acr repository show

az acr repository show-tags

az acr repository show-manifests i Azure CLI
metadata/write az acr repository untag

az acr repository update i Azure CLI

Exempel: Använda token

I följande exempel används den token som skapades tidigare i den här artikeln för att utföra vanliga åtgärder på en lagringsplats: skicka och hämta avbildningar, ta bort avbildningar och lista lagringsplatstaggar. Token konfigurerades inledningsvis med push-behörigheter ( content/write och content/read åtgärder) på samples/hello-world lagringsplatsen.

Hämta och tagga testbilder

I följande exempel hämtar du offentliga hello-world avbildningar nginx och avbildningar Microsoft Container Registry och taggar dem för ditt register och din lagringsplats.

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

Autentisera med hjälp av token

Kör docker login eller för att autentisera med registret för att skicka eller hämta az acr login avbildningar. Ange tokennamnet som användarnamn och ange ett av dess lösenord. Token måste ha Enabled statusen .

Följande exempel är formaterat för Bash-gränssnittet och tillhandahåller värden med hjälp av miljövariabler.

TOKEN_NAME=MyToken
TOKEN_PWD=<token password>

echo $TOKEN_PWD | docker login --username $TOKEN_NAME --password-stdin myregistry.azurecr.io

Utdata bör visa lyckad autentisering:

Login Succeeded

Push-överför avbildningar till registret

Efter en lyckad inloggning försöker du skicka taggade avbildningar till registret. Eftersom token har behörighet att skicka avbildningar till samples/hello-world lagringsplatsen lyckas följande push-åtgärder:

docker push myregistry.azurecr.io/samples/hello-world:v1

Token har inte behörighet till lagringsplatsen, samples/nginx så följande push-försök misslyckas med ett fel som liknar requested access to the resource is denied :

docker push myregistry.azurecr.io/samples/nginx:v1

Uppdatera tokenbehörigheter

Uppdatera behörigheterna för en token genom att uppdatera behörigheterna i den associerade omfångskartan. Den uppdaterade omfångskartan tillämpas omedelbart på alla associerade token.

Du kan till exempel MyToken-scope-map uppdatera med åtgärderna och på content/write content/read samples/ngnx lagringsplatsen och ta bort content/write åtgärden på samples/hello-world lagringsplatsen.

Om du vill använda Azure CLI kör du az acr scope-map update för att uppdatera omfångskartan:

az acr scope-map update \
  --name MyScopeMap \
  --registry myregistry \
  --add-repository samples/nginx content/write content/read \
  --remove-repository samples/hello-world content/write 

I Azure-portalen:

  1. Gå till containerregistret.
  2. Under Lagringsplatsbehörigheter väljer du Omfångsmappningar (förhandsversion) och väljer den omfångskarta som ska uppdateras.
  3. Under Lagringsplatsen anger du samples/nginx och under Behörigheter väljer du content/read och content/write . Välj sedan +Lägg till.
  4. Under Lagringsplatsen väljer du samples/hello-world och avmarkerar under Behörigheter content/write . Välj sedan Spara.

När du har uppdaterat omfångskartan lyckas följande push-åtgärder:

docker push myregistry.azurecr.io/samples/nginx:v1

Eftersom omfångskartan bara har content/read behörighet på samples/hello-world lagringsplatsen misslyckas nu ett samples/hello-world push-försök till lagringsplatsen:

docker push myregistry.azurecr.io/samples/hello-world:v1

Det går att hämta avbildningar från båda lagringsplatsen eftersom content/read omfångskartan ger behörighet till båda lagringsplatsen:

docker pull myregistry.azurecr.io/samples/nginx:v1
docker pull myregistry.azurecr.io/samples/hello-world:v1

Ta bort avbildningar

Uppdatera omfångskartan genom att content/delete lägga till åtgärden till lagringsplatsen. nginx Med den här åtgärden kan du ta bort bilder i lagringsplatsen eller ta bort hela lagringsplatsen.

Av utrymmessk ände visar vi bara kommandot az acr scope-map update för att uppdatera omfångskartan:

az acr scope-map update \
  --name MyScopeMap \
  --registry myregistry \
  --add-repository samples/nginx content/delete

Information om hur du uppdaterar omfångskartan med hjälp av portalen finns i föregående avsnitt.

Använd följande az acr repository delete-kommando för att ta bort lagringsplatsen. samples/nginx Om du vill ta bort avbildningar eller lagringsplatsen skickar du tokens namn och lösenord till kommandot . I följande exempel används miljövariablerna som skapades tidigare i artikeln:

az acr repository delete \
  --name myregistry --repository samples/nginx \
  --username $TOKEN_NAME --password $TOKEN_PWD

Visa lagringsplatsens taggar

Uppdatera omfångskartan genom att metadata/read lägga till åtgärden till lagringsplatsen. hello-world Med den här åtgärden kan du läsa manifest- och taggdata i lagringsplatsen.

Av utrymmessk ände visar vi bara kommandot az acr scope-map update för att uppdatera omfångskartan:

az acr scope-map update \
  --name MyScopeMap \
  --registry myregistry \
  --add-repository samples/hello-world metadata/read 

Information om hur du uppdaterar omfångskartan med hjälp av portalen finns i föregående avsnitt.

Om du vill läsa metadata på samples/hello-world lagringsplatsen kör du kommandot az acr repository show-manifests eller az acr repository show-tags.

Om du vill läsa metadata skickar du tokens namn och lösenord till något av kommandona. I följande exempel används miljövariablerna som skapades tidigare i artikeln:

az acr repository show-tags \
  --name myregistry --repository samples/hello-world \
  --username $TOKEN_NAME --password $TOKEN_PWD

Exempel på utdata:

[
  "v1"
]

Hantera token och omfångsmappningar

Lista omfångskartor

Använd kommandot az acr scope-map list eller skärmen Omfångskartor (förhandsversion) i portalen för att visa en lista över alla omfångskartor som konfigurerats i ett register. Ett exempel:

az acr scope-map list \
  --registry myregistry --output table

Utdata består av de tre systemdefinierade omfångsmappningar och andra omfångskartor som genereras av dig. Token kan konfigureras med någon av dessa omfångskartor.

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

Visa tokeninformation

Om du vill visa information om en token, till exempel dess status och förfallodatum för lösenord, kör du kommandot az acr token show eller väljer token på skärmen Token (förhandsversion) i portalen. Ett exempel:

az acr scope-map show \
  --name MyScopeMap --registry myregistry

Använd kommandot az acr token list eller skärmen Tokens (förhandsversion) i portalen för att visa en lista över alla token som konfigurerats i ett register. Ett exempel:

az acr token list --registry myregistry --output table

Återskapa tokenlösenord

Om du inte genererade ett tokenlösenord eller om du vill generera nya lösenord kör du kommandot az acr token credential generate.

I följande exempel genereras ett nytt värde för password1 för MyToken-token med en förfalloperiod på 30 dagar. Lösenordet lagras i miljövariabeln TOKEN_PWD . Det här exemplet är formaterat för bash-gränssnittet.

TOKEN_PWD=$(az acr token credential generate \
  --name MyToken --registry myregistry --expiration-in-days 30 \
  --password1 --query 'passwords[0].value' --output tsv)

Om du vill Azure Portal för att generera ett tokenlösenord går du till stegen i Skapa token – portalen tidigare i den här artikeln.

Uppdatera token med ny omfångskarta

Om du vill uppdatera en token med en annan omfångskarta kör du az acr token update och anger den nya omfångskartan. Ett exempel:

az acr token update --name MyToken --registry myregistry \
  --scope-map MyNewScopeMap

På portalen går du till skärmen Token (förhandsversion) och väljer en annan omfångskarta under Omfångskarta.

Tips

När du har uppdaterat en token med en ny omfångskarta kanske du vill generera nya tokenlösenord. Använd kommandot az acr token credential generate eller återskapa ett tokenlösenord i Azure Portal.

Inaktivera eller ta bort token

Du kan behöva inaktivera användningen av tokenautentiseringsuppgifter för en användare eller tjänst tillfälligt.

Använd Azure CLI och kör kommandot az acr token update för att ange till status disabled :

az acr token update --name MyToken --registry myregistry \
  --status disabled

I portalen väljer du token på skärmen Token (förhandsversion) och väljer Inaktiverad under Status.

Om du vill ta bort en token för att permanent ogiltigförklara åtkomst för alla som använder autentiseringsuppgifterna kör du kommandot az acr token delete.

az acr token delete --name MyToken --registry myregistry

I portalen väljer du token på skärmen Token (förhandsversion) och väljer Ignorera.

Nästa steg

  • Om du vill hantera omfångsmappningar och token använder du ytterligare kommandon i kommandogrupperna az acr scope-map och az acr token.
  • Se autentiseringsöversikten för andra alternativ för att autentisera med ett Azure-containerregister, inklusive att använda en Azure Active Directory-identitet, ett huvudnamn för tjänsten eller ett administratörskonto.