Dağıtım verilerini şifreleme
Bulutta Azure Container Instances (ACI) kaynaklarını çalıştırdığınızda, ACI hizmeti kapsayıcılarınızla ilgili verileri toplar ve kalıcı hale toplar. ACI, bulutta kalıcı hale geldiğinde bu verileri otomatik olarak şifreler. Bu şifreleme, kuruluşunuzun güvenlik ve uyumluluk taahhütlerini karşılamaya yardımcı olmak için verilerinizi korur. ACI ayrıca bu verileri kendi anahtarınız ile şifreleme seçeneği sunarak ACI dağıtımlarınızla ilgili veriler üzerinde daha fazla denetim sahibi olmanıza neden olabilir.
ACI veri şifrelemesi
ACI'deki veriler 256 bit AES şifrelemesi kullanılarak şifrelenir ve şifresi çözülür. Tüm ACI dağıtımları için etkinleştirilir ve bu şifrelemeden yararlanmak için dağıtımınızı veya kapsayıcılarınızı değiştirmeniz gerekmez. Bu kapsam dağıtım, ortam değişkenleri, kapsayıcılarınıza geçirilen anahtarlar ve kapsayıcılarınız durdurulduktan sonra kalıcı günlükler hakkındaki meta verileri içerir, böylece bunları görmeye devam edebilirsiniz. Şifreleme kapsayıcı grubu performansınızı etkilemez ve şifreleme için başka bir maliyet yoktur.
Kapsayıcı verilerinizi şifrelemek için Microsoft tarafından yönetilen anahtarlara güvenebilir veya şifrelemeyi kendi anahtarlarınızla yönetebilirsiniz. Aşağıdaki tablo bu seçenekleri karşılaştırır:
Microsoft tarafından yönetilen anahtarlar | Müşteri tarafından yönetilen anahtarlar | |
---|---|---|
Şifreleme/şifre çözme işlemleri | Azure | Azure |
Anahtar depolama | Microsoft anahtar deposu | Azure Key Vault |
Anahtar döndürme sorumluluğu | Microsoft | Customer |
Anahtar erişimi | Yalnızca Microsoft | Microsoft, Müşteri |
Bu makalede, verileri müşteri tarafından yönetilen bir anahtarla şifrelemek için iki akış incelenir:
- Standart Azure Key Vault'ta depolanan müşteri tarafından yönetilen bir anahtarla verileri şifreleme
- Güvenilen Hizmetler'in etkinleştirildiği, ağ korumalı bir Azure Key Vault'ta depolanan müşteri tarafından yönetilen bir anahtarla verileri şifreleyin.
Standart Azure Key Vault'ta depolanan müşteri tarafından yönetilen bir anahtarla verileri şifreleme
Ö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.
ACI için Hizmet Sorumlusu Oluşturma
İlk adım, Azure kiracınızın Azure Container Instances hizmetine izin vermek için atanmış bir hizmet sorumlusuna sahip olduğundan emin olmaktır.
Önemli
Aşağıdaki komutu çalıştırmak ve başarıyla bir hizmet sorumlusu oluşturmak için kiracınızda hizmet sorumluları oluşturma izinlerinizin olduğunu onaylayın.
Aşağıdaki CLI komutu, Azure ortamınızda ACI SP'yi ayarlar:
az ad sp create --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
Bu komutu çalıştırma çıktısı size "displayName" ile ayarlanmış bir hizmet sorumlusu göstermelidir: "Azure Container Instance Service."
Hizmet sorumlusunu başarıyla oluşturamıyorsanız:
- kiracınızda bunu yapma izinlerinizin olduğunu onaylayın
- ACI'ye dağıtmak üzere kiracınızda zaten bir hizmet sorumlusu olup olmadığını denetleyin. Bunun yerine bu hizmet sorumlusunu çalıştırarak
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
ve kullanarak bunu yapabilirsiniz
Key Vault kaynağı oluşturma
Azure portalını, Azure CLI'yi veya Azure PowerShell'i kullanarak Azure Key Vault oluşturun.
Anahtar kasanızın özellikleri için aşağıdaki yönergeleri kullanın:
- Ad: Benzersiz bir ad gereklidir.
- Abonelik: Bir abonelik seçin.
- Kaynak Grubu'nun altında var olan bir kaynak grubunu seçin veya yeni oluşturup bir kaynak grubu adı girin.
- Konum açılır menüsünden bir konum seçin.
- Diğer seçenekleri varsayılanlarına bırakabilir veya ek gereksinimlere göre seçebilirsiniz.
Önemli
ACI dağıtım şablonunu şifrelemek için müşteri tarafından yönetilen anahtarlar kullanılırken, anahtar kasasında aşağıdaki iki özelliğin ayarlanması önerilir: Geçici Silme ve Temizleme. Bu özellikler varsayılan olarak etkinleştirilmez, ancak yeni veya mevcut bir anahtar kasasında PowerShell veya Azure CLI kullanılarak etkinleştirilebilir.
Yeni anahtar oluşturma
Anahtar kasanız oluşturulduktan sonra Azure portalında kaynağa gidin. Kaynak dikey penceresinin sol gezinti menüsünde, Ayarlar'ın altında Anahtarlar'ı seçin. "Anahtarlar" görünümünde "Oluştur/İçeri Aktar" seçeneğini belirleyerek yeni bir anahtar oluşturun. Bu anahtar için herhangi bir benzersiz Ad kullanın ve gereksinimlerinize göre diğer tercihleri kullanın.
Erişim ilkesini ayarlama
ACI hizmetinin Anahtarınıza erişmesine izin vermek için yeni bir erişim ilkesi oluşturun.
- Anahtarınız oluşturduktan sonra anahtar kasası kaynak dikey pencerenize dönün ve Ayarlar'ın altında Erişim İlkeleri'ni seçin.
- Anahtar kasanızın "Erişim İlkeleri" sayfasında Erişim İlkesi Ekle'yi seçin.
- Anahtar İzinlerini Get ve Unwrap Anahtarını içerecek şekilde ayarlayın
- Sorumlu Seç için Azure Container Instance Service'i seçin
- En alttaki Ekle'yi seçin
Erişim ilkesi artık anahtar kasanızın erişim ilkelerinde görünmelidir.
JSON dağıtım şablonunuzu değiştirme
Önemli
Dağıtım verilerini müşteri tarafından yönetilen bir anahtarla şifrelemek, şu anda kullanıma sunulan en son API sürümünde (2019-12-01) kullanılabilir. Dağıtım şablonunuzda bu API sürümünü belirtin. Bununla ilgili herhangi bir sorun yaşıyorsanız lütfen Azure Desteği'ne ulaşın.
Anahtar kasası anahtarı ve erişim ilkesi ayarlandıktan sonra ACI dağıtım şablonunuza aşağıdaki özellikleri ekleyin. ACI kaynaklarını şablonla dağıtma hakkında daha fazla bilgi edinmek için Öğretici: Resource Manager şablonu kullanarak çok kapsayıcılı bir grup dağıtma.
- altında
resources
olarak ayarlayınapiVersion
2019-12-01
. - Dağıtım şablonunun kapsayıcı grubu özellikleri bölümünün altında, aşağıdaki değerleri içeren bir
encryptionProperties
ekleyin:vaultBaseUrl
: Portalda anahtar kasası kaynağının genel bakış dikey penceresinde bulunan anahtar kasanızın DNS AdıkeyName
: daha önce oluşturulan anahtarın adıkeyVersion
: anahtarın geçerli sürümü. Bu alan anahtarın kendisine giderek bulunabilir (anahtar kasası kaynağınızın Ayarlar bölümündeki "Anahtarlar" bölümünde)
- Kapsayıcı grubu özelliklerinin altında değerine
Standard
sahip birsku
özellik ekleyin.sku
özelliği API sürüm 2019-12-01'de gereklidir.
Aşağıdaki şablon parçacığı, dağıtım verilerini şifrelemek için bu ek özellikleri gösterir:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Öğretici: Resource Manager şablonu kullanarak çok kapsayıcılı bir grup dağıtma bölümünde yer alan şablondan uyarlanmış eksiksiz bir şablon aşağıdadır.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Kaynaklarınızı dağıtma
Şablon dosyasını masaüstünüzde oluşturup düzenlediyseniz, dosyayı içine sürükleyerek Cloud Shell dizininize yükleyebilirsiniz.
az group create komutuyla bir kaynak grubu oluşturun.
az group create --name myResourceGroup --location eastus
şablonu az deployment group create komutuyla dağıtın.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
Birkaç saniye içinde Azure’dan bir ilk yanıt almanız gerekir. Dağıtım tamamlandıktan sonra, ACI hizmeti tarafından kalıcı hale gelen onunla ilgili tüm veriler sağladığınız anahtarla şifrelenir.
Güvenilen Hizmetler etkinken ağ korumalı Azure Key Vault'ta müşteri tarafından yönetilen bir anahtarla verileri şifreleme
Key Vault kaynağı oluşturma
Azure portalını, Azure CLI'yi veya Azure PowerShell'i kullanarak Azure Key Vault oluşturun. Başlamak için, kasaya gerekli anahtarları ekleyebilmemiz için herhangi bir ağ sınırlaması uygulamayın. Sonraki adımlarda ağ sınırlamaları ekler ve güvenilen hizmetleri etkinleştiririz.
Anahtar kasanızın özellikleri için aşağıdaki yönergeleri kullanın:
- Ad: Benzersiz bir ad gereklidir.
- Abonelik: Bir abonelik seçin.
- Kaynak Grubu'nun altında var olan bir kaynak grubunu seçin veya yeni oluşturup bir kaynak grubu adı girin.
- Konum açılır menüsünden bir konum seçin.
- Diğer seçenekleri varsayılanlarına bırakabilir veya ek gereksinimlere göre seçebilirsiniz.
Önemli
ACI dağıtım şablonunu şifrelemek için müşteri tarafından yönetilen anahtarlar kullanılırken, anahtar kasasında aşağıdaki iki özelliğin ayarlanması önerilir: Geçici Silme ve Temizleme. Bu özellikler varsayılan olarak etkinleştirilmez, ancak yeni veya mevcut bir anahtar kasasında PowerShell veya Azure CLI kullanılarak etkinleştirilebilir.
Yeni anahtar oluşturma
Anahtar kasanız oluşturulduktan sonra Azure portalında kaynağa gidin. Kaynak dikey penceresinin sol gezinti menüsünde, Ayarlar'ın altında Anahtarlar'ı seçin. "Anahtarlar" görünümünde "Oluştur/İçeri Aktar" seçeneğini belirleyerek yeni bir anahtar oluşturun. Bu anahtar için herhangi bir benzersiz Ad kullanın ve gereksinimlerinize göre diğer tercihleri kullanın. Sonraki adımlar için anahtar adını ve sürümünü yakaladığıdan emin olun.
Kapsayıcı grubunuz için kullanıcı tarafından atanan yönetilen kimlik oluşturma
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
spID=$(az identity show \
--resource-group myResourceGroup \
--name myACIId \
--query principalId --output tsv)
Erişim ilkesini ayarlama
Kullanıcı tarafından atanan kimliğin şifreleme amacıyla anahtarınıza erişmesine ve anahtarınızı açmasına izin vermek için yeni bir erişim ilkesi oluşturun.
az keyvault set-policy \
--name mykeyvault \
--resource-group myResourceGroup \
--object-id $spID \
--key-permissions get unwrapKey
Azure Key Vault'un ağ izinlerini değiştirme
Aşağıdaki komutlar Azure Key Vault'unuz için bir Azure Güvenlik Duvarı ayarlar ve ACI gibi Azure Güvenilen Hizmetler'e erişim izni verir.
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--default-action Deny
az keyvault update \
--name mykeyvault \
--resource-group myResourceGroup \
--bypass AzureServices
JSON dağıtım şablonunuzu değiştirme
Önemli
Dağıtım verilerini müşteri tarafından yönetilen bir anahtarla şifreleme, 2022-09-01 API sürümünde veya daha yeni bir sürümde kullanılabilir. 2022-09-01 API sürümü yalnızca ARM veya REST aracılığıyla kullanılabilir. Bununla ilgili herhangi bir sorun yaşıyorsanız lütfen Azure Desteği'ne ulaşın. Anahtar kasası anahtarı ve erişim ilkesi ayarlandıktan sonra ACI dağıtım şablonunuza aşağıdaki özellikleri ekleyin. ACI kaynaklarını şablonla dağıtma hakkında daha fazla bilgi edinmek için Öğretici: Resource Manager şablonu kullanarak çok kapsayıcılı bir grup dağıtma.
- altında
resources
olarak ayarlayınapiVersion
2022-09-01
. - Dağıtım şablonunun kapsayıcı grubu özellikleri bölümünün altında, aşağıdaki değerleri içeren bir
encryptionProperties
ekleyin:vaultBaseUrl
: anahtar kasanızın DNS Adı. Bu özellik Portal'daki anahtar kasası kaynağının genel bakış dikey penceresinde bulunabilirkeyName
: daha önce oluşturulan anahtarın adıkeyVersion
: anahtarın geçerli sürümü. Bu özellik, anahtarın kendisine tıklayarak bulunabilir (anahtar kasası kaynağınızın Ayarlar bölümündeki "Anahtarlar" bölümünde)identity
: Bu özellik, daha önce oluşturulan Yönetilen Kimlik örneğinin kaynak URI'sidir
- Kapsayıcı grubu özelliklerinin altında değerine
Standard
sahip birsku
özellik ekleyin.sku
özelliği API sürüm 2022-09-01'de gereklidir. - Kaynaklar'ın
identity
altında, Aşağıdaki değerleri içeren ACI ile Yönetilen Kimlik'i kullanmak için gereken nesneyi ekleyin:type
: kullanılan kimliğin türü (kullanıcı tarafından atanan veya sistem tarafından atanan). Bu durum "UserAssigned" olarak ayarlanmıştıruserAssignedIdentities
: nesnesinde kullanılan kullanıcı tarafından atanan kimliğin resourceURI'siencryptionProperties
.
Aşağıdaki şablon parçacığı, dağıtım verilerini şifrelemek için bu ek özellikleri gösterir:
[...]
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": {
[...]
}
}
}
]
Öğretici: Resource Manager şablonu kullanarak çok kapsayıcılı bir grup dağıtma bölümünde yer alan şablondan uyarlanmış eksiksiz bir şablon aşağıdadır.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2022-09-01",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId": {}
}
},
"properties": {
"encryptionProperties": {
"vaultBaseUrl": "https://example.vault.azure.net",
"keyName": "acikey",
"keyVersion": "xxxxxxxxxxxxxxxx",
"identity": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXX/resourcegroups/XXXXXXXXXXXXXXXXXXXXXX/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACIId"
},
"sku": "Standard",
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
},
{
"protocol": "tcp",
"port": "8080"
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
Kaynaklarınızı dağıtma
Şablon dosyasını masaüstünüzde oluşturup düzenlediyseniz, dosyayı içine sürükleyerek Cloud Shell dizininize yükleyebilirsiniz.
az group create komutuyla bir kaynak grubu oluşturun.
az group create --name myResourceGroup --location eastus
şablonu az deployment group create komutuyla dağıtın.
az deployment group create --resource-group myResourceGroup --template-file deployment-template.json
Birkaç saniye içinde Azure’dan bir ilk yanıt almanız gerekir. Dağıtım tamamlandıktan sonra, ACI hizmeti tarafından kalıcı hale gelen onunla ilgili tüm veriler sağladığınız anahtarla şifrelenir.