Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan ini memandu Anda melalui langkah-langkah mengelola rahasia dalam aplikasi Service Fabric. Rahasia dapat berupa informasi sensitif apa pun, seperti string koneksi penyimpanan, kata sandi, atau nilai lain yang tidak boleh ditangani dalam teks biasa.
Menggunakan rahasia terenkripsi dalam aplikasi Service Fabric melibatkan tiga langkah:
- Siapkan sertifikat enkripsi dan enkripsi rahasia.
- Tentukan rahasia terenkripsi dalam aplikasi.
- Dekripsi rahasia terenkripsi dari kode layanan.
Menyiapkan sertifikat enkripsi dan mengenkripsi rahasia
Menyiapkan sertifikat enkripsi dan menggunakannya untuk mengenkripsi rahasia bervariasi antara Windows dan Linux.
- Siapkan sertifikat enkripsi dan enkripsi rahasia pada kluster Windows.
- Siapkan sertifikat enkripsi dan enkripsi rahasia pada kluster Linux.
Menentukan rahasia terenkripsi dalam aplikasi
Langkah sebelumnya menjelaskan cara mengenkripsi rahasia dengan sertifikat dan menghasilkan string yang dikodekan base-64 untuk digunakan dalam aplikasi. String yang dikodekan base-64 ini dapat ditentukan sebagai parameter terenkripsi dalam Settings.xml layanan atau sebagai variabel lingkungan terenkripsi dalam ServiceManifest.xmllayanan .
Tentukan parameter terenkripsi dalam file konfigurasi Settings.xml layanan Anda dengan atribut IsEncrypted diatur ke true:
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Section Name="MySettings">
<Parameter Name="MySecret" IsEncrypted="true" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
</Section>
</Settings>
Tentukan variabel lingkungan terenkripsi dalam file ServiceManifest.xml layanan Anda dengan atribut yang Type diatur ke Encrypted:
<CodePackage Name="Code" Version="1.0.0">
<EnvironmentVariables>
<EnvironmentVariable Name="MyEnvVariable" Type="Encrypted" Value="I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=" />
</EnvironmentVariables>
</CodePackage>
Rahasia juga harus disertakan dalam aplikasi Service Fabric Anda dengan menentukan sertifikat dalam manifes aplikasi. Tambahkan elemen SecretsCertificate ke ApplicationManifest.xml dan sertakan thumbprint sertifikat yang diinginkan.
<ApplicationManifest … >
...
<Certificates>
<SecretsCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbrint]"/>
</Certificates>
</ApplicationManifest>
Nota
Setelah mengaktifkan aplikasi yang menentukan SecretsCertificate, Service Fabric akan menemukan sertifikat yang cocok, dan memberikan identitas aplikasi berjalan di bawah izin penuh ke kunci privat sertifikat. Service Fabric juga akan memantau sertifikat untuk perubahan, dan menerapkan kembali izin yang sesuai. Untuk mendeteksi perubahan sertifikat yang dideklarasikan dengan nama umum, Service Fabric menjalankan tugas berkala yang menemukan semua sertifikat yang cocok, dan membandingkannya dengan daftar sidik jari yang di-cache. Ketika thumbprint baru terdeteksi, itu menunjukkan bahwa sertifikat untuk subjek tersebut telah diperbarui. Tugas berjalan sekali per menit pada setiap simpul kluster.
Meskipun SecretsCertificate memungkinkan deklarasi berbasis subjek, perhatikan bahwa pengaturan terenkripsi terkait dengan pasangan kunci yang digunakan untuk mengenkripsi pengaturan pada klien. Anda harus memastikan bahwa sertifikat enkripsi asli (atau setara) cocok dengan deklarasi berbasis subjek, dan bahwa sertifikat tersebut diinstal, termasuk kunci privat yang sesuai, pada setiap node kluster yang dapat menghosting aplikasi. Semua sertifikat valid waktu yang cocok dengan deklarasi berbasis subjek dan dibangun dari pasangan kunci yang sama dengan sertifikat enkripsi asli dianggap setara.
Menyuntikkan rahasia aplikasi ke dalam instance aplikasi
Idealnya, penyebaran ke lingkungan yang berbeda harus seotomatis mungkin. Ini dapat dicapai dengan melakukan enkripsi rahasia di lingkungan build dan menyediakan rahasia terenkripsi sebagai parameter saat membuat instans aplikasi.
Gunakan parameter yang dapat diganti dalam Settings.xml
File konfigurasi Settings.xml memungkinkan parameter yang dapat diambil alih yang dapat disediakan pada waktu pembuatan aplikasi.
MustOverride Gunakan atribut alih-alih memberikan nilai untuk parameter:
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Section Name="MySettings">
<Parameter Name="MySecret" IsEncrypted="true" Value="" MustOverride="true" />
</Section>
</Settings>
Untuk mengambil alih nilai dalam Settings.xml, deklarasikan parameter penimpaan untuk layanan di ApplicationManifest.xml:
<ApplicationManifest ... >
<Parameters>
<Parameter Name="MySecret" DefaultValue="" />
</Parameters>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="Stateful1Pkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides>
<ConfigOverride Name="Config">
<Settings>
<Section Name="MySettings">
<Parameter Name="MySecret" Value="[MySecret]" IsEncrypted="true" />
</Section>
</Settings>
</ConfigOverride>
</ConfigOverrides>
</ServiceManifestImport>
Sekarang nilai dapat ditentukan sebagai parameter aplikasi saat membuat instans aplikasi. Membuat instans aplikasi dapat diskrip menggunakan PowerShell, atau ditulis dalam C#, untuk integrasi yang mudah dalam proses build.
Menggunakan PowerShell, parameter disediakan pada New-ServiceFabricApplication perintah sebagai tabel hash:
New-ServiceFabricApplication -ApplicationName fabric:/MyApp -ApplicationTypeName MyAppType -ApplicationTypeVersion 1.0.0 -ApplicationParameter @{"MySecret" = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM="}
Menggunakan C#, parameter aplikasi ditentukan dalam ApplicationDescription sebagai NameValueCollection:
FabricClient fabricClient = new FabricClient();
NameValueCollection applicationParameters = new NameValueCollection();
applicationParameters["MySecret"] = "I6jCCAeYCAxgFhBXABFxzAt ... gNBRyeWFXl2VydmjZNwJIM=";
ApplicationDescription applicationDescription = new ApplicationDescription(
applicationName: new Uri("fabric:/MyApp"),
applicationTypeName: "MyAppType",
applicationTypeVersion: "1.0.0",
applicationParameters: applicationParameters)
);
await fabricClient.ApplicationManager.CreateApplicationAsync(applicationDescription);
Mendekripsi rahasia terenkripsi dari kode layanan
API untuk mengakses parameter dan variabel lingkungan memungkinkan dekripsi nilai terenkripsi yang mudah. Karena string terenkripsi berisi informasi tentang sertifikat yang digunakan untuk enkripsi, Anda tidak perlu menentukan sertifikat secara manual. Sertifikat hanya perlu diinstal pada simpul tempat layanan berjalan.
// Access decrypted parameters from Settings.xml
ConfigurationPackage configPackage = FabricRuntime.GetActivationContext().GetConfigurationPackageObject("Config");
bool MySecretIsEncrypted = configPackage.Settings.Sections["MySettings"].Parameters["MySecret"].IsEncrypted;
if (MySecretIsEncrypted)
{
SecureString MySecretDecryptedValue = configPackage.Settings.Sections["MySettings"].Parameters["MySecret"].DecryptValue();
}
// Access decrypted environment variables from ServiceManifest.xml
// Note: you do not have to call any explicit API to decrypt the environment variable.
string MyEnvVariable = Environment.GetEnvironmentVariable("MyEnvVariable");
Langkah berikutnya
- Service Fabric Penyimpanan Rahasia
- Pelajari selengkapnya tentang keamanan aplikasi dan layanan