Zabezpieczenia usługi Azure Service Fabric

Aby uzyskać więcej informacji na temat najlepszych rozwiązań dotyczących zabezpieczeń platformy Azure, zapoznaj się z artykułem Azure Service Fabric security best practices (Najlepsze rozwiązania dotyczące zabezpieczeń usługi Azure Service Fabric)

Magazyn kluczy

Usługa Azure Key Vault to zalecana usługa zarządzania wpisami tajnymi dla aplikacji i klastrów usługi Azure Service Fabric.

Uwaga

Jeśli certyfikaty/wpisy tajne z usługi Key Vault są wdrażane w zestawie skalowania maszyn wirtualnych jako wpis tajny zestawu skalowania maszyn wirtualnych, należy współlokować magazyn kluczy i zestaw skalowania maszyn wirtualnych.

Tworzenie certyfikatu wystawionego przez urząd certyfikacji usługi Service Fabric

Certyfikat usługi Azure Key Vault można utworzyć lub zaimportować do usługi Key Vault. Po utworzeniu certyfikatu usługi Key Vault klucz prywatny jest tworzony w usłudze Key Vault i nigdy nie jest udostępniany właścicielowi certyfikatu. Poniżej przedstawiono sposoby tworzenia certyfikatu w usłudze Key Vault:

  • Utwórz certyfikat z podpisem własnym, aby utworzyć parę kluczy publiczny-prywatny i skojarzyć go z certyfikatem. Certyfikat zostanie podpisany przy użyciu własnego klucza.
  • Utwórz nowy certyfikat ręcznie, aby utworzyć parę kluczy publiczny-prywatny i wygenerować żądanie podpisania certyfikatu X.509. Żądanie podpisania może zostać podpisane przez urząd rejestracji lub urząd certyfikacji. Podpisany certyfikat x509 można scalić z oczekującą parą kluczy, aby ukończyć certyfikat KV w usłudze Key Vault. Mimo że ta metoda wymaga więcej kroków, zapewnia większe bezpieczeństwo, ponieważ klucz prywatny jest tworzony w usłudze Key Vault i ograniczony do usługi Key Vault. Zostało to wyjaśnione na poniższym diagramie.

Aby uzyskać więcej informacji, zapoznaj się z metodami tworzenia certyfikatów usługi Azure Keyvault.

Wdrażanie certyfikatów usługi Key Vault w klastrze usługi Service Fabric w zestawach skalowania maszyn wirtualnych

Aby wdrożyć certyfikaty ze współlokowalnego magazynu kluczy do zestawu skalowania maszyn wirtualnych, użyj zestawu skalowania maszyn wirtualnych osProfile. Poniżej przedstawiono właściwości szablonu usługi Resource Manager:

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

Uwaga

Magazyn musi być włączony dla wdrożenia szablonu usługi Resource Manager.

Stosowanie listy kontroli dostępu (ACL) do certyfikatu dla klastra usługi Service Fabric

Do konfigurowania zabezpieczeń węzłów służy wydawca rozszerzeń zestawu skalowania maszyn wirtualnych Microsoft.Azure.ServiceFabric. Aby zastosować listę ACL do certyfikatów dla procesów klastra usługi Service Fabric, użyj następujących właściwości szablonu usługi Resource Manager:

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

Zabezpieczanie certyfikatu klastra usługi Service Fabric według nazwy pospolitej

Aby zabezpieczyć klaster usługi Service Fabric według certyfikatu Common Name, użyj certyfikatu właściwości szablonu usługi Resource ManagerCommonNames w następujący sposób:

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

Uwaga

Klastry usługi Service Fabric będą używać pierwszego prawidłowego certyfikatu znalezionego w magazynie certyfikatów hosta. W systemie Windows będzie to certyfikat z najnowszą datą wygaśnięcia zgodną z twoją nazwą pospolitą i odciskiem palca wystawcy.

Domeny platformy Azure, takie jak *<YOUR SUBDOMAIN.cloudapp.azure.com> lub <YOUR SUBDOMAIN.trafficmanager.net>, należą do firmy Microsoft. Urzędy certyfikacji nie będą wystawiać certyfikatów dla domen dla nieautoryzowanych użytkowników. Większość użytkowników musi kupić domenę od rejestratora lub być autoryzowanym administratorem domeny, aby urząd certyfikacji wystawił certyfikat o tej nazwie pospolitej.

Aby uzyskać dodatkowe informacje na temat konfigurowania usługi DNS w celu rozpoznawania domeny pod adresem IP firmy Microsoft, zapoznaj się z artykułem Konfigurowanie usługi Azure DNS do hostowania domeny.

Uwaga

Po delegowaniu serwerów nazw domen do serwerów nazw strefy usługi Azure DNS dodaj następujące dwa rekordy do strefy DNS:

  • Rekord "A" dla domeny APEX, który nie jest adresem Alias record set IP, które domena niestandardowa zostanie rozpoznana.
  • Rekord "C" dla aprowizowanych domen podrzędnych firmy Microsoft, które nie Alias record setsą . Można na przykład użyć nazwy DNS usługi Traffic Manager lub usługi Load Balancer.

Aby zaktualizować portal w celu wyświetlenia niestandardowej nazwy DNS dla klastra "managementEndpoint"usługi Service Fabric, zaktualizuj następujące właściwości szablonu usługi Service Fabric Cluster Resource Manager:

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

Szyfrowanie wartości wpisów tajnych pakietu usługi Service Fabric

Typowe wartości szyfrowane w pakietach usługi Service Fabric obejmują poświadczenia usługi Azure Container Registry (ACR), zmienne środowiskowe, ustawienia i klucze konta magazynu wtyczki woluminu platformy Azure.

Aby skonfigurować certyfikat szyfrowania i zaszyfrować wpisy tajne w klastrach systemu Windows:

Wygeneruj certyfikat z podpisem własnym na potrzeby szyfrowania wpisu tajnego:

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

Skorzystaj z instrukcji w artykule Wdrażanie certyfikatów usługi Key Vault w zestawach skalowania maszyn wirtualnych klastra usługi Service Fabric, aby wdrożyć certyfikaty usługi Key Vault w zestawach skalowania maszyn wirtualnych klastra usługi Service Fabric.

Zaszyfruj wpis tajny przy użyciu następującego polecenia programu PowerShell, a następnie zaktualizuj manifest aplikacji usługi Service Fabric przy użyciu zaszyfrowanej wartości:

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

Aby skonfigurować certyfikat szyfrowania i zaszyfrować wpisy tajne w klastrach systemu Linux:

Wygeneruj certyfikat z podpisem własnym na potrzeby szyfrowania wpisów tajnych:

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

Skorzystaj z instrukcji w artykule Wdrażanie certyfikatów usługi Key Vault w zestawach skalowania maszyn wirtualnych klastra usługi Service Fabric do zestawów skalowania maszyn wirtualnych klastra usługi Service Fabric.

Zaszyfruj wpis tajny przy użyciu następujących poleceń, a następnie zaktualizuj manifest aplikacji usługi Service Fabric przy użyciu zaszyfrowanej wartości:

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

Po zaszyfrowaniu chronionych wartości określ zaszyfrowane wpisy tajne w aplikacji usługi Service Fabric i odszyfruj zaszyfrowane wpisy tajne z kodu usługi.

Dołączanie certyfikatu punktu końcowego w aplikacjach usługi Service Fabric

Aby skonfigurować certyfikat punktu końcowego aplikacji, dołącz certyfikat, dodając element EndpointCertificate wraz z elementem User dla konta głównego do manifestu aplikacji. Domyślnie główne konto to NetworkService. Zapewni to zarządzanie listą ACL klucza prywatnego certyfikatu aplikacji dla podanego podmiotu zabezpieczeń.

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

Dołączanie certyfikatu tajnego w aplikacjach usługi Service Fabric

Aby przyznać aplikacji dostęp do wpisów tajnych, dołącz certyfikat, dodając element SecretsCertificate do manifestu aplikacji.

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

Uwierzytelnianie aplikacji usługi Service Fabric w zasobach platformy Azure przy użyciu tożsamości usługi zarządzanej (MSI)

Aby dowiedzieć się więcej o tożsamościach zarządzanych dla zasobów platformy Azure, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?. Klastry usługi Azure Service Fabric są hostowane w zestawach skalowania maszyn wirtualnych, które obsługują tożsamość usługi zarządzanej. Aby uzyskać listę usług, których usługa MSI może użyć do uwierzytelniania, zobacz Usługi platformy Azure, które obsługują uwierzytelnianie firmy Microsoft Entra.

Aby włączyć tożsamość zarządzaną przypisaną przez system podczas tworzenia zestawu skalowania maszyn wirtualnych lub istniejącego zestawu skalowania maszyn wirtualnych, zadeklaruj następującą "Microsoft.Compute/virtualMachinesScaleSets" właściwość:

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

Aby uzyskać więcej informacji, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?

Jeśli utworzono tożsamość zarządzaną przypisaną przez użytkownika, zadeklaruj następujący zasób w szablonie, aby przypisać go do zestawu skalowania maszyn wirtualnych. Zastąp \<USERASSIGNEDIDENTITYNAME\> ciąg nazwą utworzonej tożsamości zarządzanej przypisanej przez użytkownika:

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

Zanim aplikacja usługi Service Fabric będzie mogła korzystać z tożsamości zarządzanej, należy przyznać uprawnienia do zasobów platformy Azure, za pomocą których musi się uwierzytelnić. Następujące polecenia udzielają dostępu do zasobu platformy Azure:

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

W kodzie aplikacji usługi Service Fabric uzyskaj token dostępu dla usługi Azure Resource Manager, tworząc interfejs REST podobny do następującego:

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

Aplikacja usługi Service Fabric może następnie użyć tokenu dostępu do uwierzytelniania w zasobach platformy Azure, które obsługują usługę Active Directory. W poniższym przykładzie pokazano, jak to zrobić dla zasobu usługi 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'])")

Punkty odniesienia zabezpieczeń systemu Windows

Zalecamy zaimplementowanie standardowej w branży konfiguracji, która jest powszechnie znana i dobrze przetestowana, takich jak punkty odniesienia zabezpieczeń firmy Microsoft, w przeciwieństwie do samodzielnego tworzenia punktu odniesienia. Opcja aprowizacji tych konfiguracji w zestawach skalowania maszyn wirtualnych polega na użyciu programu obsługi rozszerzenia Azure Desired State Configuration (DSC), aby skonfigurować maszyny wirtualne w miarę ich działania w trybie online, tak aby uruchamiały oprogramowanie produkcyjne.

Azure Firewall

Azure Firewall to zarządzana, sieciowa usługa zabezpieczeń oparta na chmurze, która zabezpiecza zasoby usługi Azure Virtual Network. Jest to w pełni stanowa zapora oferowana jako usługa z wbudowaną wysoką dostępnością i możliwością nieograniczonego skalowania w chmurze.; Umożliwia to ograniczenie wychodzącego ruchu HTTP/S do określonej listy w pełni kwalifikowanych nazw domen (FQDN), w tym symboli wieloznacznych. Ta funkcja nie wymaga zakończenia protokołu TLS/SSL. Zaleca się korzystanie z tagów FQDN usługi Azure Firewall dla systemu Windows Aktualizacje i włączenie ruchu sieciowego do punktów końcowych usługi Microsoft Windows Update może przepływać przez zaporę. Wdrażanie usługi Azure Firewall przy użyciu szablonu zawiera przykład definicji szablonu zasobu Microsoft.Network/azureFirewalls. Reguły zapory wspólne dla aplikacji usługi Service Fabric umożliwiają następujące reguły dla sieci wirtualnej klastrów:

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

Te reguły zapory uzupełniają dozwolone sieciowe grupy zabezpieczeń ruchu wychodzącego, które obejmują usługi ServiceFabric i Storage jako dozwolone miejsca docelowe z sieci wirtualnej.

TLS 1.2

Platforma Microsoft Azure zaleca, aby wszyscy klienci ukończyli migrację do rozwiązań obsługujących protokół TRANSPORT Layer Security (TLS) 1.2 i upewnili się, że protokół TLS 1.2 jest domyślnie używany.

Usługi platformy Azure, w tym usługa Service Fabric, zakończyły prace inżynieryjne w celu usunięcia zależności od protokołów TLS 1.0/1.1 i zapewniają pełną obsługę klientom, którzy chcą mieć skonfigurowane obciążenia do akceptowania i inicjowania tylko połączeń TLS 1.2.

Klienci powinni domyślnie konfigurować obciążenia hostowane na platformie Azure i aplikacje lokalne współdziałające z usługami platformy Azure w celu korzystania z protokołu TLS 1.2. Poniżej przedstawiono sposób konfigurowania węzłów i aplikacji klastra usługi Service Fabric pod kątem używania określonej wersji protokołu TLS.

Windows Defender

Domyślnie program antywirusowy Windows Defender jest instalowany w systemie Windows Server 2016. Aby uzyskać szczegółowe informacje, zobacz Program antywirusowy Windows Defender w systemie Windows Server 2016. Interfejs użytkownika jest domyślnie instalowany w przypadku niektórych jednostek SKU, ale nie jest to wymagane. Aby zmniejszyć wpływ na wydajność i obciążenie związane z zużyciem zasobów poniesione przez usługę Windows Defender, a zasady zabezpieczeń umożliwiają wykluczanie procesów i ścieżek oprogramowania typu open source, zadeklaruj następujące właściwości szablonu usługi Service Fabric rozszerzenia zestawu skalowania maszyn wirtualnych, aby wykluczyć klaster usługi Service Fabric ze skanowania:

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

Uwaga

Jeśli nie używasz usługi Windows Defender, zapoznaj się z dokumentacją dotyczącą reguł konfiguracji ochrony przed złośliwym kodem. Usługa Windows Defender nie jest obsługiwana w systemie Linux.

Hostowanie niezaufanych aplikacji w klastrze usługi Service Fabric

Klaster usługi Service Fabric jest jedną dzierżawą zgodnie z projektem, a hostowane aplikacje są uznawane za zaufane. W związku z tym aplikacje mają dostęp do środowiska uruchomieniowego usługi Service Fabric, które manifestuje się w różnych formach, z których niektóre to: zmienne środowiskowe wskazujące ścieżki plików na hoście odpowiadającym plikom aplikacji i plikom sieci szkieletowej, ścieżki hosta zainstalowane z dostępem do zapisu na obciążeniach kontenerów, punkt końcowy komunikacji między procesami, który akceptuje żądania specyficzne dla aplikacji, oraz certyfikat klienta, którego sieć szkieletowa oczekuje, że aplikacja będzie używana do uwierzytelniania się.

Jeśli rozważasz hostowanie niezaufanych aplikacji, musisz wykonać dodatkowe kroki, aby zdefiniować i posiadać wrogie środowisko wielodostępne dla klastra usługi Service Fabric. Będzie to wymagało rozważenia wielu aspektów w kontekście scenariusza, w tym, ale nie tylko, następujących elementów:

  • Szczegółowy przegląd zabezpieczeń interakcji niezaufanych aplikacji z innymi aplikacjami, samym klastrem i podstawową infrastrukturą obliczeniową.
  • Zastosowanie najsilniejszej technologii piaskownicy (np. odpowiednich trybów izolacji dla obciążeń kontenerów).
  • Ocena ryzyka niezaufanych aplikacji uciekających przed technologią piaskownicy, ponieważ następną granicą zaufania i zabezpieczeń jest sam klaster.
  • Usunięcie niezaufanego dostępu aplikacji do środowiska uruchomieniowego usługi Service Fabric.

RemoveServiceFabricRuntimeAccess

Dostęp do środowiska uruchomieniowego usługi Service Fabric można usunąć przy użyciu następującej deklaracji w sekcji Zasady manifestu aplikacji:

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

Następne kroki