Service Fabric üzerinde çalışan bir kapsayıcıya sertifika dosyası aktarma

Not

Azure'da çalışan Service Fabric kümeleri için, kapsayıcı içinden uygulama sertifikaları sağlamak için Service Fabric Uygulama Yönetilen Kimliği'nin kullanılması önerilir. Yönetilen Kimlik, gizli dizilerin ve sertifikaların hizmet düzeyinde yalıtılmasını sağlar ve uygulama sertifikası sağlamanın altyapının iş akışı yerine uygulamanın iş akışının bir parçası olmasını sağlar. CertificateRef mekanizması gelecek bir sürümde kullanım dışı bırakılacaktır.

Bir sertifika belirterek kapsayıcı hizmetlerinizin güvenliğini sağlayabilirsiniz. Service Fabric, kapsayıcı içindeki hizmetlerin Windows veya Linux kümesindeki düğümlere (sürüm 5.7 veya üzeri) yüklenmiş bir sertifikaya erişmesi için bir mekanizma sağlar. Sertifika, kümenin tüm düğümlerinde LocalMachine altındaki bir sertifika deposuna yüklenmelidir. Sertifikaya karşılık gelen özel anahtar kullanılabilir, erişilebilir ve - Windows'ta - dışarı aktarılabilir olmalıdır. Sertifika bilgileri, aşağıdaki kod parçacığında gösterildiği gibi etiketin ContainerHostPolicies altındaki uygulama bildiriminde sağlanır:

  <ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
    <CertificateRef Name="MyCert1" X509StoreName="My" X509FindValue="[Thumbprint1]"/>
    <CertificateRef Name="MyCert2" X509FindValue="[Thumbprint2]"/>

Windows kümeleri için, uygulamayı başlatırken çalışma zamanı başvuruda bulunılan her sertifikayı ve karşılık gelen özel anahtarını rastgele oluşturulan bir parolayla güvenliği sağlanan bir PFX dosyasına aktarır. PFX ve parola dosyalarına sırasıyla kapsayıcı içinde aşağıdaki ortam değişkenleri kullanılarak erişilebilir:

  • Certificates_ServicePackageName_CodePackageName_CertName_PFX
  • Certificates_ServicePackageName_CodePackageName_CertName_Password

Linux kümeleri için, sertifikalar (PEM) X509StoreName tarafından belirtilen depodan kapsayıcıya kopyalanır. Linux'ta karşılık gelen ortam değişkenleri şunlardır:

  • Certificates_ServicePackageName_CodePackageName_CertName_PEM
  • Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey

Ve PrivateKey dosyasının hem sertifikayı PEM hem de şifrelenmemiş özel anahtarı içerdiğini lütfen unutmayın.

Alternatif olarak, gerekli formda sertifikalarınız zaten varsa ve kapsayıcının içinde bu sertifikaya erişmek istiyorsanız, uygulama paketinizin içinde bir veri paketi oluşturabilir ve uygulama bildiriminizin içinde aşağıdakileri belirtebilirsiniz:

<ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
  <CertificateRef Name="MyCert1" DataPackageRef="[DataPackageName]" DataPackageVersion="[Version]" RelativePath="[Relative Path to certificate inside DataPackage]" Password="[password]" IsPasswordEncrypted="[true/false]"/>

Kapsayıcı hizmeti veya işlemi, sertifika dosyalarını kapsayıcıya aktarmakla sorumludur. Sertifikayı içeri aktarmak için betikleri kullanabilir setupentrypoint.sh veya kapsayıcı işlemi içinde özel kod yürütebilirsiniz. PFX dosyasını içeri aktarmak için C# dilinde örnek kod aşağıda verilmiştir:

string certificateFilePath = Environment.GetEnvironmentVariable("Certificates_MyServicePackage_NodeContainerService.Code_MyCert1_PFX");
string passwordFilePath = Environment.GetEnvironmentVariable("Certificates_MyServicePackage_NodeContainerService.Code_MyCert1_Password");
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
string password = File.ReadAllLines(passwordFilePath, Encoding.Default)[0];
password = password.Replace("\0", string.Empty);
X509Certificate2 cert = new X509Certificate2(certificateFilePath, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

Bu PFX sertifikası, uygulamanın veya hizmetin kimliğini doğrulamak veya diğer hizmetlerle güvenli iletişim için kullanılabilir. Varsayılan olarak, dosyalar yalnızca SİSTEM'e ACL'lerdir. Hizmetin gerektirdiği şekilde ACL'yi diğer hesaplara akleyebilirsiniz.

Sonraki adım olarak aşağıdaki makaleleri okuyun: