Importowanie pliku certyfikatu do kontenera uruchomionego w usłudze Service Fabric
Uwaga
W przypadku klastrów usługi Service Fabric działających na platformie Azure zaleca się używanie tożsamości zarządzanej aplikacji usługi Service Fabric do aprowizowania certyfikatów aplikacji z poziomu kontenera. Tożsamość zarządzana zapewnia izolację wpisów tajnych i certyfikatów na poziomie usługi i umożliwia aprowizację certyfikatów aplikacji jako część przepływu pracy aplikacji, a nie przepływu pracy infrastruktury. Mechanizm CertificateRef zostanie wycofany w przyszłej wersji.
Usługi kontenerów można zabezpieczyć, określając certyfikat. Usługa Service Fabric udostępnia mechanizm usług wewnątrz kontenera w celu uzyskania dostępu do certyfikatu zainstalowanego w węzłach w klastrze systemu Windows lub Linux (wersja 5.7 lub nowsza). Certyfikat należy zainstalować w magazynie certyfikatów w obszarze LocalMachine na wszystkich węzłach klastra. Klucz prywatny odpowiadający certyfikatowi musi być dostępny, dostępny i — w systemie Windows — możliwy do wyeksportowania. Informacje o certyfikacie są udostępniane w manifeście aplikacji w tagu ContainerHostPolicies
, jak pokazano w poniższym fragmencie kodu:
<ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
<CertificateRef Name="MyCert1" X509StoreName="My" X509FindValue="[Thumbprint1]"/>
<CertificateRef Name="MyCert2" X509FindValue="[Thumbprint2]"/>
W przypadku klastrów systemu Windows podczas uruchamiania aplikacji środowisko uruchomieniowe eksportuje każdy przywoływalny certyfikat i odpowiadający mu klucz prywatny do pliku PFX zabezpieczonego losowo wygenerowanym hasłem. Pliki PFX i password są dostępne odpowiednio wewnątrz kontenera przy użyciu następujących zmiennych środowiskowych:
- Certificates_ServicePackageName_CodePackageName_CertName_PFX
- Certificates_ServicePackageName_CodePackageName_CertName_Password
W przypadku klastrów systemu Linux certyfikaty (PEM) są kopiowane z magazynu określonego przez X509StoreName do kontenera. Odpowiednie zmienne środowiskowe w systemie Linux to:
- Certificates_ServicePackageName_CodePackageName_CertName_PEM
- Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey
Należy pamiętać, że zarówno PEM
plik , jak i PrivateKey
zawiera certyfikat oraz niezaszyfrowany klucz prywatny.
Alternatywnie, jeśli masz już certyfikaty w wymaganym formularzu i chcesz uzyskać do niego dostęp wewnątrz kontenera, możesz utworzyć pakiet danych wewnątrz pakietu aplikacji i określić następujące elementy w manifeście aplikacji:
<ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
<CertificateRef Name="MyCert1" DataPackageRef="[DataPackageName]" DataPackageVersion="[Version]" RelativePath="[Relative Path to certificate inside DataPackage]" Password="[password]" IsPasswordEncrypted="[true/false]"/>
Usługa kontenera lub proces jest odpowiedzialny za importowanie plików certyfikatów do kontenera. Aby zaimportować certyfikat, możesz użyć setupentrypoint.sh
skryptów lub wykonać kod niestandardowy w procesie kontenera. Oto przykładowy kod w języku C# do importowania pliku PFX:
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();
Ten certyfikat PFX może służyć do uwierzytelniania aplikacji lub usługi lub bezpiecznej komunikacji z innymi usługami. Domyślnie pliki są acLed tylko do SYSTEM. Listę ACL można połączyć z innymi kontami zgodnie z wymaganiami usługi.
W następnym kroku przeczytaj następujące artykuły: