Import souboru certifikátu do kontejneru spuštěného v Service Fabric
Poznámka:
Pro clustery Service Fabric spuštěné v Azure se doporučuje použít spravovanou identitu aplikace Service Fabric ke zřízení certifikátů aplikací z kontejneru. Spravovaná identita poskytuje izolaci tajných kódů a certifikátů na úrovni služby a umožňuje, aby zřizování certifikátů aplikací bylo součástí pracovního postupu aplikace, nikoli pracovního postupu infrastruktury. Mechanismus CertificateRef bude v budoucí verzi zastaralý.
Služby kontejneru můžete zabezpečit zadáním certifikátu. Service Fabric poskytuje mechanismus pro služby uvnitř kontejneru pro přístup k certifikátu nainstalovanému na uzlech v clusteru s Windows nebo Linuxem (verze 5.7 nebo vyšší). Certifikát musí být nainstalovaný v úložišti certifikátů v rámci LocalMachine na všech uzlech clusteru. Privátní klíč odpovídající certifikátu musí být dostupný, přístupný a exportovatelný – ve Windows. Informace o certifikátu jsou uvedené v manifestu aplikace pod značkou ContainerHostPolicies
, jak ukazuje následující fragment kódu:
<ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
<CertificateRef Name="MyCert1" X509StoreName="My" X509FindValue="[Thumbprint1]"/>
<CertificateRef Name="MyCert2" X509FindValue="[Thumbprint2]"/>
V případě clusterů s Windows modul runtime při spuštění aplikace exportuje každý odkazovaný certifikát a odpovídající privátní klíč do souboru PFX, který je zabezpečený náhodně vygenerovaným heslem. Soubory PFX a hesla jsou v kontejneru přístupné pomocí následujících proměnných prostředí:
- Certificates_ServicePackageName_CodePackageName_CertName_PFX
- Certificates_ServicePackageName_CodePackageName_CertName_Password
V případě linuxových clusterů se certifikáty (PEM) zkopírují z úložiště určeného X509StoreName do kontejneru. Odpovídající proměnné prostředí v Linuxu jsou:
- Certificates_ServicePackageName_CodePackageName_CertName_PEM
- Certificates_ServicePackageName_CodePackageName_CertName_PrivateKey
Upozorňujeme, že certifikát PEM
i PrivateKey
soubor obsahují certifikát i nešifrovaný privátní klíč.
Pokud už certifikáty máte v požadovaném formuláři a chcete k němu přistupovat uvnitř kontejneru, můžete v balíčku aplikace vytvořit datový balíček a zadat následující kód v manifestu aplikace:
<ContainerHostPolicies CodePackageRef="NodeContainerService.Code">
<CertificateRef Name="MyCert1" DataPackageRef="[DataPackageName]" DataPackageVersion="[Version]" RelativePath="[Relative Path to certificate inside DataPackage]" Password="[password]" IsPasswordEncrypted="[true/false]"/>
Služba kontejneru nebo proces zodpovídá za import souborů certifikátů do kontejneru. K importu certifikátu můžete použít setupentrypoint.sh
skripty nebo spustit vlastní kód v rámci procesu kontejneru. Tady je ukázkový kód v jazyce C# pro import souboru 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();
Tento certifikát PFX lze použít k ověřování aplikace nebo služby nebo k zabezpečené komunikaci s jinými službami. Ve výchozím nastavení jsou soubory ACLed pouze na SYSTÉM. Seznam ACL můžete podle potřeby služby vyřadit do jiných účtů.
Jako další krok si přečtěte následující články: