Dağıtım verilerini şifreleme
ACI hizmeti, Azure Container Instances (ACI) kaynaklarını bulutta çalıştırırken 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 de sunarak ACI dağıtımlarınızla ilgili veriler üzerinde daha fazla denetim sahibi olmanıza neden oluyor.
ACI veri şifrelemesi hakkında
ACI'daki 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. Buna dağıtım hakkındaki meta veriler, ortam değişkenleri, kapsayıcılarınıza geçirilen anahtarlar ve kapsayıcılarınız durdurulduktan sonra kalıcı hale gelen günlükler dahildir; böylece bunları görmeye devam edebilirsiniz. Şifreleme, kapsayıcı grubu performansınızı etkilemez ve şifreleme için ek 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 | Müşteri |
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:
- Verileri standart bir Azure Key Vault depolanan müşteri tarafından yönetilen bir anahtarla şifreleme
- Güvenilen Hizmetler'in etkinleştirildiği ağ korumalı bir Azure Key Vault depolanan müşteri tarafından yönetilen bir anahtarla verileri şifreleyin.
Verileri standart bir Azure Key Vault depolanan müşteri tarafından yönetilen bir anahtarla ş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'yi 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. Azure CLI'yi Docker kapsayıcısında ç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 hizmet sorumlusunu başarıyla 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ırmanın çı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 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ırıp
az ad sp show --id 6bb8e274-af5d-4df2-98a3-4fd78b4cafd9
kullanabilirsiniz
Key Vault kaynağı oluşturma
Azure portal, Azure CLI veya Azure PowerShell kullanarak AzureKey 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ünde bir konum seçin.
- Diğer seçenekleri varsayılanlarına bırakabilir veya ek gereksinimlere göre seçebilirsiniz.
Önemli
Müşteri tarafından yönetilen anahtarları kullanarak ACI dağıtım şablonunu şifrelerken anahtar kasasında aşağıdaki iki özelliğin ayarlanması önerilir: Geçici Silme ve Temizleme. Bu özellikler varsayılan olarak etkin değildir, 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'da kaynağa gidin. Kaynak dikey penceresinin sol gezinti menüsünde, Ayarlar'ın altında Anahtarlar'a tıklayın. "Anahtarlar" görünümünde "Oluştur/İçeri Aktar" seçeneğine tıklayarak yeni bir anahtar oluşturun. Bu anahtar için herhangi bir benzersiz Ad 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şturulduktan sonra anahtar kasası kaynak dikey pencerenize dönün ve Ayarlar'ın altında Erişim İlkeleri'ne tıklayın.
- Anahtar kasanızın "Erişim İlkeleri" sayfasında Erişim İlkesi Ekle'ye tıklayın.
- Anahtar İzinleriniAlma ve Anahtar Kümesini Açma içerecek şekilde ayarlayın
- Sorumlu Seç için Azure Container Instance Service'i seçin
- Alttaki Ekle'ye tıklayın
Erişim ilkesi artık anahtar kasanızın erişim ilkelerinde gösterilmelidir.
JSON dağıtım şablonunuzu değiştirme
Önemli
Dağıtım verilerini müşteri tarafından yönetilen bir anahtarla şifreleme, ş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. Öğretici: Resource Manager şablonu kullanarak çok kapsayıcılı grup dağıtma bölümünde şablonla ACI kaynaklarını dağıtma hakkında daha fazla bilgi edinin.
- altında
resources
olarak ayarlayınapiVersion
2019-12-01
. - Dağıtım şablonunun kapsayıcı grubu özellikleri bölümünün altına aşağıdaki değerleri içeren bir
encryptionProperties
ekleyin:vaultBaseUrl
: Anahtar kasanızın DNS Adı, Portalda 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, anahtarın kendisine tıklayarak bulunabilir (anahtar kasası kaynağınızın Ayarlar bölümündeki "Anahtarlar" altında)
- Kapsayıcı grubu özelliklerinin altına 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 altındaki ş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 müşteri tarafından yönetilen bir anahtarla verileri şifreleme
Key Vault kaynağı oluşturma
Azure portal, Azure CLI veya Azure PowerShell kullanarak AzureKey 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ı ekleyecek ve güvenilen hizmetleri etkinleştireceğiz.
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ünde bir konum seçin.
- Diğer seçenekleri varsayılan olarak 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ırken anahtar kasasında aşağıdaki iki özelliğin ayarlanması önerilir: Geçici Silme ve Temizleme. Bu özellikler varsayılan olarak etkin değildir, 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'daki kaynağa gidin. Kaynak dikey penceresinin sol gezinti menüsünde, Ayarlar'ın altında Anahtarlar'a tıklayın. "Anahtarlar" görünümünde "Oluştur/İçeri Aktar" seçeneğine tıklayarak yeni bir anahtar oluşturun. Bu anahtar için herhangi bir benzersiz Ad ve gereksinimlerinize göre diğer tercihleri kullanın. Sonraki adımlar için anahtar adını ve sürümünü yakalamayı unutmayın.
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 ağ izinlerini değiştirme
Aşağıdaki komutlar Azure Key Vault 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ına aşağıdaki değerleri içeren bir
encryptionProperties
ekleyin:vaultBaseUrl
: anahtar kasanızın DNS Adı. Bu, Portaldaki 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, anahtarın kendisine tıklayarak bulunabilir (anahtar kasası kaynağınızın Ayarlar bölümündeki "Anahtarlar" bölümünde)identity
: Bu, daha önce oluşturulan Yönetilen Kimlik örneğinin kaynak URI'sidir
- Kapsayıcı grubu özelliklerinin altına 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 Kimliğ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 ayarlanıruserAssignedIdentities
: nesnesinde yukarıda kullanılan aynı 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ündeki ş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.