Aracılığıyla paylaş


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

Ö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.

Yeni anahtar oluşturma

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ınAnahtar izinlerini ayarlama
  • 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.

Yeni erişim ilkesi

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 resourcesolarak ayarlayın apiVersion 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 encryptionPropertiesekleyin:
    • 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 Standardsahip bir sku ö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.

Anahtar oluşturma ayarlarının ekran görüntüsü, PNG.

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 resourcesolarak ayarlayın apiVersion 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 encryptionPropertiesekleyin:
    • vaultBaseUrl: anahtar kasanızın DNS Adı. Bu özellik Portal'daki anahtar kasası kaynağının genel bakış dikey penceresinde bulunabilir
    • keyName: 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 Standardsahip bir sku ö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ır
    • userAssignedIdentities: nesnesinde kullanılan kullanıcı tarafından atanan kimliğin resourceURI'si encryptionProperties .

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.