Azure Container Instances ile yönetilen kimlikleri kullanma

Kodda gizli dizileri veya kimlik bilgilerini saklamadan diğer Azure Azure Container Instances etkileşimde bulunan bir kaynakta kod çalıştırmak için Azure kaynakları için yönetilen kimlikleri kullanın. Bu özellik, Azure Container Instances yönetilen bir kimlikle bir dağıtım Azure Active Directory.

Bu makalede, yönetilen kimlikler hakkında daha fazla bilgi Azure Container Instances ve:

  • Kapsayıcı grubunda kullanıcı tarafından atanan veya sistem tarafından atanan kimliği etkinleştirme
  • Azure anahtar kasasına kimlik erişimi izni ver
  • Çalışan bir kapsayıcıdan anahtar kasasına erişmek için yönetilen kimliği kullanma

Diğer Azure hizmetlerinden kimlikleri etkinleştirmek ve kullanmak Azure Container Instances örnekleri uyarlar. Bu örnekler etkileşimlidir. Ancak pratikte kapsayıcı görüntüleriniz Azure hizmetlerine erişmek için kod çalıştırabilir.

Önemli

Bu özellik şu anda önizleme sürümündedir. Önizlemeler, ek kullanım koşullarını kabul etmeniz şartıyla kullanımınıza sunulur. Bu özelliğin bazı yönleri genel kullanıma açılmadan önce değişebilir. Şu anda, Azure Container Instances yönetilen kimlikler yalnızca Linux kapsayıcılarında desteklemektedir ve henüz Windows desteklemektedir.

Yönetilen kimlik neden kullansın?

Kapsayıcı kodunda kimlik bilgilerini yönetmeden Azure AD kimlik doğrulamasını destekleyen herhangi bir hizmette kimlik doğrulaması yapmak için çalışan bir kapsayıcıda yönetilen kimlik kullanın. AD kimlik doğrulamasını desteklemeen hizmetler için gizli dizileri bir Azure anahtar kasasında depolar ve kimlik bilgilerini almak üzere anahtar kasasına erişmek için yönetilen kimliği kullanabilirsiniz. Yönetilen kimlik kullanma hakkında daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nedir?

Yönetilen kimliği etkinleştirme

Bir kapsayıcı grubu sanız, ContainerGroupIdentity özelliğini ayarerek bir veya daha fazla yönetilen kimliği etkinleştirin. Bir kapsayıcı grubu çalıştırildikten sonra yönetilen kimlikleri etkinleştir veya güncelleştir de; her iki eylem de kapsayıcı grubunun yeniden başlatılmasına neden olur. Yeni veya mevcut bir kapsayıcı grubunda kimlikleri ayarlamak için Azure CLI, Resource Manager şablonu, YAML dosyası veya başka bir Azure aracı kullanın.

Azure Container Instances yönetilen Azure kimliklerinin her iki türü de destekler: kullanıcı tarafından atanan ve sistem tarafından atanan. Bir kapsayıcı grubunda sistem tarafından atanan kimliği, bir veya daha fazla kullanıcı tarafından atanan kimliği veya her iki kimlik türlerini de etkinleştirabilirsiniz. Azure kaynakları için yönetilen kimlikler hakkında bilginiz yoksa bkz. genel bakış.

Yönetilen kimlik kullanma

Yönetilen kimlik kullanmak için, kimlike abonelikte bir veya daha fazla Azure hizmet kaynağına (web uygulaması, anahtar kasası veya depolama hesabı gibi) erişim izni verilmesi gerekir. Çalışan bir kapsayıcıda yönetilen kimlik kullanmak, Azure VM'sinde kimlik kullanmaya benzer. Belirteç, Azure PowerShell veya Azure CLI veya Azure SDK'larıkullanmaya yönelik VM kılavuzuna bakın.

Sınırlamalar

  • Şu anda bir sanal ağa dağıtılmış bir kapsayıcı grubunda yönetilen kimlik kullanaabilirsiniz.
  • Kapsayıcı grubu oluştururken yönetilen kimlik kullanarak Azure Container Registry görüntü çekebilirsiniz. Kimlik yalnızca çalışan bir kapsayıcı içinde kullanılabilir.

Önkoşullar

  • Azure Cloud Shell'Da Bash ortamını kullanın.

    Cloud Shell’i yeni bir pencerede başlatma

  • Dilerseniz CLI başvuru komutlarını çalıştırmak için Azure CLI’yi yükleyebilirsiniz.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Ek oturum açma seçenekleri için bkz. Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantılarını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makale, Azure CLI'nin 2.0.49 veya sonraki bir sürümünü gerektirir. Bu Azure Cloud Shell, en son sürüm zaten yüklüdür.

Azure anahtar kasası oluşturma

Bu makaledeki örneklerde azure anahtar kasası gizli Azure Container Instances için yönetilen kimlik lanmıştır.

İlk olarak aşağıdaki az group create komutunu kullanarak eastus bölgesinde myResourceGroup adlı bir kaynak grubu oluşturun:

az group create --name myResourceGroup --location eastus

Anahtar kasası oluşturmak için az keyvault create komutunu kullanın. Benzersiz bir anahtar kasası adı belirttiğinizden emin olun.

az keyvault create \
  --name mykeyvault \
  --resource-group myResourceGroup \ 
  --location eastus

az keyvault secret set komutunu kullanarak anahtar kasasında örnek bir gizli dizi depolar:

az keyvault secret set \
  --name SampleSecret \
  --value "Hello Container Instances" \
  --description ACIsecret --vault-name mykeyvault

Kullanıcı tarafından atanan veya sistem tarafından atanan yönetilen kimliği kullanarak anahtar kasasına erişmek için aşağıdaki örneklerle devam Azure Container Instances.

Örnek 1: Azure Key Vault'a erişmek için kullanıcı tarafından atanan kimlik kullanma

Kimlik oluşturma

İlk olarak az identity create komutunu kullanarak aboneliğinize bir kimlik oluşturun. Anahtar kasasını oluşturmak için kullanılan kaynak grubunu veya farklı bir kaynak grubunu kullanabilirsiniz.

az identity create \
  --resource-group myResourceGroup \
  --name myACIId

Aşağıdaki adımlarda kimliği kullanmak için az identity show komutunu kullanarak kimliğin hizmet sorumlusu kimliğini ve kaynak kimliğini değişkenlerde depolar.

# Get service principal ID of the user-assigned identity
spID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query principalId --output tsv)

# Get resource ID of the user-assigned identity
resourceID=$(az identity show \
  --resource-group myResourceGroup \
  --name myACIId \
  --query id --output tsv)

Anahtar kasasına kullanıcı tarafından atanan kimlik erişimi izni ver

Anahtar kasasında bir erişim ilkesi ayarlamak için aşağıdaki az keyvault set-policy komutunu çalıştırın. Aşağıdaki örnek, kullanıcı tarafından atanan kimliğin anahtar kasasında gizli dizileri alamasını sağlar:

 az keyvault set-policy \
    --name mykeyvault \
    --resource-group myResourceGroup \
    --object-id $spID \
    --secret-permissions get

Kapsayıcı grubunda kullanıcı tarafından atanan kimliği etkinleştirme

Microsoft'un görüntüsünü temel alan bir kapsayıcı örneği oluşturmak için aşağıdaki az container create komutunu azure-cli çalıştırın. Bu örnek, diğer Azure hizmetlerine erişmek üzere Azure CLI'sini çalıştırmak için etkileşimli olarak kullanabileceğiniz tek kapsayıcılı bir grup sağlar. Bu bölümde yalnızca temel işletim sistemi kullanılır. Kapsayıcıda Azure CLI kullanma örneği için bkz. Bir kapsayıcıgrubunda sistem tarafından atanan kimliği etkinleştirme.

--assign-identityparametresi, kullanıcı tarafından atanan yönetilen kimliğinizi gruba iletir. Uzun süre çalışan komut, kapsayıcıyı çalıştırmaya devam ediyor. Bu örnekte anahtar kasasını oluşturmak için kullanılan kaynak grubu kullanılmıştır ancak farklı bir tane belirtebilirsiniz.

az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity $resourceID \
  --command-line "tail -f /dev/null"

Birkaç saniye içinde Azure CLI'den dağıtımın tamamlandığını belirten bir yanıt almanız gerekir. durumunu az container show komutuyla kontrol edin.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

Çıktıda identity yer alan bölüm aşağıdakine benzer ve kapsayıcı grubunda kimliğin ayar olduğunu gösteriyor. principalIDaltında, userAssignedIdentities Azure Active Directory'de oluşturduğunuz kimliğin hizmet Azure Active Directory:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/xxxxxxxx-0903-4b79-a55a-xxxxxxxxxxxx/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "xxxxxxxx-5523-45fc-9f49-xxxxxxxxxxxx",
        "principalId": "xxxxxxxx-f25b-4895-b828-xxxxxxxxxxxx"
      }
    }
  },
[...]

Anahtar kasasında gizli anahtar almak için kullanıcı tarafından atanan kimliği kullanma

Artık anahtar kasasına erişmek için çalışan kapsayıcı örneğinde yönetilen kimliği kullanabilirsiniz. İlk olarak kapsayıcıda bir Bash kabuğunu başlatma:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Kapsayıcının bash kabuğunda aşağıdaki komutları çalıştırın. Anahtar kasasında kimlik doğrulaması yapmak Azure Active Directory erişim belirteci almak için aşağıdaki komutu çalıştırın:

curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true -s

Çıkış:

{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSIsImtpZCI6Imk2bEdrM0ZaenhSY1ViMkMzbkVRN3N5SEpsWSJ9......xxxxxxxxxxxxxxxxx","refresh_token":"","expires_in":"28799","expires_on":"1539927532","not_before":"1539898432","resource":"https://vault.azure.net/","token_type":"Bearer"}

Erişim belirteci kimlik doğrulaması için sonraki komutlarda kullanmak üzere bir değişkende depolamak için aşağıdaki komutu çalıştırın:

token=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true | jq -r '.access_token')

Şimdi anahtar kasasında kimlik doğrulaması yapmak ve bir gizli anahtarı okumak için erişim belirteci kullanın. URL'de anahtar kasanızı adını değiştir (https: / /mykeyvault.vault.azure.net/... ) olduğundan emin olun:

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=2016-10-01 -H "Authorization: Bearer $token"

Yanıt aşağıdakine benzer ve gizli bilgileri gösteriyor. Kodunda, bu çıkışı ayrıştırarak gizli kodu elde edin. Daha sonra, başka bir Azure kaynağına erişmek için sonraki bir işlemde gizli adı kullanın.

{"value":"Hello Container Instances","contentType":"ACIsecret","id":"https://mykeyvault.vault.azure.net/secrets/SampleSecret/xxxxxxxxxxxxxxxxxxxx","attributes":{"enabled":true,"created":1539965967,"updated":1539965967,"recoveryLevel":"Purgeable"},"tags":{"file-encoding":"utf-8"}}

Örnek 2: Azure Key Vault'a erişmek için sistem tarafından atanan kimlik kullanma

Kapsayıcı grubunda sistem tarafından atanan kimliği etkinleştirme

Microsoft'un görüntüsünü temel alan bir kapsayıcı örneği oluşturmak için aşağıdaki az container create komutunu azure-cli çalıştırın. Bu örnek, diğer Azure hizmetlerine erişmek üzere Azure CLI'sini çalıştırmak için etkileşimli olarak kullanabileceğiniz tek kapsayıcılı bir grup sağlar.

Ek --assign-identity değer olmayan parametresi, grupta sistem tarafından atanan yönetilen kimliği sağlar. Kimliğin kapsamı kapsayıcı grubunun kaynak grubuyla birliktedir. Uzun süre çalışan komut, kapsayıcıyı çalıştırmaya devam ediyor. Bu örnek, kimlik kapsamındaki anahtar kasasını oluşturmak için kullanılan kaynak grubunu kullanır.

# Get the resource ID of the resource group
rgID=$(az group show --name myResourceGroup --query id --output tsv)

# Create container group with system-managed identity
az container create \
  --resource-group myResourceGroup \
  --name mycontainer \
  --image mcr.microsoft.com/azure-cli \
  --assign-identity --scope $rgID \
  --command-line "tail -f /dev/null"

Birkaç saniye içinde Azure CLI'den dağıtımın tamamlandığını belirten bir yanıt almanız gerekir. durumunu az container show komutuyla kontrol edin.

az container show \
  --resource-group myResourceGroup \
  --name mycontainer

Çıktıda yer alan bölüm aşağıdakine benzer şekilde görünüyor ve bu bölümde sistem identity tarafından atanan bir kimliğin Azure Active Directory:

[...]
"identity": {
    "principalId": "xxxxxxxx-528d-7083-b74c-xxxxxxxxxxxx",
    "tenantId": "xxxxxxxx-f292-4e60-9122-xxxxxxxxxxxx",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

Değişkeni, sonraki adımlarda kullanmak üzere kimliğin değerine principalId (hizmet sorumlusu kimliği) ayarlayın.

spID=$(az container show \
  --resource-group myResourceGroup \
  --name mycontainer \
  --query identity.principalId --out tsv)

Anahtar kasasına kapsayıcı grubuna erişim izni ver

Anahtar kasasında bir erişim ilkesi ayarlamak için aşağıdaki az keyvault set-policy komutunu çalıştırın. Aşağıdaki örnek, sistem tarafından yönetilen kimliğin anahtar kasasında gizli dizileri alamasını sağlar:

 az keyvault set-policy \
   --name mykeyvault \
   --resource-group myResourceGroup \
   --object-id $spID \
   --secret-permissions get

Anahtar kasasında gizli anahtar almak için kapsayıcı grubu kimliğini kullanma

Artık çalışan kapsayıcı örneğinde anahtar kasasına erişmek için yönetilen kimliği kullanabilirsiniz. İlk olarak kapsayıcıda bir Bash kabuğunu başlatma:

az container exec \
  --resource-group myResourceGroup \
  --name mycontainer \
  --exec-command "/bin/bash"

Kapsayıcının bash kabuğunda aşağıdaki komutları çalıştırın. İlk olarak yönetilen kimliği kullanarak Azure CLI'da oturum açma:

az login --identity

Çalışan kapsayıcıdan anahtar kasasında gizli anahtarı alın:

az keyvault secret show \
  --name SampleSecret \
  --vault-name mykeyvault --query value

Gizli kodun değeri alınır:

"Hello Container Instances"

Yönetilen kimliği Resource Manager etkinleştirme

Bir kapsayıcı grubunda yönetilen kimliği bir Resource Manager kullanarak etkinleştirmek içinnesnesinin özelliğini bir identity Microsoft.ContainerInstance/containerGroups nesnesiyle ContainerGroupIdentity ayarlayın. Aşağıdaki kod parçacıkları, farklı identity senaryolar için yapılandırılan özelliği gösterir. Bkz. Resource Manager şablonu başvurusu. En az apiVersion 2018-10-01 belirtin.

Kullanıcı tarafından atanan kimlik

Kullanıcı tarafından atanan kimlik, formun kaynak kimliğidir:

"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}"

Bir veya daha fazla kullanıcı tarafından atanan kimliği etkinleştirin.

"identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }

Sistem tarafından atanan kimlik

"identity": {
    "type": "SystemAssigned"
    }

Sistem ve kullanıcı tarafından atanan kimlikler

Bir kapsayıcı grubunda hem sistem tarafından atanan kimliği hem de bir veya daha fazla kullanıcı tarafından atanan kimliği etkinleştirabilirsiniz.

"identity": {
    "type": "System Assigned, UserAssigned",
    "userAssignedIdentities": {
        "myResourceID1": {
            }
        }
    }
...

YAML dosyasını kullanarak yönetilen kimliği etkinleştirme

YAML dosyası kullanılarak dağıtılan bir kapsayıcı grubunda yönetilen kimliği etkinleştirmek içinaşağıdaki YAML'yi dahil edin. En az apiVersion 2018-10-01 belirtin.

Kullanıcı tarafından atanan kimlik

Kullanıcı tarafından atanan kimlik, formun kaynak kimliğidir

'/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'

Bir veya daha fazla kullanıcı tarafından atanan kimliği etkinleştirin.

identity:
  type: UserAssigned
  userAssignedIdentities:
    {'myResourceID1':{}}

Sistem tarafından atanan kimlik

identity:
  type: SystemAssigned

Sistem ve kullanıcı tarafından atanan kimlikler

Bir kapsayıcı grubunda hem sistem tarafından atanan kimliği hem de bir veya daha fazla kullanıcı tarafından atanan kimliği etkinleştirabilirsiniz.

identity:
  type: SystemAssigned, UserAssigned
  userAssignedIdentities:
   {'myResourceID1':{}}

Sonraki adımlar

Bu makalede, yönetilen kimlikler hakkında bilgi Azure Container Instances şunların nasıl olduğunu öğrendinsiniz:

  • Kapsayıcı grubunda kullanıcı tarafından atanan veya sistem tarafından atanan kimliği etkinleştirme
  • Azure Key Vault'a kimlik erişimi izni ver
  • Çalışan bir kapsayıcıdan anahtar kasasına erişmek için yönetilen kimliği kullanma