Azure Key Vault'tan okuyarak ARM şablonunuzdaki gizli dizileri yönetme

Tamamlandı

Kod olarak altyapı (IaC), altyapı gereksinimlerinizin insanlar tarafından okunabilen metin dosyaları olarak tanımlanmasını ifade eder. Azure Resource Manager (ARM) şablonları bir IaC biçimidir.

Uygulama kodunda olduğu gibi altyapı kodunuzu da Git gibi bir sürüm denetimi sistemiyle yönetebilirsiniz. Bu sayede başkalarıyla işbirliği yapabilir ve altyapı gereksinimlerinizle ilgili değişiklikleri izleyebilirsiniz.

Uygulama kodunda olduğu gibi parolalar ve API anahtarları gibi hassas bilgileri ARM şablonlarında sabit bir şekilde kodlamamanız gerekir. Aksi takdirde deponuzda okuma yetkisine sahip olan herkes bu tür gizli bilgilere erişebilir.

Hassas bilgiler yalnızca kuruluşunuzdaki yetkili kişilerin erişimine açık olmalıdır ancak ARM şablonlarının da bu bilgilere ihtiyacı olacaktır. Azure Key Vault, hassas bilgilerin korunmasına yardımcı olabilecek hizmetlerden biridir.

Azure Key Vault, hassas bilgilerin korunmasına yardımcı olur

Azure Key Vault, güvenli bir gizli dizi deposu olarak çalışan bir bulut hizmetidir. Key Vault, kasa adlı birden fazla güvenli kapsayıcı oluşturmanıza imkan tanır. Bu kasalar, donanım güvenlik modülleri (HSM) tarafından desteklenir. Kasalar, uygulama gizli dizilerinin depolanmasını merkezi hale getirerek güvenlik bilgilerini kazayla kaybetme olasılığını azaltmaya yardımcı olur. Kasalar ayrıca içlerinde depolanmış her şeye erişimi denetler ve günlüğe kaydeder.

Key Vault ile hem anahtarlar hem de gizli diziler depolanabilir. Sunduğu birçok özellik nedeniyle gizli dizilerinizi yönetmek ve dağıtım sürecinizde kullanmak için iyi bir seçenektir.

  • Rol tabanlı erişim denetimi. Anahtar kasası örneğinizi farklı roller kullanarak yönetebilir, bu sayede hem uygulamalar hem de farklı düzeydeki yöneticiler tarafından kullanılmasını sağlayabilirsiniz.

  • Kullanıcılara ve uygulamalara izin verme. Anahtar kasanızı, hem belirli kullanıcıların hem de uygulamaların erişebileceği şekilde yapılandırabilirsiniz. Uygulamalar için bir hizmet sorumlusu oluşturursunuz. İsterseniz anahtar kasası örneğinizi yalnızca hizmet sorumluları tarafından erişilebilecek şekilde yapılandırabilirsiniz.

    Dekont

    Hizmet sorumlusu; uygulamaların, barındırılan hizmetlerin ve otomatik araçların Azure kaynaklarına erişmesi amacıyla oluşturulan kimliktir. Sorumluya sınırlı erişim yetkisine sahip tek bir rol veya birden çok rolden oluşan bir alt küme atayarak erişimi sınırlarsınız. Bu yaklaşım sayesinde kaynak erişimi konusunda daha ayrıntılı denetim elde edebilirsiniz.

  • ARM şablonuyla etkileşim kurabilir. ARM şablonunun dağıtımı sırasında, bir anahtar kasasından okuma işlemi yapabilirsiniz. Bunu çalışır hale getirmek için küçük bir yapılandırma gerçekleştirmeniz gerekir. Sonraki bölümde daha fazla ayrıntı verilmiştir.

İzinleri yapılandırma

Kimlik bilgilerinizi Key Vault hizmetinde depolamayı tercih ettiniz. Bu hizmette bulunan gizli dizileri dağıtım sırasında okuyarak sanal makine parolası belirleme gibi işlemler yapabilirsiniz.

Dağıtım sırasında okunabilmesi için Key Vault hizmetinde tamamlamanız gereken birkaç yapılandırma adımı vardır. Adımlar şunlardır:

  1. Key Vault'u dağıtım için ayarlama. Dağıtım sırasında Key Vault’taki değerlerin okunmasına izin vermeniz gerekir. Bu ayarı oluşturma sırasında geçirebilir veya daha sonra değiştirebilirsiniz.

  2. Kullanıcının kaynak grubunda dağıtım iznine sahip olması gerekir. Bu, diğer dağıtımlardan farklı bir durum değildir. Ancak kaynak grubu oluşturmadıysanız dağıtım yapabileceğinizden emin olmak için bir rol atayabilirsiniz.

  3. Kullanıcının uygun anahtar kasası erişimine sahip olması gerekir. Dağıtım sırasında içindeki bilgileri okumak için anahtar kasasında uygun erişime sahip olduğunuzdan emin olmanız gerekir. Bir anahtar kasası oluşturduğunuzda tüm gizli dizileri, anahtarları ve sertifikaları yönetmek için gerekli olan kullanıcı haklarını veren bir erişim ilkesi oluşturulur.

Key Vault'u dağıtım için yapılandırma

Key Vault örneğinizi ARM şablonu dağıtılırken kimlik bilgilerinin okunabileceği şekilde yapılandırın.

Key Vault’u dağıtım için yapılandırmak üzere Key Vault örneğini oluştururken geçirebileceğiniz veya daha sonra değiştirebileceğiniz bir ayar vardır. PowerShell'de -EnabledForTemplateDeployment adlı anahtar kullanılır. Azure CLI'de ise true değeriyle birlikte geçirilmesi gereken --enabled-for-template-deployment adlı bağımsız değişken kullanılır.

Dekont

Azure CLI ayrıca true değeriyle Boole geçirmenizi gerektirir.

Kullanıcının Key Vault örneğinde ve kaynak grubunda dağıtım iznine sahip olması gerekir

Anahtar kasasından gizli dizileri dağıtmayı ve okumayı denemeden önce dağıtım iznine sahip olduğunuzdan emin olmanız gerekir. Bu izni veren iki rol vardır:

  • Owner: Anahtar kasasını oluşturduysanız bu role otomatik olarak sahip olursunuz.
  • Contributor: Bu rol size tüm gizli dizileri yönetme erişimi verir. Anahtar kasasını siz oluşturmadıysanız en kolay yöntem size Contributor rolünün verilmesini sağlamaktır.

Bir diğer seçenek ise özel bir rol oluşturup atamak ve bu rolde Microsoft.KeyVault/vaults/deploy/action izninin bulunduğundan emin olmaktır.

Dağıtım parametresi dosyasını yapılandırma

Dağıtım sırasında her bir parametreyi ve karşılık gelen değerleri anahtar-değer çiftleri olarak belirtmek yerine bir parametre dosyası kullanabilirsiniz.

Bu parametre dosyasından, hangi anahtar kasası ve bu anahtar kasasındaki hangi gizli diziyle ilgilendiğinizi belirtirsiniz. Bunu bir parametreyi değiştirerek ve ardından dağıtım şablonunu bu parametreyi kullanacak şekilde güncelleştirerek yaparsınız.

Dekont

Şablonda anahtar kasası kavramı veya bunun gizli dizisi bulunmaz. Yapılandırmanız, parametre dosyasında gerçekleşir.

Parametre için anahtar kasası ve gizli dizi yapılandırma

Parametre dosyasında belirli bir parametre için dağıtım iznine sahip olduğunuz anahtar kasasına başvurun. Ardından kullanmak istediğiniz gizli diziyi belirtin. Gizli diziyi belirtmek için adını kullanmanız gerekir. Bu yapılandırma, dağıtım sırasında gizli dizi değerine dönüştürülür. Aşağıda myPassword adlı parametre, belirli bir anahtar kasasını ve databaseSecret adlı gizli diziyi kullanacak şekilde yapılandırılmıştır.

"myPassword" : {
  "reference": {
    "keyVault": {
      "id": "/subscriptions/<subscription-id>/resourceGroups/<rg-name>/providers/Microsoft.KeyVault/vaults/<vault-name>",
      "secretName": "databaseSecret"
    }
  }
}

Önceki JSON kodunda anahtar kasasının tam kimliği belirtilmiş ve databaseSecret gizli dizisi istenmiştir. Ardından bu gizli dizinin değeri ayıklanıp myPassword parametresine atanmıştır.

Parametreyi kaynağın parolasına atama

Bu adım, anahtar kasası ile bağlantılı değildir. Burada amaç, istenen kaynağın yapılandırılan parametreyi kullanarak anahtar kasasındaki gizli dizi değerini okuduğundan emin olmaktır. Aşağıda sanal makinenin şablon dosyasından alınmış olan ve myPassword parametresindeki değeri okuyan adminPassword öğesini gösteren kısaltılmış bir kod parçacığı verilmiştir. Bu sayede gizli dizinin değeri dağıtım zamanında anahtar kasasından okunacak ve adminPassword öğesine atanacaktır.

{
  "osProfile": {
    "adminPassword": "[parameters('myPassword')]"
  }
}