Azure tarafından yönetilen kimlik kullanarak ACR görevinde kayıt defteri arası kimlik doğrulaması
ACR görevinde, Azure kaynakları için yönetilen kimliği etkinleştirebilirsiniz. Görev kimlik bilgilerini sağlamaya veya yönetmeye gerek kalmadan diğer Azure kaynaklarına erişmek için kimliği kullanabilir.
Bu makalede, görevi çalıştırmak için kullanılandan farklı bir kayıt defterinden görüntü çekmek için bir görevde yönetilen kimliği etkinleştirmeyi öğreneceksiniz.
Azure kaynaklarını oluşturmak için bu makale, Azure CLI 2.0.68 veya sonraki bir sürümünü çalıştırmanızı gerektirir. Sürümü bulmak için az --version
komutunu çalıştırın. Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.
Senaryoya genel bakış
Örnek görev, bir uygulama görüntüsü oluşturmak ve göndermek için başka bir Azure kapsayıcı kayıt defterinden temel görüntü çeker. Temel görüntüyü çekmek için, görevi yönetilen bir kimlikle yapılandırıp uygun izinleri atarsınız.
Bu örnekte, kullanıcı tarafından atanan veya sistem tarafından atanan yönetilen kimliği kullanan adımlar gösterilmektedir. Kimlik seçiminiz kuruluşunuzun gereksinimlerine bağlıdır.
Gerçek dünya senaryosunda bir kuruluş, uygulamalarını oluşturmak için tüm geliştirme ekipleri tarafından kullanılan bir dizi temel görüntü bulundurabilir. Bu temel görüntüler, her geliştirme ekibinin yalnızca çekme haklarına sahip olduğu bir kurumsal kayıt defterinde depolanır.
Önkoşullar
Bu makale için iki Azure kapsayıcı kayıt defteri gerekir:
- ACR görevlerini oluşturmak ve yürütmek için ilk kayıt defterini kullanırsınız. Bu makalede, bu kayıt defteri myregistry olarak adlandırılmıştır.
- İkinci kayıt defteri, görevin görüntü oluşturması için kullanılan bir temel görüntüyü barındırıyor. Bu makalede, ikinci kayıt defteri mybaseregistry olarak adlandırılmıştır.
öğesini sonraki adımlarda kendi kayıt defteri adlarınızla değiştirin.
Gerekli Azure kapsayıcı kayıt defterleriniz yoksa bkz . Hızlı Başlangıç: Azure CLI kullanarak özel kapsayıcı kayıt defteri oluşturma. Henüz kayıt defterine görüntü göndermeniz gerekmez.
Temel kayıt defterini hazırlama
Tanıtım amacıyla, tek seferlik bir işlem olarak [az acr import][az-acr-import] komutunu çalıştırarak Docker Hub'dan temel kayıt defterinize genel bir Node.js görüntüsü içeri aktarın. Uygulamada, kuruluştaki başka bir ekip veya işlem temel kayıt defterinde görüntü bulundurabilir.
az acr import --name mybaseregistry \
--source docker.io/library/node:15-alpine \
--image baseimages/node:15-alpine
YAML dosyasında görev adımlarını tanımlama
Bu örnek çok adımlı görevin adımları bir YAML dosyasında tanımlanır. Yerel çalışma dizininizde adlı helloworldtask.yaml
bir dosya oluşturun ve aşağıdaki içeriği yapıştırın. Derleme adımındaki değerini REGISTRY_NAME
temel kayıt defterinizin sunucu adıyla güncelleştirin.
version: v1.1.0
steps:
# Replace mybaseregistry with the name of your registry containing the base image
- build: -t $Registry/hello-world:$ID https://github.com/Azure-Samples/acr-build-helloworld-node.git#main -f Dockerfile-app --build-arg REGISTRY_NAME=mybaseregistry.azurecr.io
- push: ["$Registry/hello-world:$ID"]
Derleme adımı, bir görüntü oluşturmak için Azure-Samples/acr-build-helloworld-node deposundaki dosyayı kullanırDockerfile-app
. , --build-arg
temel görüntüyü çekmek için temel kayıt defterine başvurur. Başarıyla oluşturulduğunda, görüntü görevi çalıştırmak için kullanılan kayıt defterine gönderilir.
1. Seçenek: Kullanıcı tarafından atanan kimlikle görev oluşturma
Bu bölümdeki adımlar bir görev oluşturur ve kullanıcı tarafından atanan kimliği etkinleştirir. Bunun yerine sistem tarafından atanan bir kimliği etkinleştirmek istiyorsanız bkz . Seçenek 2: Sistem tarafından atanan kimlikle görev oluşturma.
Kullanıcı tarafından atanan kimlik oluşturma
az identity create komutunu kullanarak aboneliğinizde myACRTasksId adlı bir kimlik oluşturun. Kapsayıcı kayıt defteri oluşturmak için daha önce kullandığınız kaynak grubunu veya farklı bir kaynak grubunu kullanabilirsiniz.
az identity create \
--resource-group myResourceGroup \
--name myACRTasksId
Aşağıdaki adımlarda kullanıcı tarafından atanan kimliği yapılandırmak için az identity show komutunu kullanarak kimliğin kaynak kimliğini, asıl kimliğini ve istemci kimliğini değişkenlerde depolayın.
# Get resource ID of the user-assigned identity
resourceID=$(az identity show \
--resource-group myResourceGroup \
--name myACRTasksId \
--query id --output tsv)
# Get principal ID of the task's user-assigned identity
principalID=$(az identity show \
--resource-group myResourceGroup \
--name myACRTasksId \
--query principalId --output tsv)
# Get client ID of the user-assigned identity
clientID=$(az identity show \
--resource-group myResourceGroup \
--name myACRTasksId \
--query clientId --output tsv)
Görev oluştur
Aşağıdaki az acr task create komutunu yürüterek helloworldtask görevini oluşturun. Görev kaynak kodu bağlamı olmadan çalışır ve komut çalışma dizinindeki dosyaya helloworldtask.yaml
başvurur. parametresi, --assign-identity
kullanıcı tarafından atanan kimliğin kaynak kimliğini geçirir.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity $resourceID
Komut çıkışında identity
bölümünde, görevdeki tür UserAssigned
kimliğinin ayarlandığı gösterilir:
[...]
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-d12e-4760-9ab6-xxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRTasksId": {
"clientId": "xxxxxxxx-f17e-4768-bb4e-xxxxxxxxxxxx",
"principalId": "xxxxxxxx-1335-433d-bb6c-xxxxxxxxxxxx"
}
[...]
Temel kayıt defterine kimlik çekme izinleri verme
Bu bölümde yönetilen kimliğe mybaseregistry temel kayıt defterinden çekme izinleri verin.
Temel kayıt defterinin kaynak kimliğini almak ve bir değişkende depolamak için az acr show komutunu kullanın:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Kimliği acrpull
temel kayıt defterine atamak için az role assignment create komutunu kullanın. Bu rolün yalnızca kayıt defterinden görüntü çekme izinleri vardır.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role acrpull
Göreve hedef kayıt defteri kimlik bilgileri ekleme işlemine geçin.
Seçenek 2: Sistem tarafından atanan kimlikle görev oluşturma
Bu bölümdeki adımlar bir görev oluşturur ve sistem tarafından atanan kimliği etkinleştirir. Bunun yerine kullanıcı tarafından atanan bir kimliği etkinleştirmek istiyorsanız bkz . Seçenek 1: Kullanıcı tarafından atanan kimlikle görev oluşturma.
Görev oluştur
Aşağıdaki az acr task create komutunu yürüterek helloworldtask görevini oluşturun. Görev kaynak kodu bağlamı olmadan çalışır ve komut çalışma dizinindeki dosyaya helloworldtask.yaml
başvurur. Değeri --assign-identity
olmayan parametresi, görevde sistem tarafından atanan kimliği etkinleştirir.
az acr task create \
--registry myregistry \
--name helloworldtask \
--context /dev/null \
--file helloworldtask.yaml \
--assign-identity
Komut çıkışında identity
bölümünde, görevde ayarlanan türdeki SystemAssigned
bir kimlik gösterilir. principalId
, görev kimliğinin asıl kimliğidir:
[...]
"identity": {
"principalId": "xxxxxxxx-2703-42f9-97d0-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-86f1-41af-91ab-xxxxxxxxxxxx",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"location": "eastus",
[...]
daha sonraki komutlarda kullanmak üzere principalId değerini bir değişkende depolamak için az acr task show komutunu kullanın. Aşağıdaki komutta görevinizin ve kayıt defterinizin adını yazın:
principalID=$(az acr task show \
--name <task_name> --registry <registry_name> \
--query identity.principalId --output tsv)
Temel kayıt defterine kimlik çekme izinleri verme
Bu bölümde yönetilen kimliğe mybaseregistry temel kayıt defterinden çekme izinleri verin.
Temel kayıt defterinin kaynak kimliğini almak ve bir değişkende depolamak için az acr show komutunu kullanın:
baseregID=$(az acr show --name mybaseregistry --query id --output tsv)
Kimliği acrpull
temel kayıt defterine atamak için az role assignment create komutunu kullanın. Bu rolün yalnızca kayıt defterinden görüntü çekme izinleri vardır.
az role assignment create \
--assignee $principalID \
--scope $baseregID \
--role acrpull
Göreve hedef kayıt defteri kimlik bilgileri ekleme
Şimdi az acr task credential add komutunu kullanarak görevin kimliğin kimlik bilgilerini kullanarak temel kayıt defteriyle kimlik doğrulaması yapmasını sağlayın. Görevde etkinleştirdiğiniz yönetilen kimliğin türüne karşılık gelen komutu çalıştırın. Kullanıcı tarafından atanan bir kimliği etkinleştirdiyseniz, kimliğin istemci kimliğiyle geçin --use-identity
. Sistem tarafından atanan bir kimliği etkinleştirdiyseniz, geçirin --use-identity [system]
.
# Add credentials for user-assigned identity to the task
az acr task credential add \
--name helloworldtask \
--registry myregistry \
--login-server mybaseregistry.azurecr.io \
--use-identity $clientID
# Add credentials for system-assigned identity to the task
az acr task credential add \
--name helloworldtask \
--registry myregistry \
--login-server mybaseregistry.azurecr.io \
--use-identity [system]
Görevi el ile çalıştırma
Yönetilen kimliği etkinleştirdiğiniz görevin başarıyla çalıştığını doğrulamak için az acr task run komutuyla görevi el ile tetikleyin.
az acr task run \
--name helloworldtask \
--registry myregistry
Görev başarıyla çalıştırılırsa, çıkış şuna benzer:
Queued a run with ID: cf10
Waiting for an agent...
2019/06/14 22:47:32 Using acb_vol_dbfbe232-fd76-4ca3-bd4a-687e84cb4ce2 as the home volume
2019/06/14 22:47:39 Creating Docker network: acb_default_network, driver: 'bridge'
2019/06/14 22:47:40 Successfully set up Docker network: acb_default_network
2019/06/14 22:47:40 Setting up Docker configuration...
2019/06/14 22:47:41 Successfully set up Docker configuration
2019/06/14 22:47:41 Logging in to registry: myregistry.azurecr.io
2019/06/14 22:47:42 Successfully logged into myregistry.azurecr.io
2019/06/14 22:47:42 Logging in to registry: mybaseregistry.azurecr.io
2019/06/14 22:47:43 Successfully logged into mybaseregistry.azurecr.io
2019/06/14 22:47:43 Executing step ID: acb_step_0. Timeout(sec): 600, Working directory: '', Network: 'acb_default_network'
2019/06/14 22:47:43 Scanning for dependencies...
2019/06/14 22:47:45 Successfully scanned dependencies
2019/06/14 22:47:45 Launching container with name: acb_step_0
Sending build context to Docker daemon 25.6kB
Step 1/6 : ARG REGISTRY_NAME
Step 2/6 : FROM ${REGISTRY_NAME}/baseimages/node:15-alpine
15-alpine: Pulling from baseimages/node
[...]
Successfully built 41b49a112663
Successfully tagged myregistry.azurecr.io/hello-world:cf10
2019/06/14 22:47:56 Successfully executed container: acb_step_0
2019/06/14 22:47:56 Executing step ID: acb_step_1. Timeout(sec): 600, Working directory: '', Network: 'acb_default_network'
2019/06/14 22:47:56 Pushing image: myregistry.azurecr.io/hello-world:cf10, attempt 1
The push refers to repository [myregistry.azurecr.io/hello-world]
[...]
2019/06/14 22:48:00 Step ID: acb_step_1 marked as successful (elapsed time in seconds: 2.517011)
2019/06/14 22:48:00 The following dependencies were found:
2019/06/14 22:48:00
- image:
registry: myregistry.azurecr.io
repository: hello-world
tag: cf10
digest: sha256:611cf6e3ae3cb99b23fadcd89fa144e18aa1b1c9171ad4a0da4b62b31b4e38d1
runtime-dependency:
registry: mybaseregistry.azurecr.io
repository: baseimages/node
tag: 15-alpine
digest: sha256:e8e92cffd464fce3be9a3eefd1b65dc9cbe2484da31c11e813a4effc6105c00f
git:
git-head-revision: 0f988779c97fe0bfc7f2f74b88531617f4421643
Run ID: cf10 was successful after 32s
Görüntünün derlendiğini ve kayıt defterime başarıyla gönderildiğini doğrulamak için az acr repository show-tags komutunu çalıştırın:
az acr repository show-tags --name myregistry --repository hello-world --output tsv
Örnek çıkış:
cf10
Sonraki adımlar
- ACR görevinde yönetilen kimliği etkinleştirme hakkında daha fazla bilgi edinin.
- ACR Görevleri YAML başvurusuna bakın