Azure Service Fabric-säkerhet

Mer information om metodtips för Azure Security finns i Metodtips för Säkerhet i Azure Service Fabric

Key Vault

Azure Key Vault är den rekommenderade tjänsten för hantering av hemligheter för Azure Service Fabric-program och -kluster.

Kommentar

Om certifikat/hemligheter från ett nyckelvalv distribueras till en VM-skalningsuppsättning som en hemlighet för vm-skalningsuppsättningen måste Nyckelvalvet och VM-skalningsuppsättningen finnas tillsammans.

Skapa certifikatutfärdare utfärdat Service Fabric-certifikat

Ett Azure Key Vault-certifikat kan antingen skapas eller importeras till ett Key Vault. När ett Key Vault-certifikat skapas skapas den privata nyckeln i Nyckelvalvet och exponeras aldrig för certifikatägaren. Så här skapar du ett certifikat i Key Vault:

  • Skapa ett självsignerat certifikat för att skapa ett offentligt-privat nyckelpar och associera det med ett certifikat. Certifikatet kommer att signeras av sin egen nyckel.
  • Skapa ett nytt certifikat manuellt för att skapa ett offentligt-privat nyckelpar och generera en X.509-certifikatsigneringsbegäran. Signeringsbegäran kan signeras av din registreringsutfärdare eller certifikatutfärdare. Det signerade x509-certifikatet kan sammanfogas med det väntande nyckelparet för att slutföra KV-certifikatet i Key Vault. Även om den här metoden kräver fler steg ger den dig större säkerhet eftersom den privata nyckeln skapas i och begränsas till Key Vault. Detta förklaras i diagrammet nedan.

Mer information finns i Metoder för att skapa Azure Keyvault-certifikat.

Distribuera Key Vault-certifikat till Service Fabric-kluster för vm-skalningsuppsättningar

Om du vill distribuera certifikat från en samordnad nyckelvalv till en VM-skalningsuppsättning använder du OsProfile för vm-skalningsuppsättning. Följande är egenskaperna för Resource Manager-mallen:

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

Kommentar

Valvet måste vara aktiverat för distribution av Resource Manager-mallar.

Tillämpa en åtkomstkontrollista (ACL) på certifikatet för ditt Service Fabric-kluster

Virtual Machine Scale Set-tilläggsutgivaren Microsoft.Azure.ServiceFabric används för att konfigurera Nodes Security. Om du vill tillämpa en ACL på dina certifikat för dina Service Fabric-klusterprocesser använder du följande Resource Manager-mallegenskaper:

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

Skydda ett Service Fabric-klustercertifikat med eget namn

Om du vill skydda Service Fabric-klustret med certifikat Common Nameanvänder du Resource Manager-mallegenskapen certificateCommonNames på följande sätt:

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

Kommentar

Service Fabric-kluster använder det första giltiga certifikatet som hittas i värdens certifikatarkiv. I Windows är det här certifikatet med det senaste utgångsdatumet som matchar tumavtrycket Common Name och Issuer.

Azure-domäner, till exempel *<YOUR SUBDOMAIN.cloudapp.azure.com> eller <YOUR SUBDOMAIN.trafficmanager.net>, ägs av Microsoft. Certifikatutfärdare utfärdar inte certifikat för domäner till obehöriga användare. De flesta användare måste köpa en domän från en registrator, eller vara en auktoriserad domänadministratör, för att en certifikatutfärdare ska kunna utfärda ett certifikat med det gemensamma namnet.

Mer information om hur du konfigurerar DNS-tjänsten för att matcha din domän till en Microsoft IP-adress finns i hur du konfigurerar Azure DNS som värd för din domän.

Kommentar

När du har delegerat domännamnsservrarna till dina Azure DNS-zonnamnservrar lägger du till följande två poster i DNS-zonen:

  • En A-post för domän-APEX som INTE är en Alias record set till alla IP-adresser som din anpassade domän löser.
  • En C-post för Microsoft-underdomäner som du har etablerat som INTE är en Alias record set. Du kan till exempel använda Traffic Manager eller Load Balancers DNS-namn.

Uppdatera portalen för att visa ett anpassat DNS-namn för Service Fabric-klustret "managementEndpoint"genom att uppdatera följande egenskaper för Service Fabric Cluster Resource Manager-mallen:

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

Kryptera service fabric-pakethemlighetsvärden

Vanliga värden som krypteras i Service Fabric-paket är autentiseringsuppgifter för Azure Container Registry (ACR), miljövariabler, inställningar och Azure Volume-lagringskontonycklar för plugin-program.

Så här konfigurerar du ett krypteringscertifikat och krypterar hemligheter i Windows-kluster:

Generera ett självsignerat certifikat för kryptering av din hemlighet:

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

Använd anvisningarna i Distribuera Key Vault-certifikat till Service Fabric-kluster vm-skalningsuppsättningar för att distribuera Key Vault-certifikat till Service Fabric-klustrets VM-skalningsuppsättningar.

Kryptera din hemlighet med hjälp av följande PowerShell-kommando och uppdatera sedan service fabric-programmanifestet med det krypterade värdet:

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

Så här konfigurerar du ett krypteringscertifikat och krypterar hemligheter i Linux-kluster:

Generera ett självsignerat certifikat för kryptering av dina hemligheter:

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

Använd anvisningarna i Distribuera Key Vault-certifikat till Service Fabric-kluster vm-skalningsuppsättningar till Service Fabric-klustrets VM-skalningsuppsättningar.

Kryptera din hemlighet med hjälp av följande kommandon och uppdatera sedan Service Fabric-programmanifestet med det krypterade värdet:

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

När du har krypterat dina skyddade värden anger du krypterade hemligheter i Service Fabric-programmet och dekrypterar krypterade hemligheter från tjänstkoden.

Inkludera slutpunktscertifikat i Service Fabric-program

Om du vill konfigurera programmets slutpunktscertifikat inkluderar du certifikatet genom att lägga till ett EndpointCertificate-element tillsammans med användarelementet för huvudkontot i programmanifestet. Som standard är huvudkontot NetworkService. Detta ger hantering av den privata nyckel-ACL:en för programcertifikatet för det angivna huvudkontot.

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

Inkludera hemligt certifikat i Service Fabric-program

Om du vill ge ditt program åtkomst till hemligheter inkluderar du certifikatet genom att lägga till ett SecretsCertificate-element i programmanifestet.

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

Autentisera Service Fabric-program till Azure-resurser med hjälp av hanterad tjänstidentitet (MSI)

Mer information om hanterade identiteter för Azure-resurser finns i Vad är hanterade identiteter för Azure-resurser?. Azure Service Fabric-kluster finns på VM-skalningsuppsättningar som stöder hanterad tjänstidentitet. En lista över tjänster som MSI kan användas för att autentisera till finns i Azure-tjänster som stöder Microsoft Entra-autentisering.

Om du vill aktivera systemtilldelad hanterad identitet när en vm-skalningsuppsättning skapas eller en befintlig skalningsuppsättning för virtuella datorer deklarerar du följande "Microsoft.Compute/virtualMachinesScaleSets" egenskap:

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

Mer information finns i Vad är hanterade identiteter för Azure-resurser?

Om du har skapat en användartilldelad hanterad identitet deklarerar du följande resurs i mallen för att tilldela den till vm-skalningsuppsättningen. Ersätt \<USERASSIGNEDIDENTITYNAME\> med namnet på den användartilldelade hanterade identiteten som du skapade:

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

Innan ditt Service Fabric-program kan använda en hanterad identitet måste behörigheter beviljas till de Azure-resurser som det behöver autentiseras med. Följande kommandon ger åtkomst till en Azure-resurs:

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>"

I din Service Fabric-programkod hämtar du en åtkomsttoken för Azure Resource Manager genom att göra en REST som liknar följande:

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']")

Din Service Fabric-app kan sedan använda åtkomsttoken för att autentisera till Azure-resurser som stöder Active Directory. I följande exempel visas hur du gör detta för en Azure Cosmos DB-resurs:

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'])")

Säkerhetsbaslinjer för Windows

Vi rekommenderar att du implementerar en branschstandardkonfiguration som är allmänt känd och väl testad, till exempel Microsofts säkerhetsbaslinjer, i stället för att skapa en baslinje själv. Ett alternativ för att etablera dessa på vm-skalningsuppsättningar är att använda Tilläggshanteraren för Azure Desired State Configuration (DSC) för att konfigurera de virtuella datorerna när de är online, så att de kör produktionsprogramvaran.

Azure Firewall

Azure Firewall är en hanterad, molnbaserad tjänst för nätverkssäkerhet som skyddar dina Azure Virtual Network-resurser. Det är en helt tillståndskänslig brandvägg som en tjänst med inbyggd hög tillgänglighet och obegränsad molnskalbarhet.; Detta gör det möjligt att begränsa utgående HTTP/S-trafik till en angiven lista över fullständigt kvalificerade domännamn (FQDN) inklusive jokertecken. Den här funktionen kräver inte TLS/SSL-avslutning. Vi rekommenderar att du använder FQDN-taggar för Azure Firewall för Windows Uppdateringar och att aktivera nätverkstrafik till Microsoft Windows Update-slutpunkter kan flöda genom brandväggen. Distribuera Azure Firewall med hjälp av en mall innehåller ett exempel för resursmalldefinitionen Microsoft.Network/azureFirewalls. Brandväggsregler som är gemensamma för Service Fabric-program är att tillåta följande för ditt virtuella klusternätverk:

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

Dessa brandväggsregler kompletterar dina tillåtna utgående nätverkssäkerhetsgrupper, som skulle inkludera ServiceFabric och Storage, som tillåtna mål från ditt virtuella nätverk.

TLS 1.2

Microsoft Azure rekommenderar att alla kunder slutför migreringen till lösningar som stöder transportnivåsäkerhet (TLS) 1.2 och att TLS 1.2 används som standard.

Azure-tjänster, inklusive Service Fabric, har slutfört det tekniska arbetet för att ta bort beroendet av TLS 1.0/1.1-protokoll och ge fullständig support till kunder som vill att deras arbetsbelastningar ska vara konfigurerade att acceptera och initiera endast TLS 1.2-anslutningar.

Kunder bör konfigurera sina Azure-värdbaserade arbetsbelastningar och lokala program som interagerar med Azure-tjänster för att använda TLS 1.2 som standard. Så här konfigurerar du Service Fabric-klusternoder och -program för att använda en specifik TLS-version.

Windows Defender

Som standard är Windows Defender antivirus installerat på Windows Server 2016. Mer information finns i Windows Defender Antivirus på Windows Server 2016. Användargränssnittet installeras som standard på vissa SKU:er, men det krävs inte. Om du vill minska prestandapåverkan och resursförbrukning som uppstår för Windows Defender, och om dina säkerhetsprinciper tillåter att du undantar processer och sökvägar för programvara med öppen källkod, deklarerar du följande resource manager-mallegenskaper för vm-skalningsuppsättningstillägg för att undanta Service Fabric-klustret från genomsökningar:

 {
    "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
    }
}

Kommentar

Se dokumentationen om program mot skadlig kod för konfigurationsregler om du inte använder Windows Defender. Windows Defender stöds inte i Linux.

Värd för program som inte är betrodda i ett Service Fabric-kluster

Ett Service Fabric-kluster är en enskild klientorganisation och värdbaserade program anses vara betrodda. Program beviljas därför åtkomst till Service Fabric-körningen, som manifesteras i olika former, varav några är: miljövariabler som pekar på filsökvägar på värden som motsvarar program- och infrastrukturfiler, värdsökvägar monterade med skrivåtkomst till containerarbetsbelastningar, en kommunikationsslutpunkt mellan processer som accepterar programspecifika begäranden och klientcertifikatet som Fabric förväntar sig att programmet ska använda för att autentisera sig självt.

Om du överväger att vara värd för program som inte är betrodda måste du vidta ytterligare åtgärder för att definiera och äga den fientliga upplevelsen för flera klientorganisationer för ditt Service Fabric-kluster. Detta kräver att du överväger flera aspekter, i samband med ditt scenario, inklusive, men inte begränsat till, följande:

  • En grundlig säkerhetsgranskning av de ej betrodda programmens interaktioner med andra program, själva klustret och den underliggande beräkningsinfrastrukturen.
  • Användning av den starkaste sandbox-tekniken (t.ex. lämpliga isoleringslägen för containerarbetsbelastningar).
  • Riskbedömning av ej betrodda program som undflyr sandbox-tekniken, eftersom nästa förtroende- och säkerhetsgräns är själva klustret.
  • Borttagning av de ej betrodda programmens åtkomst till Service Fabric-körning.

RemoveServiceFabricRuntimeAccess

Åtkomst till Service Fabric-körning kan tas bort med hjälp av följande deklaration i avsnittet Principer i programmanifestet:

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

Nästa steg