Databas – begränsade behörigheter i Azure Container RegistryRepository-scoped permissions in Azure Container Registry

Azure Container Registry stöder flera autentiseringsalternativ med identiteter som har rollbaserad åtkomst till ett helt register.Azure Container Registry supports several authentication options using identities that have role-based access to an entire registry. För vissa scenarier kan du dock behöva ge åtkomst till specifika databaser i ett register.However, for certain scenarios, you might need to provide access only to specific repositories in a registry.

Den här artikeln visar hur du skapar och använder en åtkomsttoken som har behörighet att utföra åtgärder på endast vissa databaser i ett register.This article shows how to create and use an access token that has permissions to perform actions on only specific repositories in a registry. Med en åtkomsttoken kan du tillhandahålla användare eller tjänster med begränsad, tidsbegränsad åtkomst till databaser för att hämta eller skicka avbildningar eller utföra andra åtgärder.With an access token, you can provide users or services with scoped, time-limited access to repositories to pull or push images or perform other actions.

Mer information finns i om behörigheter för databas omfång, längre fram i den här artikeln, för bakgrunds information om token och scenarier.See About repository-scoped permissions, later in this article, for background about token concepts and scenarios.

Viktigt

Den här funktionen är för närvarande en för hands version och vissa begränsningar gäller.This feature is currently in preview, and some limitations apply. Förhandsversioner görs tillgängliga för dig under förutsättning att du godkänner kompletterande användningsvillkor.Previews are made available to you on the condition that you agree to the supplemental terms of use. Vissa aspekter av funktionen kan ändras innan den är allmänt tillgänglig (GA).Some aspects of this feature may change prior to general availability (GA).

Begränsningar för förhandsversionPreview limitations

  • Den här funktionen är endast tillgänglig i ett Premium container Registry.This feature is only available in a Premium container registry. Information om nivåer och gränser för register tjänster finns i Azure Container Registry SKU: er.For information about registry service tiers and limits, see Azure Container Registry SKUs.
  • Du kan för närvarande inte tilldela databasens begränsade behörigheter till ett Azure Active Directory-objekt, till exempel ett tjänst huvud namn eller en hanterad identitet.You can't currently assign repository-scoped permissions to an Azure Active Directory object such as a service principal or managed identity.

FörutsättningarPrerequisites

  • Azure CLI – den här artikeln kräver en lokal installation av Azure CLI (version 2.0.76 eller senare).Azure CLI - This article requires a local installation of the Azure CLI (version 2.0.76 or later). Kör az --version för att hitta versionen.Run az --version to find the version. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.If you need to install or upgrade, see Install Azure CLI.

  • Docker -för att autentisera med registret behöver du också en lokal Docker-installation.Docker - To authenticate with the registry, you also need a local Docker installation. I Docker finns installationsanvisningar för macOS, Windows och Linux.Docker provides installation instructions for macOS, Windows, and Linux systems.

  • Behållar register med databaser – om du inte har ett kan du skapa ett behållar register i din Azure-prenumeration.Container registry with repositories - If you don't have one, create a container registry in your Azure subscription. Använd till exempel Azure Portal eller Azure CLI.For example, use the Azure portal or the Azure CLI.

    I test syfte, push eller Importera en eller flera exempel bilder till registret.For test purposes, push or import one or more sample images to the registry. Exemplen i den här artikeln hänvisar till följande bilder i två databaser: samples/hello-world:v1 och samples/nginx:v1.Examples in this article refer to the following images in two repositories: samples/hello-world:v1 and samples/nginx:v1.

Skapa en åtkomsttokenCreate an access token

Skapa en token med kommandot AZ ACR token Create .Create a token using the az acr token create command. När du skapar en token anger du en eller flera databaser och associerade åtgärder på varje lagrings plats eller anger en befintlig omfattnings karta med dessa inställningar.When creating a token, specify one or more repositories and associated actions on each repository, or specify an existing scope map with those settings.

Skapa åtkomsttoken och ange databaserCreate access token and specify repositories

I följande exempel skapas en åtkomsttoken med behörighet att utföra content/write och content/read åtgärder på samples/hello-world-lagringsplatsen och content/read åtgärden på samples/nginx-lagringsplatsen.The following example creates an access token with permissions to perform content/write and content/read actions on the samples/hello-world repository, and the content/read action on the samples/nginx repository. Som standard genererar kommandot två lösen ord.By default, the command generates two passwords.

I det här exemplet anges token-status till enabled (standardinställningen), men du kan när som helst uppdatera token och ange status till disabled.This example sets the token status to enabled (the default setting), but you can update the token at any time and set the status to disabled.

az acr token create --name MyToken --registry myregistry \
  --repository samples/hello-world content/write content/read \
  --repository samples/nginx content/read --status enabled

Utdata visar information om token, inklusive skapade lösen ord och omfångs karta.The output shows details about the token, including generated passwords and scope map. Vi rekommenderar att du sparar lösen orden på ett säkert ställe för att använda senare med docker login.It's recommended to save the passwords in a safe place to use later with docker login. Det går inte att hämta lösen orden igen men nya kan genereras.The passwords can't be retrieved again but new ones can be generated.

Utdata visar också att en omfångs karta skapas automatiskt, med namnet MyToken-scope-map.The output also shows that a scope map is automatically created, named MyToken-scope-map. Du kan använda omfångs kartan för att tillämpa samma databas åtgärder på andra tokens.You can use the scope map to apply the same repository actions to other tokens. Eller så kan du uppdatera omfångs kartan senare för att ändra behörigheterna för token.Or, update the scope map later to change the token permissions.

{
  "creationDate": "2019-10-22T00:15:34.066221+00:00",
  "credentials": {
    "certificates": [],
    "passwords": [
      {
        "creationTime": "2019-10-22T00:15:52.837651+00:00",
        "expiry": null,
        "name": "password1",
        "value": "uH54BxxxxK7KOxxxxRbr26dAs8JXxxxx"
      },
      {
        "creationTime": "2019-10-22T00: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"

Skapa en omfångs karta och associerad tokenCreate a scope map and associated token

Du kan också ange en omfattnings karta med databaser och associerade åtgärder när du skapar en token.Alternatively, specify a scope map with repositories and associated actions when creating a token. Om du vill skapa en omfångs karta använder du kommandot AZ ACR scope-Map Create .To create a scope map, use the az acr scope-map create command.

Följande exempel kommando skapar en omfångs karta med samma behörigheter som användes i föregående exempel.The following example command creates a scope map with the same permissions used in the previous example. Den tillåter content/write och content/read åtgärder på samples/hello-world-lagringsplatsen och content/read åtgärden på samples/nginx-lagringsplatsen:It allows content/write and content/read actions on the samples/hello-world repository, and the content/read action on the samples/nginx repository:

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

De utdata som genereras liknar följande:Output is similar to the following:

{
  "actions": [
    "repositories/samples/hello-world/content/write",
    "repositories/samples/nginx/content/read"
  ],
  "creationDate": "2019-10-22T05:07:35.194413+00:00",
  "description": "Sample scope map.",
  "id": "/subscriptions/fxxxxxxxx-adbd-4cb4-c864-xxxxxxxxxxxx/resourceGroups/myresourcegroup/providers/Microsoft.ContainerRegistry/registries/myregistry/scopeMaps/MyScopeMap",
  "name": "MyScopeMap",
  "provisioningState": "Succeeded",
  "resourceGroup": "myresourcegroup",
  "scopeMapType": "UserDefined",
  "type": "Microsoft.ContainerRegistry/registries/scopeMaps"

Kör AZ ACR token Create för att skapa en token som är associerad med MyScopeMap -omfångs kartan.Run az acr token create to create a token associated with the MyScopeMap scope map. Som standard genererar kommandot två lösen ord.By default, the command generates two passwords. I det här exemplet anges token-status till enabled (standardinställningen), men du kan när som helst uppdatera token och ange status till disabled.This example sets the token status to enabled (the default setting), but you can update the token at any time and set the status to disabled.

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

Utdata visar information om token, inklusive genererade lösen ord och omfångs karta som du har använt.The output shows details about the token, including generated passwords and the scope map you applied. Vi rekommenderar att du sparar lösen orden på ett säkert ställe för att använda senare med docker login.It's recommended to save the passwords in a safe place to use later with docker login. Det går inte att hämta lösen orden igen men nya kan genereras.The passwords can't be retrieved again but new ones can be generated.

Skapa lösen ord för tokenGenerate passwords for token

Om lösen ord skapades när du skapade token, fortsätter du med att autentisera med registret.If passwords were created when you created the token, proceed to Authenticate with registry.

Om du inte har ett token-lösenord, eller om du vill generera nya lösen ord, kör du kommandot AZ ACR token Credential generate .If you don't have a token password, or you want to generate new passwords, run the az acr token credential generate command.

I följande exempel skapas ett nytt lösen ord för den token som du skapade, med en förfallo period på 30 dagar.The following example generates a new password for the token you created, with an expiration period of 30 days. Lösen ordet lagras i miljö variabeln TOKEN_PWD.It stores the password in the environment variable TOKEN_PWD. Det här exemplet är formaterat för bash-gränssnittet.This example is formatted for the bash shell.

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

Autentisera med tokenAuthenticate using token

Kör docker login för att autentisera med registret med hjälp av autentiseringsuppgifter för token.Run docker login to authenticate with the registry using the token credentials. Ange namnet på token som användar namn och ange ett lösen ord.Enter the token name as the user name and provide one of its passwords. Följande exempel är formaterat för bash-gränssnittet och innehåller värdena med miljövariabler.The following example is formatted for the bash shell, and provides the values using environment variables.

TOKEN_NAME=MyToken
TOKEN_PWD=<token password>

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

Utdata ska Visa lyckad autentisering:Output should show successful authentication:

Login Succeeded

Verifiera begränsad åtkomstVerify scoped access

Du kan kontrol lera att token tillhandahåller begränsade behörigheter till databaserna i registret.You can verify that the token provides scoped permissions to the repositories in the registry. I det här exemplet slutförs följande docker pull kommandon för att hämta avbildningar som är tillgängliga i samples/hello-world och samples/nginx-databaser:In this example, the following docker pull commands complete successfully to pull images available in the samples/hello-world and samples/nginx repositories:

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

Eftersom exempel-token bara tillåter content/write åtgärden på samples/hello-world-lagringsplatsen, docker push lyckas med lagrings platsen, men det går inte att samples/nginx:Because the example token allows the content/write action only on the samples/hello-world repository, docker push succeeds to that repository but fails for samples/nginx:

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

# docker push fails
docker pull myregistry.azurecr.io/samples/nginx:v1

Uppdatera omfångs karta och tokenUpdate scope map and token

Om du vill uppdatera behörigheterna för token uppdaterar du behörigheterna i den associerade omfångs mappningen med hjälp av AZ ACR scope-Map Update.To update token permissions, update the permissions in the associated scope map, using az acr scope-map update. Om du till exempel vill uppdatera MyScopeMap för att ta bort åtgärden content/writesamples/hello-world-lagringsplatsen:For example, to update MyScopeMap to remove the content/write action on the samples/hello-world repository:

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

Om omfångs kartan är associerad med mer än en token uppdaterar kommandot behörigheten för alla associerade tokens.If the scope map is associated with more than one token, the command updates the permission of all associated tokens.

Om du vill uppdatera en token med en annan omfångs karta kör du AZ ACR token Update.If you want to update a token with a different scope map, run az acr token update. Exempel:For example:

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

När du har uppdaterat en token eller en omfångs karta som är associerad med en token börjar behörighets ändringarna gälla vid nästa docker login eller annan autentisering med hjälp av token.After updating a token, or a scope map associated with a token, the permission changes take effect at the next docker login or other authentication using the token.

När du har uppdaterat en token kanske du vill generera nya lösen ord för att få åtkomst till registret.After updating a token, you might want to generate new passwords to access the registry. Kör AZ för ACR token generate.Run az acr token credential generate. Exempel:For example:

az acr token credential generate \
  --name MyToken --registry myregistry --days 30

Om behörigheter för databas omfångAbout repository-scoped permissions

BegreppConcepts

Om du vill konfigurera behörigheter för databasens omfång skapar du en åtkomsttoken och en associerad omfattnings mappning med hjälp av kommandon i Azure CLI.To configure repository-scoped permissions, you create an access token and an associated scope map using commands in the Azure CLI.

  • En åtkomsttoken är en autentiseringsuppgift som används med ett lösen ord för att autentisera med registret.An access token is a credential used with a password to authenticate with the registry. Kopplade till varje token tillåts åtgärder som är begränsade till en eller flera databaser.Associated with each token are permitted actions scoped to one or more repositories. Du kan ange en förfallo tid för varje token.You can set an expiration time for each token.

  • Åtgärder på varje angiven lagrings plats innehåller en eller flera av följande.Actions on each specified repository include one or more of the following.

    ÅtgärdAction BeskrivningDescription
    content/read Läs data från lagrings platsen.Read data from the repository. Hämta till exempel en artefakt.For example, pull an artifact.
    metadata/read Läsa metadata från lagrings platsen.Read metadata from the repository. Du kan till exempel Visa taggar eller visa metadata för manifestet.For example, list tags or show manifest metadata.
    content/write Skriv data till lagrings platsen.Write data to the repository. Använd med content/read för att skicka en artefakt.Use with content/read to push an artifact.
    metadata/write Skriv metadata till lagrings platsen.Write metadata to the repository. Du kan till exempel uppdatera manifest-attribut.For example, update manifest attributes.
    content/delete Ta bort data från lagrings platsen.Remove data from the repository. Du kan till exempel ta bort en lagrings plats eller ett manifest.For example, delete a repository or a manifest.
  • En omfattnings karta är ett register objekt som grupperar lagrings plats behörigheter som du tillämpar på en token eller som kan tillämpas på andra tokens.A scope map is a registry object that groups repository permissions you apply to a token, or can reapply to other tokens. Om du inte använder en omfångs karta när du skapar en token skapas en omfångs karta automatiskt åt dig, för att spara behörighets inställningarna.If you don't apply a scope map when creating a token, a scope map is automatically created for you, to save the permission settings.

    En omfångs karta hjälper dig att konfigurera flera användare med identisk åtkomst till en uppsättning databaser.A scope map helps you configure multiple users with identical access to a set of repositories. Azure Container Registry tillhandahåller också systemdefinierade omfångs kartor som du kan använda när du skapar åtkomsttoken.Azure Container Registry also provides system-defined scope maps that you can apply when creating access tokens.

Följande bild sammanfattar relationen mellan tokens och omfångs kartor.The following image summarizes the relationship between tokens and scope maps.

Register omfångs kartor och tokens

ScenarierScenarios

Scenarier för att använda en åtkomsttoken är:Scenarios for using an access token include:

  • Tillhandahålla IoT-enheter med enskilda token för att hämta en avbildning från en lagrings platsProvide IoT devices with individual tokens to pull an image from a repository
  • Ange en extern organisation med behörigheter till en speciell lagrings platsProvide an external organization with permissions to a specific repository
  • Begränsa lagrings plats åtkomst till vissa användar grupper i din organisation.Limit repository access to specific user groups in your organization. Du kan till exempel ge Skriv-och Läs behörighet till utvecklare som skapar avbildningar som är riktade till specifika lagrings platser och Läs åtkomst till team som distribuerar från dessa databaser.For example, provide write and read access to developers who build images that target specific repositories, and read access to teams that deploy from those repositories.

Autentisering med tokenAuthentication using token

Använd ett token-namn som användar namn och ett av dess associerade lösen ord för att autentisera med mål registret.Use a token name as a user name and one of its associated passwords to authenticate with the target registry. Autentiseringsmetoden beror på vilka åtgärder som har kon figurer ATS.The authentication method depends on the configured actions.

innehåll/läsa eller innehåll/skrivacontent/read or content/write

Om token endast tillåter content/read eller content/write åtgärder anger du autentiseringsuppgifter för token i något av följande autentiseringsscheman:If the token permits only content/read or content/write actions, provide token credentials in either of the following authentication flows:

  • Autentisera med Docker med hjälp av docker loginAuthenticate with Docker using docker login
  • Autentisera med registret med hjälp av kommandot AZ ACR login i Azure CLIAuthenticate with the registry using the az acr login command in the Azure CLI

Efter autentiseringen tillåter token de konfigurerade åtgärderna för lagrings platsen eller databaserna.Following authentication, the token permits the configured actions on the scoped repository or repositories. Om exempelvis token tillåter content/read åtgärden på en lagrings plats, tillåts docker pull åtgärder på avbildningar i lagrings platsen.For example, if the token permits the content/read action on a repository, docker pull operations are permitted on images in that repository.

metadata/läsning, metadata/skrivning eller innehåll/ta bortmetadata/read, metadata/write, or content/delete

Om token tillåter metadata/read, metadata/writeeller content/delete åtgärder på en lagrings plats, måste token-autentiseringsuppgifter tillhandahållas som parametrar med de relaterade AZ ACR-databas kommandona i Azure CLI.If the token permits metadata/read, metadata/write, or content/delete actions on a repository, token credentials must be provided as parameters with the related az acr repository commands in the Azure CLI.

Om metadata/read åtgärder till exempel tillåts på en lagrings plats skickar du token-autentiseringsuppgifterna när du kör kommandot AZ ACR-lagringsplatsen show-Tags för att Visa taggar.For example, if metadata/read actions are permitted on a repository, pass the token credentials when running the az acr repository show-tags command to list tags.

Nästa stegNext steps

  • Om du vill hantera områdes kartor och åtkomsttoken använder du ytterligare kommandon i kommando grupperna AZ ACR scope-Map och AZ ACR-token .To manage scope maps and access tokens, use additional commands in the az acr scope-map and az acr token command groups.
  • I översikten över autentisering finns scenarier för att autentisera med ett Azure Container Registry med ett administratörs konto eller en Azure Active Directory identitet.See the authentication overview for scenarios to authenticate with an Azure container registry using an admin account or an Azure Active Directory identity.