Aracılığıyla paylaş


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ında 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 uygulama bildiriminde ContainerHostPolicies etiketin altında 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 ilgili özel anahtarını rastgele oluşturulan bir parolayla güvenli hale getirilen bir PFX dosyasına aktarır. PfX ve parola dosyalarına sırasıyla kapsayıcının 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 PEM hem sertifikayı hem de şifrelenmemiş özel anahtarı içerdiğini lütfen unutmayın.

Alternatif olarak, gerekli formda sertifikalarınız zaten varsa ve bu sertifikaya kapsayıcının içinde 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 diğer hesaplara ACL'sini ekleyebilirsiniz.

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