Aracılığıyla paylaş


Azure Service Fabric'te Merkezi Gizli Dizi Hizmeti

Merkezi Gizli Dizi Deposu olarak da bilinen Merkezi Gizli Dizi Hizmeti (CSS), küme içindeki gizli dizileri korumaya yönelik bir Service Fabric sistem hizmetidir. CSS, SF uygulamaları için gizli dizilerin yönetimini kolaylaştırarak şifrelenmiş parametrelere güvenme gereksinimini ortadan kaldırır.

Merkezi Gizli Dizi Hizmeti dayanıklı, çoğaltılmış bir küme içi gizli dizi önbelleğidir; CSS'de depolanan gizli diziler, müşteri tarafından sağlanan veya küme tarafından yönetilen bir şifreleme sertifikasına bekleyen bir şekilde şifrelenir. CSS, gizli dizi yönetimi için istemci API'leri sağlar. Bu api'ler, küme olarak kimlik doğrulaması yapılan varlıklar veya bir küme yöneticisi kullanıcısı tarafından erişilebilir. Service Fabric çalışma zamanı uygulama modeli CSS ile tümleştirerek uygulama parametrelerinin CSS gizli dizi başvuruları olarak bildirilmesine olanak tanır.

CSS, Azure tarafından dağıtılan Service Fabric Uygulamaları için Yönetilen Kimlik ile birlikte KeyVault gizli dizi URI'leri olarak bildirilen uygulama gizli dizilerinin sağlanmasında da etkili olur.

Merkezi Gizli Dizi Hizmeti, Azure Key Vault gibi ayrılmış bir dış gizli dizi yönetimi hizmetinin yerine geçmek üzere tasarlanmamıştır.

Not

7.1'den önceki bir sürümü çalıştıran bir SF kümesinde CSS'yi etkinleştirirken. CU3, küme Windows kimlik doğrulaması için yapılandırılmışsa veya yanlış bildirilmişse EncryptionCertificateThumbprint veya ilgili sertifika yüklü değilse, etkinleştirme başarısız olabilir ve CSS'yi kalıcı olarak iyi durumda bırakamaz. Her iki durumda da kümenin 7.1'den yeni bir SF çalışma zamanı sürümüne yükseltilir. Devam etmeden önce CU3.

Merkezi Gizli Dizi hizmetini etkinleştirme

Merkezi Gizli Dizi Hizmeti'ni etkinleştirmek için küme yapılandırmasını aşağıda açıklandığı gibi güncelleştirin.

{ 
    "fabricSettings": [
        {
            "name":  "CentralSecretService",
            "parameters":  [
                {
                    "name":  "DeployedState",
                    "value":  "enabled"
                },
                {
                    "name":  "MinReplicaSetSize",
                    "value":  "1"
                },
                {
                    "name":  "TargetReplicaSetSize",
                    "value":  "3"
                }
            ]
        }
    ]
}

Not

Service Fabric 10.1 CU4 sürümünden önce, css'nin depoyu şifrelemek için kullanacağı bir sertifikayı hesaplamaya sağlamak gerekir. Tüm düğümlere yüklenmelidir ve "CentralSecretService" bölümü altında "EncryptionCertificateThumbprint" doku ayarı parametresi kullanılarak SHA-1 parmak izi bildirilmelidir. Küme sertifikanızdan farklı bir şifreleme sertifikası kullanmanızı öneririz. 10.1 CU4'ten itibaren, bu ayar geçirilmezse CSS şifreleme için varsayılan olarak kümeyle yönetilen bir sertifika kullanır. Bir yükseltmede parmak izi bildirimi kaldırılarak, mevcut bir CSS dağıtımı küme tarafından yönetilen sertifikaya taşınabilir.

Not

Service Fabric sürüm 8.0'da kullanıma sunulan "DeployedState" yapılandırma ayarı, CSS'yi etkinleştirmek veya devre dışı bırakmak için tercih edilen mekanizmadır; bu işlev eski olarak kabul edilen "IsEnabled" yapılandırma ayarı tarafından önceki sürümlerde sunulmuştur.

Merkezi Gizli Dizi Hizmeti gizli dizi modeli

Merkezi Gizli Dizi Hizmeti API'sinde iki tür sunulur: gizli kaynak ve gizli dizi sürümü. Gizli dizi kaynak türü, kavramsal olarak belirli bir amaç için kullanılan tek bir gizli dizi sürümlerinin ailesini temsil eder; örnekler şunlardır: bağlantı dizesi, parola, uç nokta sertifikası. Gizli dizi kaynak türünün nesnesi, bu gizli diziyle ilişkilendirilmiş meta verileri( özellikle tür, içerik türü ve açıklama) içerir. Gizli dizi sürüm türü, ilişkili gizli dizisinin belirli bir örneğini temsil eder ve gizli dizi düz metnini (şifrelenmiş) depolar; yukarıdaki örneklerle devam edersek, gizli dizi sürümü geçerli parola değerini, ay sonuna kadar geçerli bir sertifika nesnesini vb. içerir. Bu gizli diziler yenilendikten sonra yeni gizli dizi sürümleri oluşturulmalıdır (ve CSS'ye eklenmelidir).

Modeli resmileştirerek CSS uygulamasında uygulanan ve uygulanan kurallar şunlardır:

  • Gizli dizi kaynağının sıfır veya daha fazla sürümü olabilir
  • Her gizli sürüm belirli bir gizli kaynağın alt öğesidir; Bir sürümde yalnızca bir üst kaynak olabilir
  • Tek bir gizli dizi sürümü, aynı gizli dizinin diğer sürümlerini etkilemeden silinebilir
  • Gizli dizi kaynağının silinmesi, tüm sürümlerinin silinmesine neden olur
  • Gizli bir sürümün değeri sabittir

Gizli dizi kaynağı bildirme

REST API'yi kullanarak gizli dizi kaynağı oluşturabilirsiniz.

Not

Küme HttpGateway sertifikası olmadan Windows kimlik doğrulaması kullanıyorsa REST isteği güvenli olmayan HTTP kanalı üzerinden gönderilir. Bu kanalda TLS'yi etkinleştirmek için küme tanımı bir http ağ geçidi sunucu sertifikası belirtecek şekilde güncelleştirilmelidir.

REST API kullanarak gizli supersecret dizi kaynağı oluşturmak için adresine https://<clusterfqdn>:19080/Resources/Secrets/supersecret?api-version=6.4-previewbir PUT isteği gönderin. Gizli dizi kaynağı oluşturmak için küme sertifikası veya yönetici istemci sertifikası kullanarak kimlik doğrulaması yapmanı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 için REST API'yi kullanmak için 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 dizi değerini inceleme

Invoke-WebRequest -CertificateThumbprint <ClusterCertThumbprint> -Method POST -Uri "https:<clusterfqdn>/Resources/Secrets/supersecret/values/ver1/list_value?api-version=6.4-preview"

Uygulamanızda gizli diziyi kullanma

Bir uygulama, CSS'den bir gizli diziyi ortam değişkeni olarak bildirerek veya gizli düz metin serileştirilecek bir yol belirterek kullanabilir. CSS gizli dizisine başvurmak için şu adımları izleyin:

  1. settings.xml dosyasına aşağıdaki kod parçacığını içeren bir bölüm ekleyin. Burada değerin {secretname:version} biçiminde olduğunu unutmayın.
     <Section Name="testsecrets">
      <Parameter Name="TopSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/
     </Section>
  1. bölümü ApplicationManifest.xml içeri aktarın.
<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ğlayın. Gizli dizileri kapsayıcının içinde kullanılabilir hale getirmek için gereken tek değişiklik içindeki <ConfigPackage>bir bağlama noktasıdırspecify. Aşağıdaki kod parçacığı değiştirilmiş 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ızın içindeki bağlama noktası altında kullanılabilir.

Örnek 2: belirterek bir gizli diziyi bir işlem ortamı değişkenine Type='SecretsStoreRefbağlama. Aşağıdaki kod parçacığı, sürümün ServiceManifest.xml ortam değişkenine MySuperSecret nasıl bağlanacağını supersecret gösteren bir örnektir.ver1

   <EnvironmentVariables>
     <EnvironmentVariable Name="MySuperSecret" Type="SecretsStoreRef" Value="supersecret:ver1"/>
   </EnvironmentVariables>

Ortam değişkeni SecretPath tüm gizli dizilerin depolandığı dizine işaret eder. bölümünde listelenen testsecrets her parametre ayrı bir dosyada depolanır. Uygulama artık gizli diziyi aşağıdaki gibi kullanabilir:

secretValue = IO.ReadFile(Path.Join(Environment.GetEnvironmentVariable("SecretPath"),  "TopSecret"))

Merkezi Gizli Hizmet Şifreleme Sertifikasını Döndürme

Bu kılavuz, CSS'yi kullanarak EncryptionCertificateThumbprintbildirilen kendi şifreleme sertifikanızla yapılandırmış olmanız durumundadır. Küme tarafından yönetilen kimlik bilgisi seçeneğini kullanıyorsanız, küme kimlik bilgilerinin yaşam döngüsünü yönetir ve hiçbir eylem gerekmez.

Sertifikaların süresi dolmadan şifre çözme için geçerli olmaya devam ettiğini unutmayın. Şu anda, kilitlenme olasılığını azaltmak için döndürme sonrasında geçmiş şifreleme sertifikalarını sağlamaya devam etmenizi öneririz. CSS şifreleme sertifikasını döndürmek için aşağıdaki adımlar gerekir:

  1. Yeni sertifikayı kümenin her düğümüne sağlayın. Şu anda önceki şifreleme sertifikasını kaldırmayı/sağlamaya devam etmeyin.
  2. değerini EncryptionCertificateThumbprint yeni sertifikanın SHA-1 parmak iziyle değiştirmek için bir küme yapılandırma yükseltmesi başlatın. 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. Yeni sertifika tarafından korunan tüm gizli dizilere sahip olma yakınsaması zaman uyumsuz olduğundan, önceki şifreleme sertifikasının tüm düğümlerde yüklü ve CSS tarafından kullanılabilir durumda kalması önemlidir.

Kümenizden Merkezi Gizli Dizi Hizmetini kaldırma

Merkezi Gizli Dizi Hizmeti'nin bir kümeden güvenli bir şekilde kaldırılması için iki yükseltme gerekir. İlk yükseltme, CSS'yi işlevsel olarak devre dışı bırakırken, ikinci yükseltme hizmeti içeriğinin kalıcı olarak silinmesini 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'de yalnız bırakılmış bağımlılık olmamasını sağlamaya yardımcı olur. Bu özellik, SF sürüm 8.0'dan itibaren kullanılabilir.

1. Adım: CSS DeployedState'i kaldırmaya güncelleştirme

Küme tanımını 'dan veya'dan'a "IsEnabled" = "true" yükseltin "DeployedState" = "enabled"

{
    "name":  "DeployedState",
    "value":  "removing"
}

Merkezi Gizli Dizi Hizmeti dağıtılan duruma Removinggirdikten sonra, doğrudan REST çağrıları veya SecretStoreRefs veya KeyVaultReferences içeren hizmetlerin etkinleştirmeleri yoluyla gelen tüm gizli API çağrılarını reddeder. Bu noktada CSS'ye bağımlı olan kümedeki tüm uygulamalar veya bileşenler Uyarı durumuna geçer. Bu durumda, dağıtılan duruma Removing yükseltme geri alınmalıdır; bu yükseltme zaten başarılı olduysa, CSS'yi yeniden DeployedState = Enabledolarak değiştirmek için yeni bir yükseltme başlatılmalıdır. Merkezi Gizli Dizi Hizmeti dağıtılan durumdayken Removingbir istek alırsa, HTTP Kodu 401 (yetkisiz) döndürür ve kendisini Uyarı sistem durumu durumuna alır.

2. Adım: CSS DeployedState'i devre dışı olarak güncelleştirme

Küme tanımını'ndan'a yükseltin "DeployedState" = "removing"

{
    "name":  "DeployedState",
    "value":  "disabled"
}

Merkezi Gizli Dizi Hizmeti artık kümede çalışmamalıdır ve sistem hizmetleri listesinde mevcut olmayacaktır. CSS'nin içeriği son derece kaybolur.

Sonraki adımlar