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-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}"
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-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}'
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
Azure kaynakları için yönetilen kimlikler hakkında daha fazla bilgi edinin.