Azure Service Fabric-beveiliging

Raadpleeg de aanbevolen procedures voor Azure Service Fabric-beveiliging voor meer informatie over aanbevolen procedures voor Azure-beveiliging

Sleutelkluis

Azure Key Vault is de aanbevolen service voor geheimenbeheer voor Azure Service Fabric-toepassingen en -clusters.

Notitie

Als certificaten/geheimen uit een sleutelkluis als een virtuele-machineschaalset worden geïmplementeerd als een geheim voor virtuele-machineschaalsets, moeten de Sleutelkluis en virtuele-machineschaalset zich op dezelfde locatie bevinden.

Een door de certificeringsinstantie uitgegeven Service Fabric-certificaat maken

Een Azure Key Vault-certificaat kan worden gemaakt of geïmporteerd in een Key Vault. Wanneer een Key Vault-certificaat wordt gemaakt, wordt de persoonlijke sleutel gemaakt in de Sleutelkluis en nooit blootgesteld aan de certificaateigenaar. Hier volgen de manieren om een certificaat te maken in Key Vault:

  • Maak een zelfondertekend certificaat om een openbaar persoonlijk sleutelpaar te maken en dit aan een certificaat te koppelen. Het certificaat wordt ondertekend met een eigen sleutel.
  • Maak handmatig een nieuw certificaat om een persoonlijk sleutelpaar te maken en een X.509-aanvraag voor certificaatondertekening te genereren. De ondertekeningsaanvraag kan worden ondertekend door uw registratie-instantie of certificeringsinstantie. Het ondertekende x509-certificaat kan worden samengevoegd met het sleutelpaar in behandeling om het KV-certificaat in Key Vault te voltooien. Hoewel deze methode meer stappen vereist, biedt deze u meer beveiliging omdat de persoonlijke sleutel is gemaakt in en beperkt tot Key Vault. Dit wordt uitgelegd in het onderstaande diagram.

Bekijk de methoden voor het maken van Azure Keyvault-certificaten voor meer informatie.

Key Vault-certificaten implementeren in virtuele-machineschaalsets van Service Fabric-clusters

Als u certificaten van een co-locatiesleutelkluis wilt implementeren in een virtuele-machineschaalset, gebruikt u osProfile van de virtuele-machineschaalset. Hier volgen de eigenschappen van de Resource Manager-sjabloon:

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

Notitie

De kluis moet zijn ingeschakeld voor resource manager-sjabloonimplementatie.

Een toegangsbeheerlijst (ACL) toepassen op uw certificaat voor uw Service Fabric-cluster

Extensies voor virtuele-machineschaalsets Microsoft.Azure.ServiceFabric worden gebruikt om uw knooppuntbeveiliging te configureren. Als u een ACL wilt toepassen op uw certificaten voor uw Service Fabric-clusterprocessen, gebruikt u de volgende Resource Manager-sjablooneigenschappen:

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

Een Service Fabric-clustercertificaat beveiligen op algemene naam

Als u uw Service Fabric-cluster op certificaat Common Namewilt beveiligen, gebruikt u de eigenschap CertificateCommonNames van de Resource Manager-sjabloon als volgt:

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

Notitie

Service Fabric-clusters gebruiken het eerste geldige certificaat dat wordt gevonden in het certificaatarchief van uw host. In Windows is dit het certificaat met de meest recente vervaldatum die overeenkomt met de vingerafdruk van uw algemene naam en verlener.

Azure-domeinen, zoals *<YOUR SUBDOMAIN.cloudapp.azure.com> of <YOUR SUBDOMAIN.trafficmanager.net>, zijn eigendom van Microsoft. Certificeringsinstanties verlenen geen certificaten voor domeinen aan onbevoegde gebruikers. De meeste gebruikers moeten een domein kopen bij een registrar of een geautoriseerde domeinbeheerder zijn, zodat een certificeringsinstantie u een certificaat met die algemene naam kan uitgeven.

Lees hoe u Azure DNS configureert voor het hosten van uw domein voor het hosten van uw domein voor meer informatie over het configureren van de DNS-service voor het omzetten van uw domein in een Microsoft-IP-adres.

Notitie

Voeg na het delegeren van uw domeinennaamservers de naamservers van uw Azure DNS-zone de volgende twee records toe aan uw DNS-zone:

  • Een A-record voor domein-APEX die niet aan Alias record set alle IP-adressen is die uw aangepaste domein zal omzetten.
  • Een C-record voor Microsoft-subdomeinen die u hebt ingericht en die geen Alias record set. U kunt bijvoorbeeld de DNS-naam van uw Traffic Manager of load balancer gebruiken.

Als u uw portal wilt bijwerken om een aangepaste DNS-naam voor uw Service Fabric-cluster "managementEndpoint"weer te geven, werkt u de volgende eigenschappen van het Service Fabric-cluster resource manager bij:

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

Geheime waarden voor Service Fabric-pakketten versleutelen

Algemene waarden die zijn versleuteld in Service Fabric-pakketten zijn onder andere ACR-referenties (Azure Container Registry), omgevingsvariabelen, instellingen en opslagaccountsleutels voor Azure Volume-invoegtoepassing.

Een versleutelingscertificaat instellen en geheimen versleutelen op Windows-clusters:

Genereer een zelfondertekend certificaat voor het versleutelen van uw geheim:

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

Gebruik de instructies in Key Vault-certificaten implementeren in virtuele-machineschaalsets van het Service Fabric-cluster om Key Vault-certificaten te implementeren in de virtuele-machineschaalsets van uw Service Fabric-cluster.

Versleutel uw geheim met behulp van de volgende PowerShell-opdracht en werk vervolgens uw Service Fabric-toepassingsmanifest bij met de versleutelde waarde:

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

Een versleutelingscertificaat instellen en geheimen versleutelen op Linux-clusters:

Genereer een zelfondertekend certificaat voor het versleutelen van uw geheimen:

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

Gebruik de instructies in Key Vault-certificaten implementeren voor virtuele-machineschaalsets van service fabric-clusters naar de virtuele-machineschaalsets van uw Service Fabric-cluster.

Versleutel uw geheim met behulp van de volgende opdrachten en werk vervolgens uw Service Fabric-toepassingsmanifest bij met de versleutelde waarde:

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

Nadat u uw beveiligde waarden hebt versleuteld, geeft u versleutelde geheimen op in de Service Fabric-toepassing en ontsleutelt u versleutelde geheimen uit servicecode.

Eindpuntcertificaat opnemen in Service Fabric-toepassingen

Als u het certificaat voor het toepassingseindpunt wilt configureren, voegt u het certificaat toe door een EndpointCertificate-element toe te voegen, samen met het element Gebruiker voor het principal-account aan het toepassingsmanifest. Standaard is het principal-account NetworkService. Hiermee wordt het beheer van de persoonlijke sleutel-ACL van het toepassingscertificaat voor de opgegeven principal geboden.

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

Geheim certificaat opnemen in Service Fabric-toepassingen

Als u uw toepassing toegang wilt geven tot geheimen, neemt u het certificaat op door een SecretsCertificate-element toe te voegen aan het toepassingsmanifest.

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

Service Fabric-toepassingen verifiëren bij Azure-resources met Managed Service Identity (MSI)

Zie Wat zijn beheerde identiteiten voor Azure-resources? Voor meer informatie over beheerde identiteiten voor Azure-resources. Azure Service Fabric-clusters worden gehost op Virtuele-machineschaalsets, die ondersteuning bieden voor Managed Service Identity. Als u een lijst met services wilt ophalen waarmee MSI kan worden geverifieerd, raadpleegt u Azure-services die ondersteuning bieden voor Microsoft Entra-verificatie.

Als u door het systeem toegewezen beheerde identiteit wilt inschakelen tijdens het maken van een virtuele-machineschaalset of een bestaande virtuele-machineschaalset, declareert u de volgende "Microsoft.Compute/virtualMachinesScaleSets" eigenschap:

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

Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie.

Als u een door de gebruiker toegewezen beheerde identiteit hebt gemaakt, declareert u de volgende resource in uw sjabloon om deze toe te wijzen aan uw virtuele-machineschaalset. Vervang \<USERASSIGNEDIDENTITYNAME\> door de naam van de door de gebruiker toegewezen beheerde identiteit die u hebt gemaakt:

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

Voordat uw Service Fabric-toepassing gebruik kan maken van een beheerde identiteit, moeten machtigingen worden verleend aan de Azure-resources waarmee deze moet worden geverifieerd. Met de volgende opdrachten verleent u toegang tot een 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>"

Haal in uw Service Fabric-toepassingscode een toegangstoken op voor Azure Resource Manager door een REST te maken die allemaal vergelijkbaar is met de volgende:

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

Uw Service Fabric-app kan vervolgens het toegangstoken gebruiken om te verifiëren bij Azure-resources die Ondersteuning bieden voor Active Directory. In het volgende voorbeeld ziet u hoe u dit doet voor een Azure Cosmos DB-resource:

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

Windows-beveiligingsbasislijnen

We raden u aan om een industriestandaardconfiguratie te implementeren die algemeen bekend en goed getest is, zoals Microsoft-beveiligingsbasislijnen, in plaats van zelf een basislijn te maken. Een optie voor het inrichten hiervan op uw virtuele-machineschaalsets is het gebruik van de Dsc-extensiehandler (Azure Desired State Configuration) om de VM's te configureren zodra ze online zijn, zodat ze de productiesoftware uitvoeren.

Azure Firewall

Azure Firewall is een beheerde, cloudgebaseerde netwerkbeveiligingsservice die uw Azure Virtual Network-resources beschermt. Het is een volledige stateful firewall als een service met ingebouwde hoge beschikbaarheid en onbeperkte cloudschaalbaarheid.; Hiermee kunt u uitgaand HTTP/S-verkeer beperken tot een opgegeven lijst met FQDN's (Fully Qualified Domain Names), inclusief jokertekens. Voor deze functie is geen TLS/SSL-beëindiging vereist. Het wordt aanbevolen om FQDN-tags van Azure Firewall te gebruiken voor Windows Updates en om netwerkverkeer naar Microsoft Windows Update-eindpunten te laten stromen via uw firewall. Azure Firewall implementeren met behulp van een sjabloon biedt een voorbeeld voor de resourcesjabloondefinitie Microsoft.Network/azureFirewalls. Firewallregels die gebruikelijk zijn voor Service Fabric-toepassingen zijn om het volgende toe te staan voor het virtuele netwerk van uw clusters:

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

Deze firewallregels vormen een aanvulling op de toegestane uitgaande netwerkbeveiligingsgroepen, waaronder ServiceFabric en Storage, als toegestane bestemmingen van uw virtuele netwerk.

TLS 1.2

Microsoft Azure raadt alle klanten aan om volledige migratie naar oplossingen te voltooien die ondersteuning bieden voor TLS 1.2 (Transport Layer Security) 1.2 en ervoor te zorgen dat TLS 1.2 standaard wordt gebruikt.

Azure-services, waaronder Service Fabric, hebben het technische werk voltooid om afhankelijkheid van TLS 1.0/1.1-protocollen te verwijderen en volledige ondersteuning te bieden aan klanten die hun workloads willen laten configureren voor het accepteren en initiëren van alleen TLS 1.2-verbindingen.

Klanten moeten hun door Azure gehoste workloads en on-premises toepassingen configureren die communiceren met Azure-services om TLS 1.2 standaard te gebruiken. U kunt als volgt Service Fabric-clusterknooppunten en -toepassingen configureren voor het gebruik van een specifieke TLS-versie.

Windows Defender

Windows Defender antivirus is standaard geïnstalleerd op Windows Server 2016. Zie Windows Defender Antivirus op Windows Server 2016 voor meer informatie. De gebruikersinterface wordt standaard geïnstalleerd op een aantal SKU's, maar is niet vereist. Als u de prestatie- en resourceverbruiksoverhead wilt verminderen die door Windows Defender wordt gemaakt en als u met uw beveiligingsbeleid processen en paden voor opensource-software kunt uitsluiten, declareert u de volgende resourcebeheersjablooneigenschappen voor virtuele-machineschaalsetuitbreidingen om uw Service Fabric-cluster uit te sluiten van scans:

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

Notitie

Raadpleeg de antimalwaredocumentatie voor configuratieregels als u Windows Defender niet gebruikt. Windows Defender wordt niet ondersteund in Linux.

Niet-vertrouwde toepassingen hosten in een Service Fabric-cluster

Een Service Fabric-cluster is standaard één tenant en gehoste toepassingen worden beschouwd als vertrouwd. Toepassingen krijgen daarom toegang tot de Service Fabric-runtime, die in verschillende vormen manifesteert, waarvan sommige zijn: omgevingsvariabelen die verwijzen naar bestandspaden op de host die overeenkomt met toepassings- en Fabric-bestanden, hostpaden die zijn gekoppeld aan schrijftoegang tot containerworkloads, een communicatie-eindpunt tussen processen dat toepassingsspecifieke aanvragen accepteert en het clientcertificaat dat fabric verwacht dat de toepassing wordt gebruikt om zichzelf te verifiëren.

Als u overweegt om niet-vertrouwde toepassingen te hosten, moet u aanvullende stappen uitvoeren om de vijandige multitenant-ervaring voor uw Service Fabric-cluster te definiëren en te bezitten. Hiervoor moet u rekening houden met meerdere aspecten, in de context van uw scenario, waaronder, maar niet beperkt tot, het volgende:

  • Een grondige beveiligingsbeoordeling van de interacties van niet-vertrouwde toepassingen met andere toepassingen, het cluster zelf en de onderliggende rekeninfrastructuur.
  • Gebruik van de sterkste sandbox-technologie die van toepassing is (bijvoorbeeld de juiste isolatiemodi voor containerworkloads).
  • Risicoanalyse van de niet-vertrouwde toepassingen die ontsnappen aan de sandbox-technologie, omdat de volgende vertrouwens- en beveiligingsgrens het cluster zelf is.
  • Het verwijderen van de toegang van niet-vertrouwde toepassingen tot Service Fabric Runtime.

RemoveServiceFabricRuntimeAccess

Toegang tot Service Fabric-runtime kan worden verwijderd met behulp van de volgende declaratie in de sectie Beleid van het toepassingsmanifest:

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

Volgende stappen