Bagikan melalui


Keamanan Azure Service Fabric

Untuk informasi selengkapnya tentang Praktik Terbaik Keamanan Azure, lihat praktik terbaik keamanan Azure Service Fabric

Key Vault

Azure Key Vault adalah layanan manajemen rahasia yang direkomendasikan untuk aplikasi dan kluster Azure Service Fabric.

Catatan

Jika sertifikat/rahasia dari Key Vault disebarkan ke Virtual Machine Scale Set sebagai Virtual Machine Scale Set Secret, maka Key Vault dan Virtual Machine Scale Set harus ditempatkan bersama.

Membuat otoritas sertifikat yang menerbitkan sertifikat Service Fabric

Sertifikat Key Vault (KV) dapat dibuat atau diimpor ke Key Vault. Ketika sertifikat Key Vault dibuat, kunci privat dibuat di dalam Key Vault dan tidak pernah diekspos kepada pemilik sertifikat. Berikut ini adalah cara untuk membuat sertifikat di Key Vault:

  • Buat sertifikat yang ditandatangani sendiri untuk membuat pasangan kunci publik-privat dan mengaitkannya dengan sertifikat. Sertifikat akan ditandatangani oleh kuncinya sendiri.
  • Buat sertifikat baru secara manual untuk membuat pasangan kunci privat-pribadi dan menghasilkan permintaan penandatanganan sertifikat X.509. Permintaan penandatanganan dapat ditandatangani oleh otoritas pendaftaran atau otoritas sertifikasi Anda. Sertifikat x509 yang ditandatangani dapat digabungkan dengan pasangan kunci yang tertunda untuk menyelesaikan sertifikat KV di Key Vault. Meskipun metode ini memerlukan tahapan yang lebih banyak, keamanan yang diberikan juga lebih besar karena kunci privat dibuat dan dibatasi untuk Key Vault. Hal ini dijelaskan dalam diagram di bawah ini.

Tinjau Metode Pembuatan Sertifikat Keyvault Azure untuk detail tambahan.

Menerapkan sertifikat Key Vault ke kumpulan skala komputer virtual kluster Service Fabric

Untuk menyebarkan sertifikat dari keyvault yang berada di lokasi yang sama ke Virtual Machine Scale Set, gunakan Virtual Machine Scale Set osProfile. Berikut adalah properti templat Resource Manager:

"secrets": [
   {
       "sourceVault": {
           "id": "[parameters('sourceVaultValue')]"
       },
       "vaultCertificates": [
          {
              "certificateStore": "[parameters('certificateStoreValue')]",
              "certificateUrl": "[parameters('certificateUrlValue')]"
          }
       ]
   }
]

Catatan

Vault harus diaktifkan untuk penyebaran templat Resource Manager.

Menerapkan Daftar Kontrol Akses atau Access Control List (ACL) ke sertifikat Anda untuk kluster Service Fabric Anda

Penerbit ekstensi Virtual Machine Scale Set Microsoft.Azure.ServiceFabric digunakan untuk mengonfigurasi Keamanan Node Anda. Untuk menerapkan ACL ke sertifikat Anda untuk proses Kluster Service Fabric Anda, gunakan properti templat Manajer Sumber Daya berikut:

"certificate": {
   "commonNames": [
       "[parameters('certificateCommonName')]"
   ],
   "x509StoreName": "[parameters('certificateStoreValue')]"
}

Mengamankan sertifikat kluster Service Fabric dengan nama umum

Untuk mengamankan kluster Service Fabric Anda berdasarkan sertifikat Common Name, gunakan properti templat Resource Manager certificateCommonNames, sebagai berikut:

"certificateCommonNames": {
    "commonNames": [
        {
            "certificateCommonName": "[parameters('certificateCommonName')]",
            "certificateIssuerThumbprint": "[parameters('certificateIssuerThumbprint')]"
        }
    ],
    "x509StoreName": "[parameters('certificateStoreValue')]"
}

Catatan

Kluster Service Fabric akan menggunakan sertifikat valid pertama yang ditemukan di penyimpanan sertifikat host Anda. Pada Windows, sertifikat ini akan berupa sertifikat dengan tanggal kedaluwarsa terbaru yang cocok dengan Nama Umum dan thumbprint Penerbit Anda.

Domain Azure, seperti *<SUBDOMAIN ANDA>.cloudapp.azure.com atau <SUBDOMAIN ANDA>.trafficmanager.net, dimiliki oleh Microsoft. Otoritas Sertifikat tidak akan menerbitkan sertifikat untuk domain kepada pengguna yang tidak sah. Sebagian besar pengguna harus membeli domain dari registrar, atau menjadi admin domain yang sah, agar otoritas sertifikat mengeluarkan sertifikat dengan nama umum tersebut kepada Anda.

Untuk detail tambahan tentang cara mengonfigurasi Layanan DNS untuk mengatasi domain Anda ke alamat IP Microsoft, lihat cara mengonfigurasi Azure DNS untuk menghosting domain Anda.

Catatan

Setelah mendelegasikan server nama domain Anda ke server nama zona DNS Azure Anda, tambahkan dua catatan berikut ke Zona DNS Anda:

  • Catatan 'A' untuk APEX domain yang BUKAN merupakan Alias record set ke semua Alamat IP yang akan diselesaikan oleh domain kustom Anda.
  • Catatan 'C' untuk sub domain Microsoft yang Anda sediakan yang BUKAN Alias record set. Misalnya, Anda dapat menggunakan Traffic Manager atau Load Nama DNS Balancer Anda.

Untuk memperbarui portal Anda guna menampilkan nama DNS kustom untuk Service Fabric Cluste "managementEndpoint" Anda, perbarui properti templat Service Fabric Cluster Resource Manager berikut:

 "managementEndpoint": "[concat('https://<YOUR CUSTOM DOMAIN>:',parameters('nt0fabricHttpGatewayPort'))]",

Mengenkripsi nilai rahasia paket Service Fabric

Nilai umum yang dienkripsi dalam Paket Service Fabric mencakup kredensial Azure Container Registry (ACR), variabel lingkungan, pengaturan, dan kunci akun penyimpanan plugin Azure Volume.

Untuk menyiapkan sertifikat enkripsi dan enkripsi rahasia pada kluster Windows:

Hasilkan sertifikat yang ditandatangani sendiri untuk mengenkripsi rahasia Anda:

New-SelfSignedCertificate -Type DocumentEncryptionCert -KeyUsage DataEncipherment -Subject mydataenciphermentcert -Provider 'Microsoft Enhanced Cryptographic Provider v1.0'

Gunakan instruksi dalam Menyebarkan sertifikat Key Vault ke kumpulan skala mesin virtual kluster Service Fabric untuk menggunakan Virtual Machine Scale Sets dari Service Fabric Cluster.

Enkripsi rahasia Anda menggunakan perintah PowerShell berikut, lalu perbarui manifes aplikasi Service Fabric Anda dengan nilai terenkripsi:

Invoke-ServiceFabricEncryptText -CertStore -CertThumbprint "<thumbprint>" -Text "mysecret" -StoreLocation CurrentUser -StoreName My

Untuk menyiapkan sertifikat enkripsi dan mengenkripsi rahasia pada kluster Linux:

Hasilkan sertifikat yang ditandatangani sendiri untuk mengenkripsi rahasia Anda:

openssl req -newkey rsa:2048 -nodes -keyout TestCert.prv -x509 -days 365 -out TestCert.pem
cat TestCert.prv >> TestCert.pem

Gunakan instruksi dalam Menyebarkan sertifikat Key Vault ke kumpulan skala mesin virtual kluster Service Fabric untuk Virtual Machine Scale Sets dari Service Fabric Cluster.

Enkripsi rahasia Anda menggunakan perintah berikut, lalu perbarui Manifes Aplikasi Service Fabric Anda dengan nilai terenkripsi:

echo "Hello World!" > plaintext.txt
iconv -f ASCII -t UTF-16LE plaintext.txt -o plaintext_UTF-16.txt
openssl smime -encrypt -in plaintext_UTF-16.txt -binary -outform der TestCert.pem | base64 > encrypted.txt

Setelah mengenkripsi nilai yang Anda lindungi, tentukan rahasia terenkripsi dalam Aplikasi Service Fabric, dan dekripsikan rahasia terenkripsi dari kode layanan.

Menyertakan sertifikat titik akhir dalam aplikasi Service Fabric

Untuk mengonfigurasi sertifikat titik akhir aplikasi Anda, sertakan sertifikat dengan menambahkan elemen EndpointCertificate bersama dengan elemen Pengguna untuk akun utama ke manifes aplikasi. Secara default akun utama adalah NetworkService. Ini akan menyediakan manajemen kunci privat sertifikat aplikasi ACL untuk prinsipal yang disediakan.

<ApplicationManifest … >
  ...
  <Principals>
    <Users>
      <User Name="Service1" AccountType="NetworkService" />
    </Users>
  </Principals>
  <Certificates>
    <EndpointCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbprint]"/>
  </Certificates>
</ApplicationManifest>

Sertakan sertifikat rahasia dalam aplikasi Service Fabric

Untuk memberikan akses aplikasi Anda ke rahasia, sertakan sertifikat dengan menambahkan elemen SecretsCertificate ke manifes aplikasi.

<ApplicationManifest … >
  ...
  <Certificates>
    <SecretsCertificate Name="MyCert" X509FindType="FindByThumbprint" X509FindValue="[YourCertThumbprint]"/>
  </Certificates>
</ApplicationManifest>

Mengautentikasi aplikasi Service Fabric ke Azure Resources menggunakan Managed Service Identity (MSI)

Guna mempelajari tentang identitas terkelola untuk sumber daya Azure, lihat Apa identitas terkelola untuk sumber daya Azure?. Kluster Azure Service Fabric dihosting di Virtual Machine Scale Sets, yang mendukung Identitas Layanan Terkelola. Untuk mendapatkan daftar layanan yang dapat digunakan MSI untuk mengautentikasi, lihat Layanan Azure yang mendukung autentikasi Microsoft Entra.

Untuk mengaktifkan identitas terkelola yang ditetapkan oleh sistem selama pembuatan set skala komputer virtual atau set skala komputer virtual yang ada, nyatakan properti "Microsoft.Compute/virtualMachinesScaleSets" berikut:

"identity": { 
    "type": "SystemAssigned"
}

Lihat Apa itu identitas terkelola untuk sumber daya Azure? untuk informasi selengkapnya.

Jika Anda membuat identitas terkelola yang ditetapkan pengguna, nyatakan sumber daya berikut di templat Anda untuk menetapkannya ke set skala komputer virtual Anda. Ganti \<USERASSIGNEDIDENTITYNAME\> dengan nama identitas terkelola yang Anda buat:

"identity": {
    "type": "userAssigned",
    "userAssignedIdentities": {
        "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('<USERASSIGNEDIDENTITYNAME>'))]": {}
    }
}

Sebelum aplikasi Service Fabric Anda dapat menggunakan identitas terkelola, izin harus diberikan ke Sumber Daya Azure yang perlu diautentikasi. Perintah berikut ini memberikan akses ke Azure Resource:

PRINCIPAL_ID=$(az resource show --id /subscriptions/<YOUR SUBSCRIPTON>/resourceGroups/<YOUR RG>/providers/Microsoft.Compute/virtualMachineScaleSets/<YOUR SCALE SET> --api-version 2018-06-01 | python -c "import sys, json; print(json.load(sys.stdin)['identity']['principalId'])")

az role assignment create --assignee $PRINCIPAL_ID --role 'Contributor' --scope "/subscriptions/<YOUR SUBSCRIPTION>/resourceGroups/<YOUR RG>/providers/<PROVIDER NAME>/<RESOURCE TYPE>/<RESOURCE NAME>"

Dalam kode aplikasi Service Fabric Anda, dapatkan token akses untuk Azure Resource Manager dengan membuat REST yang semuanya mirip dengan yang berikut ini:

ACCESS_TOKEN=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fmanagement.azure.com%2F' -H Metadata:true | python -c "import sys, json; print json.load(sys.stdin)['access_token']")

Aplikasi Service Fabric Anda kemudian dapat menggunakan token akses untuk mengautentikasi ke Azure Resources yang mendukung Active Directory. Contoh berikut menunjukkan cara melakukan ini untuk sumber daya Azure Cosmos DB:

COSMOS_DB_PASSWORD=$(curl 'https://management.azure.com/subscriptions/<YOUR SUBSCRIPTION>/resourceGroups/<YOUR RG>/providers/Microsoft.DocumentDB/databaseAccounts/<YOUR ACCOUNT>/listKeys?api-version=2016-03-31' -X POST -d "" -H "Authorization: Bearer $ACCESS_TOKEN" | python -c "import sys, json; print(json.load(sys.stdin)['primaryMasterKey'])")

Garis besar keamanan Windows

Kami menyarankan agar Anda menerapkan konfigurasi standar industri yang dikenal secara luas dan teruji dengan baik, seperti garis dasar keamanan Microsoft, dibandingkan dengan membuat garis dasar sendiri; suatu opsi untuk menyediakan ini pada Virtual Machine Scale Sets Anda adalah menggunakan handler ekstensi Azure Desired State Configuration (DSC), untuk mengonfigurasi VM saat online, sehingga menjalankan perangkat lunak produksi.

Azure Firewall

Azure Firewall adalah layanan keamanan jaringan berbasis cloud terkelola yang melindungi sumber daya Azure Virtual Network Anda. Ini adalah firewall yang sepenuhnya stateful sebagai layanan dengan ketersediaan tinggi bawaan dan skalabilitas cloud yang tidak terbatas.; ini memungkinkan kemampuan untuk membatasi lalu lintas HTTP/S keluar ke daftar tertentu dari nama domain yang sepenuhnya memenuhi syarat (FQDN) termasuk kartubebas. Fitur ini tidak memerlukan penghentian TLS. Disarankan agar Anda memanfaatkan tag FQDN Azure Firewall untuk Windows Updates, dan untuk mengaktifkan lalu lintas jaringan ke titik akhir Microsoft Windows Updates dapat mengalir melalui firewall Anda. Sebarkan Azure Firewall menggunakan templat memberikan sampel untuk definisi templat sumber daya Microsoft.Network/azureFirewalls. Aturan firewall yang umum untuk Aplikasi Service Fabric adalah untuk memungkinkan yang tercantum berikut untuk jaringan virtual kluster Anda:

  • *download.microsoft.com
  • *servicefabric.azure.com
  • *.core.windows.net

Aturan firewall ini melengkapi Network Security Group keluar yang diizinkan, yang akan mencakup ServiceFabric dan Storage, sebagai tujuan yang diizinkan dari jaringan virtual Anda.

TLS 1.2

Microsoft Azure merekomendasikan semua pengguna menyelesaikan migrasi ke solusi yang mendukung keamanan lapisan transportasi atau transport layer security (TLS) 1.2 dan memastikan bahwa TLS 1.2 digunakan secara default.

Layanan Azure, yang mencakup Service Fabric, telah menyelesaikan pekerjaan teknik untuk menghapus dependensi pada protokol TLS 1.0/1.1.1 dan memberikan dukungan penuh kepada pelanggan yang ingin mengonfigurasi beban kerja mereka untuk menerima dan memulai hanya koneksi TLS 1.2.

Pelanggan harus mengonfigurasi beban kerja dan aplikasi lokal yang dihosting oleh Azure yang berinteraksi dengan layanan Azure untuk menggunakan TLS 1.2 secara default. Berikut adalah cara mengonfigurasi node dan aplikasi kluster Service Fabric untuk menggunakan versi TLS tertentu.

Pertahanan Windows

Secara default, antivirus Windows Defender diinstal pada Windows Server 2016. Untuk detailnya, lihat Antivirus Windows Defender di Windows Server 2016. Antarmuka pengguna dipasang secara default pada beberapa SKU, tetapi tidak wajib. Untuk mengurangi dampak performa dan overhead konsumsi sumber daya yang ditimbulkan oleh Windows Defender, dan jika kebijakan keamanan Anda memungkinkan untuk mengecualikan proses dan jalur untuk perangkat lunak sumber terbuka, nyatakan properti templat Virtual Machine Scale Set Extension Resource Manager berikut untuk mengecualikan kluster Service Fabric Anda dari pemindaian:

 {
    "name": "[concat('VMIaaSAntimalware','_vmNodeType0Name')]",
    "properties": {
        "publisher": "Microsoft.Azure.Security",
        "type": "IaaSAntimalware",
        "typeHandlerVersion": "1.5",
        "settings": {
            "AntimalwareEnabled": "true",
            "Exclusions": {
                "Paths": "[concat(parameters('svcFabData'), ';', parameters('svcFabLogs'), ';', parameters('svcFabRuntime'))]",
                "Processes": "Fabric.exe;FabricHost.exe;FabricInstallerService.exe;FabricSetup.exe;FabricDeployer.exe;ImageBuilder.exe;FabricGateway.exe;FabricDCA.exe;FabricFAS.exe;FabricUOS.exe;FabricRM.exe;FileStoreService.exe;FabricBRS.exe;BackupCopier.exe"
            },
            "RealtimeProtectionEnabled": "true",
            "ScheduledScanSettings": {
                "isEnabled": "true",
                "scanType": "Quick",
                "day": "7",
                "time": "120"
            }
        },
        "protectedSettings": null
    }
}

Catatan

Lihat dokumentasi Antimalware Anda untuk aturan konfigurasi jika Anda tidak menggunakan Windows Defender. Windows Defender tidak didukung di Linux.

Hosting aplikasi yang tidak tepercaya dalam kluster Service Fabric

Kluster Service Fabric adalah penyewa tunggal berdasarkan desain dan aplikasi yang dihosting dianggap tepercaya. Aplikasi, karenanya, diberikan hak akses ke runtime Service Fabric itu sendiri, yang memanifestasikannya dalam berbagai bentuk: variabel lingkungan yang menunjuk ke jalur file pada host yang sesuai dengan file aplikasi dan Fabric, jalur host yang dipasang dengan akses tulis ke beban kerja kontainer, titik akhir komunikasi antar-proses yang menerima permintaan khusus-aplikasi, dan sertifikat klien yang diharapkan Fabric aplikasi mengautentikasi sendiri.

Jika Anda mempertimbangkan hosting aplikasi yang tidak tepercaya, Anda harus mengambil langkah tambahan untuk menentukan dan memiliki pengalaman multi-penyewa yang tidak bersahabat untuk kluster Service Fabric Anda. Ini akan mengharuskan Anda untuk mempertimbangkan berbagai aspek, dalam konteks skenario Anda, termasuk, namun tidak terbatas pada, hal-hal berikut:

  • Tinjauan keamanan menyeluruh terhadap interaksi aplikasi yang tidak tepercaya dengan aplikasi lain, kluster itu sendiri, dan infrastruktur komputasi yang mendasarinya.
  • Penggunaan teknologi kotak pasir terkuat yang berlaku (misalnya, mode isolasi yang sesuai untuk beban kerja kontainer).
  • Penilaian risiko dari aplikasi yang tidak tepercaya yang melarikan diri dari teknologi kotak pasir, karena batas kepercayaan dan keamanan berikutnya adalah kluster itu sendiri.
  • Penghapusan akses aplikasi yang tidak tepercaya ke runtime Service Fabric.

RemoveServiceFabricRuntimeAccess

Akses ke runtime Service Fabric dapat dihapus dengan menggunakan deklarasi berikut di bagian Kebijakan dari manifes aplikasi:

<ServiceManifestImport>
    <Policies>
        <ServiceFabricRuntimeAccessPolicy RemoveServiceFabricRuntimeAccess="true"/>
    </Policies>
</ServiceManifestImport>

Langkah berikutnya