Aracılığıyla paylaş


Müşteri tarafından yönetilen anahtarla şifrelenmiş depolama hesabı dağıtan Azure Yönetilen Uygulaması oluşturma

Bu makalede, müşteri tarafından yönetilen anahtar kullanılarak şifrelenmiş bir depolama hesabı dağıtan bir Azure Yönetilen Uygulamasının nasıl oluşturulacağı açıklanır. Depolama hesabı, Cosmos DB ve Postgres için Azure Veritabanı, müşteri tarafından yönetilen anahtarları veya Microsoft tarafından yönetilen anahtarları kullanarak bekleyen verilerin şifrelenmesini destekler. Depolama hesabınızdaki verileri korumak için kendi şifreleme anahtarınızı kullanabilirsiniz. Müşteri tarafından yönetilen bir anahtar belirttiğinizde verilerinizi şifrelemek ve verilerinize erişimi denetlemek için bu anahtar kullanılır. Müşteri tarafından yönetilen anahtarlar erişim denetimlerini yönetmek için çok daha fazla esneklik sunar.

Ön koşullar

Yönetilen kimlikler

Yönetilen uygulama tarafından yönetilen kaynak grubu içinde kaynak olarak dağıtılan bir depolama hesabı için müşteri tarafından yönetilen anahtar yapılandırmak için kullanıcı tarafından atanan yönetilen kimlik gerekir. Bu kullanıcı tarafından atanan yönetilen kimlik, yönetilen uygulamaya diğer mevcut kaynaklara erişim vermek için kullanılabilir. Yönetilen uygulamanızı kullanıcı tarafından atanan bir yönetilen kimlikle yapılandırmayı öğrenmek için yönetilen kimlikle Azure Yönetilen Uygulaması'na gidin.

Uygulamanız için iki tür kimlik verilebilir:

  • Uygulamanıza sistem tarafından atanan yönetilen kimlik atanır ve uygulamanız silinirse silinir. Bir uygulama yalnızca bir sistem tarafından atanan yönetilen kimliğe sahip olabilir.
  • Kullanıcı tarafından atanan yönetilen kimlik, uygulamanıza atanabilen tek başına bir Azure kaynağıdır. Bir uygulamada kullanıcı tarafından atanan birden çok yönetilen kimlik olabilir.

Yönetilen uygulamanızın yönetilen kaynak grubunda mevcut anahtar kasasından müşteri anahtarlarıyla şifrelenmiş bir depolama hesabı dağıtmak için daha fazla yapılandırma gerekir. Yönetilen uygulamanızla yapılandırılan yönetilen kimlik, anahtar kasasına erişimi olan yönetilen kimlik üzerinde yerleşik Azure rol tabanlı erişim denetimi Yönetilen Kimlik operatörüne ihtiyaç duyar. Daha fazla ayrıntı için Yönetilen Kimlik İşleci rolü'ne gidin.

Temizleme koruması ile anahtar kasası oluşturma

  1. Azure Portal oturum açın.
  2. Azure portalı menüsünden veya Giriş sayfasında Kaynak oluştur'u seçin.
  3. Arama kutusuna Key Vault yazın.
  4. Sonuçlar listesinden Key Vault'ı seçin.
  5. Key Vault bölümünde Oluştur'u seçin.
  6. Anahtar kasası oluşturma bölümünde aşağıdaki bilgileri sağlayın:
    • Abonelik: Aboneliğinizi seçin.
    • Kaynak Grubu: Yeni oluştur'u seçin ve demo-cmek-rg gibi bir ad girin.
    • Ad: demo-keyvault-cmek gibi benzersiz bir ad gereklidir.
    • Bölge: Doğu ABD gibi bir konum seçin.
    • Fiyatlandırma katmanı: Açılan listeden Standart'ı seçin.
    • Temizleme koruması: Temizleme korumasını etkinleştir'i seçin.
  7. İleri'yi seçin ve Erişim İlkesi sekmesine gidin.
    • Erişim yapılandırması: Azure rol tabanlı erişim denetimini seçin.
    • Diğer tüm seçenekler için varsayılan değerleri kabul edin.
  8. Gözden geçir ve oluştur’u seçin.
  9. Ayarların doğru olduğunu onaylayın ve Oluştur'u seçin.

Başarılı dağıtımdan sonra Kaynağa git'i seçin. Genel Bakış sekmesinde aşağıdaki özellikleri not edin:

  • Kasa Adı: Örnekte kasa adı demo-keyvault-cmek şeklindedir. Bu adı diğer adımlar için kullanırsınız.
  • Kasa URI'si: Örnekte kasa URI'si şeklindedir https://demo-keyvault-cmek.vault.azure.net/.

Kullanıcı tarafından atanan yönetilen kimlik oluşturma

Kullanıcı tarafından atanan bir yönetilen kimlik oluşturmak için hesabınızın yönetilen kimliğe Katkıda Bulunan rolü ataması gerekir.

  1. Arama kutusuna yönetilen kimlikler girin.
  2. Hizmetler'in altında Yönetilen Kimlikler'i seçin.
  3. Oluştur'u seçin ve Temel Bilgiler sekmesinde aşağıdaki değerleri girin:
    • Abonelik: Aboneliğinizi seçin.
    • Kaynak grubu: Önceki adımlarda oluşturduğunuz demo-cmek-rg kaynak grubunu seçin.
    • Bölge: Doğu ABD gibi bir bölge seçin.
    • Ad: Demokeyvaultmi gibi kullanıcı tarafından atanan yönetilen kimliğinizin adını girin.
  4. Gözden geçir ve oluştur’u seçin.
  5. Doğrulama Başarılı gösterildikten sonra Oluştur'u seçin.

Başarılı bir dağıtımdan sonra Kaynağa git'i seçin.

Rol atamaları oluşturma

Anahtar kasanız için iki rol ataması oluşturmanız gerekir. Ayrıntılar için bkz . Azure portalını kullanarak Azure rolleri atama.

Yönetilen kimliğe anahtar kasası üzerinde anahtar izni verme

Anahtarları sarmalayıp açmak için anahtar kasası yönetilen kimliği demokeyvaultmi için bir rol ataması oluşturun.

  1. Anahtar kasanıza demo-cmek-keyvault gidin.
  2. Erişim denetimi (IAM) öğesini seçin.
  3. Ekle>Rol ataması ekle’yi seçin.
  4. Aşağıdaki rolü atayın:
    • Rol: Key Vault Şifreleme Hizmeti Şifreleme Kullanıcısı
    • Erişim atama: Yönetilen kimlik
    • Üye: demokeyvaultmi
  5. Ayarlarınızı görüntülemek için Gözden geçir ve ata'yı seçin.
  6. Rol atamasını oluşturmak için Gözden geçir ve ata'yı seçin.

Hesabınız için rol ataması oluşturma

Hesabınızın anahtar kasanızda yeni bir anahtar oluşturabilmesi için başka bir rol ataması oluşturun.

  1. Aşağıdaki rolü atayın:
    • Rol: Key Vault Şifreleme Yetkilisi
    • Erişim Atama: Kullanıcı, grup veya hizmet sorumlusu
    • Üye: Microsoft Entra hesabınız
  2. Ayarlarınızı görüntülemek için Gözden geçir ve ata'yı seçin.
  3. Rol atamasını oluşturmak için Gözden geçir ve ata'yı seçin.

Erişim denetimi (IAM)>Rol atamalarında anahtar kasasının rol atamalarını doğrulayabilirsiniz.

Anahtar oluşturma

Depolama hesabını şifrelemek için anahtar kasanızın kullandığı bir anahtar oluşturmanız gerekir.

  1. Demo-cmek-keyvault anahtar kasanıza gidin.
  2. Anahtarlar’ı seçin.
  3. Oluştur/İçeri Aktar'ı seçin.
  4. Anahtar oluştur sayfasında aşağıdaki değerleri seçin:
    • Seçenekler: Oluşturma
    • Ad: demo-cmek-key
  5. Diğer seçenekler için varsayılan değerleri kabul edin.
  6. Oluştur seçeneğini belirleyin.

Anahtar adını not edin. Yönetilen uygulamayı dağıtırken bunu kullanırsınız.

Yönetilen uygulama için kullanıcı tarafından atanan yönetilen kimlik oluşturma

Yönetilen uygulama için yönetilen kimlik olarak kullanılacak kullanıcı tarafından atanan bir yönetilen kimlik oluşturun.

  1. Arama kutusuna Yönetilen Kimlikler yazın.
  2. Hizmetler'in altında Yönetilen Kimlikler'i seçin.
  3. Oluştur seçeneğini belirleyin.
    • Abonelik: Aboneliğinizi seçin.
    • Kaynak grubu: demo-cmek-rg kaynak grubunu seçin.
    • Bölge: Doğu ABD gibi bir bölge seçin.
    • Ad: Demomanagedappmi gibi kullanıcı tarafından atanan yönetilen kimliğinizin adını girin.
  4. Gözden geçir ve oluştur’u seçin.
  5. Doğrulama Başarılı gösterildikten sonra Oluştur'u seçin.

Başarılı bir dağıtımdan sonra Kaynağa git'i seçin.

Yönetilen kimliğe rol izni atama

Demokeyvaultmi adlı kullanıcı tarafından atanan yönetilen kimliğin kapsamında yönetilen kimliğe Yönetilen Kimlik İşleci rolünü atayın.

  1. demokeyvaultmi adlı kullanıcı tarafından atanan yönetilen kimliğe gidin.
  2. Erişim denetimi (IAM) öğesini seçin.
  3. Rol ataması ekle sayfasını açmak için Rol ataması ekle'yi>seçin.
  4. Aşağıdaki rolü atayın.
    • Rol: Yönetilen Kimlik İşleci
    • Erişim Atama: Yönetilen Kimlik
    • Üye: demomanagedappmi
  5. Ayarlarınızı görüntülemek için Gözden geçir ve ata'yı seçin.
  6. Rol atamasını oluşturmak için Gözden geçir ve ata'yı seçin.

Demokeyvaultmi rol atamasını Erişim denetimi (IAM)>Rol atamalarında doğrulayabilirsiniz.

Örnek yönetilen uygulama şablonu

Yönetilen bir kaynak grubuna depolama hesabı dağıtan ve depolama hesabındaki verileri şifrelemek için önceden var olan bir anahtar kasasının anahtarını kullanan yönetilen bir uygulama oluşturun.

Yönetilen bir uygulamayı hizmet kataloğunuzda yayımlamak için aşağıdaki görevleri gerçekleştirin:

  1. Bu makaledeki örnekten creatUIDefinition.json dosyasını oluşturun. Şablon, yönetilen uygulamayı dağıtırken portalın kullanıcı arabirimi öğelerini tanımlar.
  2. Bu makaledeki Bicep dosyasını JSON'a dönüştürerek mainTemplate.json adlı bir Azure Resource Manager şablonu oluşturun. Şablon, yönetilen uygulamayla dağıtılacak kaynakları tanımlar.
  3. Gerekli JSON dosyalarını içeren bir .zip paketi oluşturun: createUiDefinition.json ve mainTemplate.json.
  4. Yönetilen uygulama tanımını, hizmet kataloğunuzda kullanılabilir olacak şekilde yayımlayın. Daha fazla bilgi için Hızlı Başlangıç: Azure Yönetilen Uygulama tanımı oluşturma ve yayımlama bölümüne gidin.

CreateUiDefinition.json şablonu oluşturma

Aşağıdaki şablon, yönetilen uygulama için kullanıcı tarafından atanan bir yönetilen kimlik oluşturur. Bu örnekte, kullanıcı tarafından atanan yönetilen kimliğimizin anahtar kasasının yönetilen kimliği üzerinde Yönetilen Kimlik Operatörü izinleriyle önceden yapılandırılması gerektiğinden sistem tarafından atanan yönetilen kimliği devre dışı bırakacağız.

  1. Visual Studio Code'da creatUIDefinition.json adlı yeni bir dosya oluşturun.
  2. Aşağıdaki kodu kopyalayıp dosyaya yapıştırın.
  3. Dosyayı kaydedin.
{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [],
    "steps": [
      {
        "name": "managedApplicationSetting",
        "label": "Application Settings",
        "subLabel": {
          "preValidation": "Configure your application settings and Managed Identity for the application",
          "postValidation": "Done"
        },
        "bladeTitle": "Application Settings - Config",
        "elements": [
          {
            "name": "appIdentity",
            "type": "Microsoft.ManagedIdentity.IdentitySelector",
            "label": "Managed Identity Configuration for the Application (Needs Managed Identity Operator permissions over KV Managed Identity).",
            "toolTip": {
              "systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
              "userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
            },
            "defaultValue": {
              "systemAssignedIdentity": "Off"
            },
            "options": {
              "hideSystemAssignedIdentity": true,
              "hideUserAssignedIdentity": false,
              "readOnlySystemAssignedIdentity": true
            },
            "visible": true
          }
        ]
      },
      {
        "name": "configuration",
        "type": "Microsoft.Common.Section",
        "label": "Configuration",
        "elements": [
          {
            "name": "cmek",
            "type": "Microsoft.Common.Section",
            "label": "Customer Managed Encryption Key (CMEK)",
            "elements": [
              {
                "name": "cmekEnable",
                "type": "Microsoft.Common.CheckBox",
                "label": "Enable CMEK",
                "toolTip": "Enable to provide a CMEK",
                "constraints": {
                  "required": false
                }
              },
              {
                "name": "cmekKeyVaultUrl",
                "type": "Microsoft.Common.TextBox",
                "label": "Key Vault URL",
                "toolTip": "Specify the CMEK Key Vault URL",
                "defaultValue": "",
                "constraints": {
                  "required": "[steps('configuration').cmek.cmekEnable]",
                  "regex": ".*",
                  "validationMessage": "The value must not be empty."
                },
                "visible": "[steps('configuration').cmek.cmekEnable]"
              },
              {
                "name": "cmekKeyName",
                "type": "Microsoft.Common.TextBox",
                "label": "Key Name",
                "toolTip": "Specify the key name from your key vault.",
                "defaultValue": "",
                "constraints": {
                  "required": "[steps('configuration').cmek.cmekEnable]",
                  "regex": ".*",
                  "validationMessage": "The value must not be empty."
                },
                "visible": "[steps('configuration').cmek.cmekEnable]"
              },
              {
                "name": "cmekKeyIdentity",
                "type": "Microsoft.ManagedIdentity.IdentitySelector",
                "label": "Managed Identity Configuration for Key Vault Access",
                "toolTip": {
                  "systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
                  "userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
                },
                "defaultValue": {
                  "systemAssignedIdentity": "Off"
                },
                "options": {
                  "hideSystemAssignedIdentity": true,
                  "hideUserAssignedIdentity": false,
                  "readOnlySystemAssignedIdentity": true
                },
                "visible": "[steps('configuration').cmek.cmekEnable]"
              }
            ],
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "location": "[location()]",
      "managedIdentity": "[steps('managedApplicationSetting').appIdentity]",
      "cmekConfig": {
        "kvUrl": "[if(empty(steps('configuration').cmek.cmekKeyVaultUrl), '', steps('configuration').cmek.cmekKeyVaultUrl)]",
        "keyName": "[if(empty(steps('configuration').cmek.cmekKeyName), '', steps('configuration').cmek.cmekKeyName)]",
        "identityId": "[if(empty(steps('configuration').cmek.cmekKeyIdentity), '', steps('configuration').cmek.cmekKeyIdentity)]"
      }
    }
  }
}

MainTemplate.json şablonu oluşturma

Aşağıdaki Bicep dosyası, mainTemplate.json dosyasının kaynak kodudur. Şablon, createUiDefinition.json dosyasında tanımlanan kullanıcı tarafından atanan yönetilen kimliği kullanır.

  1. Visual Studio Code'da mainTemplate.bicep adlı yeni bir dosya oluşturun.
  2. Aşağıdaki kodu kopyalayıp dosyaya yapıştırın.
  3. Dosyayı kaydedin.
param cmekConfig object = {
  kvUrl: ''
  keyName: ''
  identityId: {}
}
@description('Specify the Azure region to place the application definition.')
param location string = resourceGroup().location
/////////////////////////////////
// Common Resources Configuration
/////////////////////////////////
var commonproperties = {
  name: 'cmekdemo'
  displayName: 'Common Resources'
  storage: {
    sku: 'Standard_LRS'
    kind: 'StorageV2'
    accessTier: 'Hot'
    minimumTlsVersion: 'TLS1_2'

  }
}
var identity = items(cmekConfig.identityId.userAssignedIdentities)[0].key

resource storage 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  name: '${commonproperties.name}${uniqueString(resourceGroup().id)}'
  location: location
  sku: {
    name: commonproperties.storage.sku
  }
  kind: commonproperties.storage.kind
  identity: cmekConfig.identityId
  properties: {
    accessTier: commonproperties.storage.accessTier
    minimumTlsVersion: commonproperties.storage.minimumTlsVersion
    encryption: {
      identity: {
        userAssignedIdentity: identity
      }
      services: {
        blob: {
          enabled: true
        }
        table: {
          enabled: true
        }
        file: {
          enabled: true
        }
      }
      keySource: 'Microsoft.Keyvault'
      keyvaultproperties: {
        keyname: '${cmekConfig.keyName}'
        keyvaulturi: '${cmekConfig.kvUrl}'
      }
    }
  }
}

MainTemplate.json dosyasını oluşturmak için PowerShell veya Azure CLI kullanın. Bicep dosyanızı kaydettiğiniz dizine build gidin ve komutunu çalıştırın.

bicep build mainTemplate.bicep

Bicep dosyası JSON'a dönüştürüldükten sonra mainTemplate.json dosyanız aşağıdaki örnekle eşleşmelidir. ve templateHashözelliklerinde metadata version farklı değerleriniz olabilir.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.16.2.56959",
      "templateHash": "1234567891234567890"
    }
  },
  "parameters": {
    "cmekConfig": {
      "type": "object",
      "defaultValue": {
        "kvUrl": "",
        "keyName": "",
        "identityId": {}
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Specify the Azure region to place the application definition."
      }
    }
  },
  "variables": {
    "commonproperties": {
      "name": "cmekdemo",
      "displayName": "Common Resources",
      "storage": {
        "sku": "Standard_LRS",
        "kind": "StorageV2",
        "accessTier": "Hot",
        "minimumTlsVersion": "TLS1_2"
      }
    },
    "identity": "[items(parameters('cmekConfig').identityId.userAssignedIdentities)[0].key]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2022-05-01",
      "name": "[format('{0}{1}', variables('commonproperties').name, uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('commonproperties').storage.sku]"
      },
      "kind": "[variables('commonproperties').storage.kind]",
      "identity": "[parameters('cmekConfig').identityId]",
      "properties": {
        "accessTier": "[variables('commonproperties').storage.accessTier]",
        "minimumTlsVersion": "[variables('commonproperties').storage.minimumTlsVersion]",
        "encryption": {
          "identity": {
            "userAssignedIdentity": "[variables('identity')]"
          },
          "services": {
            "blob": {
              "enabled": true
            },
            "table": {
              "enabled": true
            },
            "file": {
              "enabled": true
            }
          },
          "keySource": "Microsoft.Keyvault",
          "keyvaultproperties": {
            "keyname": "[format('{0}', parameters('cmekConfig').keyName)]",
            "keyvaulturi": "[format('{0}', parameters('cmekConfig').kvUrl)]"
          }
        }
      }
    }
  ]
}

Yönetilen uygulamayı dağıtma

Hizmet kataloğu tanımı oluşturulduktan sonra yönetilen uygulamayı dağıtabilirsiniz. Daha fazla bilgi için Hızlı Başlangıç: Hizmet kataloğu yönetilen uygulaması dağıtma bölümüne gidin.

Dağıtım sırasında kullanıcı tarafından atanan yönetilen kimliklerinizi, anahtar kasası adınızı, anahtar kasası URL'nizi, anahtar kasasının anahtar adını kullanırsınız. createUiDefinition.json dosyası, kullanım arabirimini oluşturur.

Örneğin, bir portal dağıtımında, Uygulama Ayarlar sekmesinde demomanagedappmi'yi eklersiniz.

Screenshot of the Application Settings tab to add a user-assigned managed identity.

Yapılandırma sekmesinde müşteri tarafından yönetilen anahtarı etkinleştirir ve demokeyvaultmi anahtar kasası için kullanıcı tarafından atanan yönetilen kimliği eklersiniz. Ayrıca anahtar kasasının URL'sini ve oluşturduğunuz anahtar kasasının anahtar adını da belirtirsiniz.

Screenshot of the Configuration to enable the customer-managed key, add key vault URL and key name, and add a user-assigned managed identity.

Dağıtımı doğrulama

Dağıtım tamamlandıktan sonra yönetilen uygulamanın kimlik atamasını doğrulayabilirsiniz. Kullanıcı tarafından atanan yönetilen kimlik demomanagedappmi yönetilen uygulamaya atanır.

  1. Yönetilen uygulamayı dağıttığınız kaynak grubuna gidin.
  2. Ayarlar> Identity altında Kullanıcı tarafından atanan (önizleme)'yi seçin.

Yönetilen uygulamanın dağıttığını depolama hesabını da doğrulayabilirsiniz. Şifreleme sekmesi demo-cmek-key anahtarını ve kullanıcı tarafından atanan yönetilen kimliğin kaynak kimliğini gösterir.

  1. Yönetilen uygulamanın depolama hesabının dağıtıldığı yönetilen kaynak grubuna gidin.
  2. Güvenlik + ağ altında Şifreleme'yi seçin.

Sonraki adımlar