Azure Container Instances ile yönetilen kimlikleri kullanma

Kodda gizli dizileri veya kimlik bilgilerini korumadan diğer Azure hizmetleriyle etkileşim kuran Azure Container Instances'ta kod çalıştırmak için Azure kaynaklarının yönetilen kimliklerini kullanın. Bu özellik, Microsoft Entra Id'de otomatik olarak yönetilen bir kimliğe sahip bir Azure Container Instances dağıtımı sağlar.

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

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

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

Yönetilen kimlik neden kullanılır?

Kapsayıcı kodunuzda kimlik bilgilerini yönetmeden Microsoft Entra 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ı desteklemeyen hizmetler için gizli dizileri bir Azure anahtar kasasında depolayabilir 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

Kapsayıcı grubu oluşturduğunuzda, ContainerGroupIdentity özelliğini ayarlayarak bir veya daha fazla yönetilen kimlik etkinleştirin. Ayrıca, bir kapsayıcı grubu çalıştırıldıktan sonra yönetilen kimlikleri etkinleştirebilir veya güncelleştirebilirsiniz; 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'yı, Resource Manager şablonunu, YAML dosyasını veya başka bir Azure aracını kullanın.

Azure Container Instances, yönetilen Azure kimliklerinin her iki türünü de destekler: kullanıcı tarafından atanan ve sistem tarafından atanan. Kapsayıcı grubunda, sistem tarafından atanan bir kimliği, bir veya daha fazla kullanıcı tarafından atanan kimliği veya her iki kimlik türünü de etkinleştirebilirsiniz. Azure kaynakları için yönetilen kimlikleri bilmiyorsanız genel bakışa bakın.

Yönetilen kimlik kullanma

Yönetilen kimlik kullanmak için, kimliğe abonelikteki bir veya daha fazla Azure hizmet kaynağına (web uygulaması, anahtar kasası veya depolama hesabı gibi) erişim verilmelidir. Çalışan bir kapsayıcıda yönetilen kimlik kullanmak, Azure Sanal Makinesi'nde (VM) kimlik kullanmaya benzer. Belirteç, Azure PowerShell veya Azure CLI ya da Azure SDK'ları kullanmak için VM kılavuzuna bakın.

Önkoşullar

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • 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. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısı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'nın 2.0.49 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanılıyorsa en son sürüm zaten yüklüdür.

Azure anahtar kasası oluşturma

Bu makaledeki örneklerde azure anahtar kasası gizli dizisine erişmek için Azure Container Instances'ta yönetilen kimlik kullanılı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

Bir 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 depolayın :

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

Azure Container Instances'ta 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 edin.

Örnek 1: Azure anahtar kasasına erişmek için kullanıcı tarafından atanan bir kimlik kullanma

Kimlik oluşturma

önce az identity create komutunu kullanarak aboneliğinizde bir kimlik oluşturun . Anahtar kasasını oluşturmak için kullanılan kaynak grubunu kullanabilir veya farklı bir kaynak grubu 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 depolayın.

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

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

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

Anahtar kasasında 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ından gizli dizileri almasına izin verir:

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

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

Microsoft'un azure-cli görüntüsünü temel alan bir kapsayıcı örneği oluşturmak için aşağıdaki az container create komutunu çalıştırın. Bu örnek, diğer Azure hizmetlerine erişmek üzere Azure CLI'yi ç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'yı kullanma örneği için bkz . Kapsayıcı grubunda sistem tarafından atanan kimliği etkinleştirme.

--assign-identity parametresi, kullanıcı tarafından atanan yönetilen kimliğinizi gruba geçirir. Uzun süre çalışan komut kapsayıcıyı çalışır durumda tutar. Bu örnek, anahtar kasasını oluşturmak için kullanılan kaynak grubunu kullanır, ancak farklı bir kaynak grubu belirtebilirsiniz.

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

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

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

identity Çıktıdaki bölüm aşağıdakine benzer şekilde görünür ve kimliğin kapsayıcı grubunda ayarlandığını gösterir. principalID altındauserAssignedIdentities, Microsoft Entra Id'de oluşturduğunuz kimliğin hizmet sorumlusudur:

[...]
"identity": {
    "principalId": "null",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/danlep1018/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {
        "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222"
      }
    }
  },
[...]

Anahtar kasasından gizli dizi 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ğindeki yönetilen kimliği kullanabilirsiniz. İlk olarak kapsayıcıda bir bash kabuğu başlatın:

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

Kapsayıcıdaki bash kabuğunda aşağıdaki komutları çalıştırın. Anahtar kasasında kimlik doğrulaması yapmak üzere Microsoft Entra Id kullanmak üzere bir erişim belirteci almak için aşağıdaki komutu çalıştırın:

client_id="00001111-aaaa-2222-bbbb-3333cccc4444"
curl "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net&client_id=$client_id" -H Metadata:true -s

Çıktı:

{"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 belirtecini kimlik doğrulaması için sonraki komutlarda kullanılacak 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 dizi okumak için erişim belirtecini kullanın. URL'de anahtar kasanızın adını (https://mykeyvault.vault.azure.net/...):

curl https://mykeyvault.vault.azure.net/secrets/SampleSecret/?api-version=7.4 -H "Authorization: Bearer $TOKEN"

Yanıt aşağıdakine benzer ve gizli diziyi gösterir. Kodunuzda bu çıkışı ayrıştırarak gizli diziyi elde edebilirsiniz. Ardından, başka bir Azure kaynağına erişmek için gizli diziyi sonraki bir işlemde 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 anahtar kasasına erişmek için sistem tarafından atanan bir kimlik kullanma

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

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

Ek --assign-identity değer içermeyen parametresi, grupta sistem tarafından atanan yönetilen kimliği etkinleştirir. Kimliğin kapsamı kapsayıcı grubunun kaynak grubuna göre belirlenmiştir. Uzun süre çalışan komut kapsayıcıyı çalışır durumda tutar. 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
RG_ID=$(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 $RG_ID \
  --command-line "tail -f /dev/null"

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

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

identity Çıktıdaki bölüm aşağıdakine benzer şekilde görünür ve Microsoft Entra Id'de sistem tarafından atanan bir kimliğin oluşturulduğunu gösterir:

[...]
"identity": {
    "principalId": "bbbbbbbb-cccc-dddd-2222-333333333333",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "type": "SystemAssigned",
    "userAssignedIdentities": null
},
[...]

Sonraki adımlarda kullanmak üzere kimliğin principalId değerine (hizmet sorumlusu kimliği) bir değişken ayarlayın.

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

Anahtar kasasına kapsayıcı grubu erişimi verme

Anahtar kasasında 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ından gizli diziler almasına izin verir:

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

Anahtar kasasından gizli dizi almak için kapsayıcı grubu kimliğini kullanma

Artık yönetilen kimliği kullanarak çalışan kapsayıcı örneğindeki anahtar kasasına erişebilirsiniz. İlk olarak kapsayıcıda bir bash kabuğu başlatın:

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

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

az login --identity

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

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

Gizli anahtarın değeri alınır:

"Hello Container Instances"

Resource Manager şablonunu kullanarak yönetilen kimliği etkinleştirme

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

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

Kullanıcı tarafından atanan bir veya daha fazla kimliği etkinleştirebilirsiniz.

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

Sistem tarafından atanan kimlik

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

Sistem ve kullanıcı tarafından atanan kimlikler

Kapsayıcı grubunda, hem sistem tarafından atanan kimliği hem de kullanıcı tarafından atanan bir veya daha fazla kimliği etkinleştirebilirsiniz.

"identity": {
    "type": "SystemAssigned, 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çin aşağıdaki YAML'yi ekleyin. En az apiVersion değerini 2018-10-01belirtin.

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}'

Kullanıcı tarafından atanan bir veya daha fazla kimliği etkinleştirebilirsiniz.

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

Sistem tarafından atanan kimlik

identity:
  type: SystemAssigned

Sistem ve kullanıcı tarafından atanan kimlikler

Kapsayıcı grubunda, hem sistem tarafından atanan kimliği hem de kullanıcı tarafından atanan bir veya daha fazla kimliği etkinleştirebilirsiniz.

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

Windows kapsayıcılarında Yönetilen Kimlik

Windows kapsayıcı gruplarında Yönetilen Kimlik, Linux kapsayıcı gruplarından farklı çalışır. Windows kapsayıcıları için meta veri sunucusu (169.254.169.254) Microsoft Entra Id belirtecini almak için kullanılamaz. Müşteriler, Windows kapsayıcılarında erişim belirtecini almak için farklı bir desen izleyebilir. Desen, aşağıda gösterildiği gibi asıl kimlik ve gizli dizi gibi ek bilgilerle birlikte IDENTITY_ENDPOINT belirteç isteği göndermeyi içerir. IDENTITY_ENDPOINT ve IDENTITY_HEADER kapsayıcınıza ortam değişkeni olarak eklenir.

curl -G -v %IDENTITY_ENDPOINT% --data-urlencode resource=https://vault.azure.net --data-urlencode principalId=<principal id> -H secret:%IDENTITY_HEADER%

Örnek powershell betiği

identityEndpoint = $env:IDENTITY_ENDPOINT
$identityHeader = $env:IDENTITY_HEADER
$resource = "https://vault.azure.net"
$principalId = "b2ee9347-623c-4794-85af-2d5261356f67"
 
Invoke-RestMethod -Uri "$identityEndpoint" `
    -Method Get `
    -Headers @{secret = $identityHeader} `
    -Body @{resource = $resource; principalId = $principalId} `
    -ContentType "application/x-www-form-urlencoded"

Az Login modülü ve meta veri sunucusuna (169.254.169.254) bağlı olan diğer istemci kitaplıkları windows kapsayıcısında çalışmaz. Buna ek olarak, vNet'teki Windows kapsayıcıları uç noktaya bağlanamaz; bu nedenle, yönetilen kimlik belirteci bir Windows sanal ağ kapsayıcısında oluşturulamaz.

Sonraki adımlar

Bu makalede, Azure Container Instances'ta yönetilen kimlikler ve nasıl yapılacağını öğrendiniz:

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