Azure Service Fabric'de Merkezi Gizli Service Fabric
Merkezi Gizli Dizi Deposu olarak da bilinen Merkezi Gizli Dizi Hizmeti (CSS), bir Service Fabric gizli dizileri korumaya yönelik bir sistem hizmetidir. CSS, SF uygulamaları için gizli dizilerin yönetimini kolaylaştırarak şifrelenmiş parametrelere güvenme ihtiyacı ortadan kaldırıyor.
Merkezi Gizli Gizli Hizmet dayanıklı, çoğaltılmış küme içinde gizli önbellektir; CSS'de depolanan gizli diziler, müşteri tarafından sağlanan bir şifreleme sertifikasında beklemede şifrelenir. CSS gizli yönetim için istemci API'leri sağlar, küme olarak kimlik doğrulayıcı varlıklar veya bir küme yöneticisi kullanıcısı tarafından erişilebilir. Uygulama Service Fabric çalışma zamanı uygulama modeli CSS ile tümleştirerek uygulama parametrelerinin CSS gizli dosyası başvuruları olarak bildir 300000000000000000000000000000000000000000000000000000
CSS, Azure tarafından dağıtılan Service Fabric Applications için Yönetilen Kimlik ile birlikte KeyVaultgizli dizi URL'leri olarak bildirilen uygulama gizli dizilerini sağlamada da Service Fabric sağlar.
Merkezi Gizli Dizi Hizmeti, özel bir dış gizli dizi yönetimi hizmetinin yerine Azure Key Vault.
Not
7.1'den önceki bir sürümü çalıştıran bir SF kümesinde CSS'i etkinleştirirken. CU3, küme Windows kimlik doğrulaması için yapılandırılmışsa veya yanlış bildirmişse veya karşılık gelen sertifika yüklü değilse etkinleştirme başarısız olabilir ve CSS'yi kalıcı olarak iyi durumda olmayan bir durumda EncryptionCertificateThumbprint bırakır. Her iki durumda da kümeyi 7.1'den yeni bir SF çalışma zamanı sürümüne yükseltmeniz önerilir. Devam etmeden önce CU3.
Merkezi Gizli Diziler Hizmetini Etkinleştirme
Merkezi Gizli Hizmet'i etkinleştirmek için küme yapılandırmasını aşağıda açıklandığı gibi güncelleştirin. Küme sertifikanıza göre farklı bir şifreleme sertifikası kullanmanızı öneririz. Bu sertifikanın tüm düğümlere yüklenmiş olması gerekir.
{
"fabricSettings": [
{
"name": "CentralSecretService",
"parameters": [
{
"name": "DeployedState",
"value": "enabled"
},
{
"name" : "EncryptionCertificateThumbprint",
"value": "<thumbprint>"
},
{
"name": "MinReplicaSetSize",
"value": "1"
},
{
"name": "TargetReplicaSetSize",
"value": "3"
}
]
}
]
}
Not
8.0sürümünde tanıtılan "DeployedState" Service Fabric, CSS'yi etkinleştirmek veya devre dışı bırakmak için tercih edilen mekanizmadır; Bu işlev, önceki sürümlerde artık eski olarak kabul edilen "IsEnabled" yapılandırma ayarıyla hizmet verdi.
Merkezi Gizli Hizmet gizli gizli modeli
Merkezi Gizli Hizmet API'si iki tür gösterir: gizli kaynak ve gizli sürüm. Gizli dizi kaynak türü kavramsal olarak belirli bir amaç için kullanılan tek bir gizli dizi sürümünü temsil eder; örnekler şunlardır: bağlantı dizesi, parola, uç nokta sertifikası. Gizli anahtar kaynak türünün nesnesi, özellikle tür, içerik türü ve açıklama olmak üzere bu gizli anahtarla ilişkili meta verileri içerir. Gizli anahtar sürüm türü, ilişkili gizli anahtarın belirli bir örneğini temsil eder ve gizli düz metni depolar (şifrelenmiş); yukarıdaki örneklerle devam ederseniz, gizli bir sürüm geçerli parola değerini, ay sonuna kadar geçerli olan bir sertifika nesnesini içerir. Bu gizli dizileri yenilenin ardından yeni gizli dizi sürümleri üretil olmalı (ve CSS'ye eklenmeli).
Modeli resmileştirerek CSS uygulamasında uygulanan ve uygulanan kurallar aşağıda ve aşağıda ve listeılmıştır:
- Gizli kaynak sıfır veya daha fazla sürüme sahip olabilir
- Her gizli bilgi sürümü, belirli bir gizli bilgi kaynağının alt sürümüdür; Bir sürüm yalnızca bir üst kaynağa sahip olabilir
- Tek bir gizli bilgi sürümü, aynı gizli tinin diğer sürümlerini etkilemeden silinebilir
- Gizli bir kaynağın silinmesi tüm sürümlerinin silinmesine neden olur
- Gizli bir sürümün değeri sabittir
Gizli dizi kaynakları için REST yönetim API'lerinin tam kümesi burada, gizlidizi sürümleri için ise burada bulunabilir.
Gizli kaynak bildir
Gizli kaynak oluşturmak için aşağıdaki REST API.
Not
Küme bir HttpGateway sertifikası Windows kimlik doğrulaması kullanıyorsa, REST isteği, güvenliksiz HTTP kanalı üzerinden gönderilir. Bu kanal için TLS'yi etkinleştirmek için, küme tanımının bir http ağ geçidi sunucu sertifikası belirtecek şekilde güncelleştirilmiş olması gerekir.
REST API supersecret kullanarak gizli REST API için put isteği https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview oluşturun. Gizli kaynak oluşturmak için bir küme sertifikası veya yönetici istemci sertifikası kullanarak kimlik doğrulamanız gerekir.
$json = '{"properties": {"kind": "inlinedValue", "contentType": "text/plain", "description": "supersecret"}}'
Invoke-WebRequest -Uri https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-preview -Method PUT -CertificateThumbprint <CertThumbprint> -Body $json
Gizli dizi değerini ayarlama
Gizli dizi değerini ayarlamak üzere REST API aşağıdaki betiği kullanın.
$Params = '{"properties": {"value": "mysecretpassword"}}'
Invoke-WebRequest -Uri https://<clusterfqdn>:19080/Resources/Secrets/supersecret/values/ver1?api-version=6.4-preview -Method PUT -Body $Params -CertificateThumbprint <ClusterCertThumbprint>
Gizli değer inceleme
Invoke-WebRequest -CertificateThumbprint <ClusterCertThumbprint> -Method POST -Uri "https:<clusterfqdn>/Resources/Secrets/supersecret/values/ver1/list_value?api-version=6.4-preview"
Uygulamanıza gizli bilgileri kullanma
Uygulama, CSS'den gizli diziyi ortam değişkeni olarak bildirerek veya gizli dizi düz metni seri hale getirilecek bir yol belirterek kullanabilir. CSS gizli koduna başvuru yapmak için şu adımları izleyin:
- Aşağıdaki kod parçacığıyla settings.xml bölümüne bir bölüm ekleyin. Burada değerin { } biçiminde olduğunu
secretname:versionunutmayın.
<Section Name="testsecrets">
<Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
</Section>
- bölümünü ApplicationManifest.xml.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="testservicePkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<ConfigPackagePolicies CodePackageRef="Code">
<ConfigPackage Name="Config" SectionName="testsecrets" EnvironmentVariableName="SecretPath" />
</ConfigPackagePolicies>
</Policies>
</ServiceManifestImport>
Örnek 1: Gizli dizileri bir kapsayıcıya bağlama. Gizli dizilerin kapsayıcı içinde kullanılabilir hale olması için gereken tek değişiklik içindeki specify bağlama noktasına <ConfigPackage> yapmaktır.
Aşağıdaki kod parçacığı, değiştirilen ApplicationManifest.xml.
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="testservicePkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<Policies>
<ConfigPackagePolicies CodePackageRef="Code">
<ConfigPackage Name="Config" SectionName="testsecrets" MountPoint="C:\secrets" EnvironmentVariableName="SecretPath" />
<!-- Linux Container
<ConfigPackage Name="Config" SectionName="testsecrets" MountPoint="/mnt/secrets" EnvironmentVariableName="SecretPath" />
-->
</ConfigPackagePolicies>
</Policies>
</ServiceManifestImport>
Gizli diziler, kapsayıcının içindeki bağlama noktası altında kullanılabilir.
Örnek 2: belirterek bir işlem ortamı değişkenine gizli bir gizli bilgi Type='SecretsStoreRef bağlayın. Aşağıdaki kod parçacığı, sürümündeki ortam değişkenine supersecret ver1 sürümün nasıl bağlanacağını MySuperSecretServiceManifest.xml. ****
<EnvironmentVariables>
<EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
</EnvironmentVariables>
Ortam SecretPath değişkeni, tüm gizli dizilerin depolandığı dizine işaret eder. bölümünde listelenen her testsecrets parametre ayrı bir dosyada depolanır. Uygulama artık gizli bilgileri aşağıdaki gibi kullanabilir:
secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"), "TopSecret"))
Merkezi Gizli Anahtar Hizmeti Şifreleme Sertifikasını Döndürme
Sertifikaların, şifre çözme için sürelerinin dolmadan geçerli olduğunu unutmayın. Şu anda, kilitleme ihtimalini azaltmak için rotasyondan sonra geçmiş şifreleme sertifikalarını sağlamaya devam etmenizi öneririz. CSS şifreleme sertifikasını döndürme aşağıdaki adımları gerektirir:
- Kümenin her düğümüne yeni sertifikayı sağlama. Şu anda, önceki şifreleme sertifikasını kaldırmayın/sağlamaya devam edin.
- değerini yeni sertifikanın SHA-1 parmak izi olarak değiştirmek
EncryptionCertificateThumbprintiçin bir küme yapılandırma yükseltmesi başlatabilirsiniz. Yükseltme tamamlandıktan sonra CSS, mevcut içeriğini yeni şifreleme sertifikasına yeniden şifrelemeye başlar. Bu noktadan sonra CSS'ye eklenen tüm gizli diziler doğrudan yeni şifreleme sertifikasına şifrelenir. Tüm gizli dizilerin yeni sertifika tarafından korunmasına yakınsama zaman uyumsuz olduğu için, önceki şifreleme sertifikasının tüm düğümlerde yüklü kalması ve CSS tarafından kullanılabilir olması önemlidir.
Merkezi Gizli Hizmet'i kümeden kaldırma
Kasa Gizli Hizmet'in bir kümeden kaldırılması için iki yükseltme gerekir. İlk yükseltme CSS'yi işlevsel olarak devre dışı bıraksa da, ikinci yükseltme hizmeti içeriği kalıcı olarak silmeyi içeren küme tanımından kaldırır. Bu iki aşamalı işlem, hizmetin yanlışlıkla silinmesini önler ve kaldırma işlemi sırasında CSS'ye yalnız olmayan bağımlılıkların ortadan kaldırılmasına yardımcı olur. Bu özellik SF sürüm 8.0'dan itibaren kullanılabilir.
1. Adım: CSS DeployedState'i kaldırılacak şekilde güncelleştirme
Küme tanımını 'den "IsEnabled" = "true" veya kaynağından sürümüne "DeployedState" = "enabled" yükseltme
{
"name": "DeployedState",
"value": "removing"
}
Merkezi Gizli Anahtar Hizmeti dağıtılan durumuna girdi mi, doğrudan REST çağrıları veya SecretStoreRefs veya KeyVaultReferences içeren hizmetlerin etkinleştirmeleri aracılığıyla gelen tüm gizli API çağrılarını Removing reddeder. Kümede bu noktada HALA CSS'ye bağımlı olan tüm uygulamalar veya bileşenler Uyarı durumuna gider. Bu durumda, dağıtılan durumuna yükseltme geri alınarak, bu yükseltme zaten başarılı olursa CSS'yi DeployedState = olarak değiştirmek için yeni bir yükseltme Removing Enabled başlatılacaktır. Merkezi Gizli Hizmet dağıtılmış durumdayken bir istek alırsa, HTTP Kodu 401'i (yetkisiz) iade eder ve kendisini Bir Removing Uyarı durumuna alır.
2. Adım: CSS DeployedState'i devre dışı olarak güncelleştirme
Küme tanımını 'den sürümüne "DeployedState" = "removing" yükseltme
{
"name": "DeployedState",
"value": "disabled"
}
Merkezi Gizli Gizli Hizmet artık kümede çalışmamalı ve sistem hizmetleri listesinde mevcut olmayacaktır. CSS'nin içeriği geri alınamaz şekilde kaybolur.
Sonraki adımlar
- Uygulama ve hizmet güvenliği hakkında daha fazla bilgi.
- Service Fabric Uygulamaları için Yönetilen Kimlik ile Service Fabric.
- KeyVaultReferences ile CSS'nin işlevselliğini genişletme