Безопасность Azure Service Fabric

Дополнительные сведения о рекомендациях по безопасности Azure см. в этой статье.

Key Vault

Azure Key Vault — это рекомендуемая служба управления секретами для приложений и кластеров Azure Service Fabric.

Примечание.

Если сертификаты или секреты из Key Vault развертываются в масштабируемом наборе виртуальных машин как секрет масштабируемого набора виртуальных машин, хранилище ключей и масштабируемый набор должны располагаться совместно.

Создание сертификата Service Fabric, выданного центром сертификации

Сертификат Azure Key Vault можно создать или импортировать в хранилище Key Vault. При создании сертификата хранилища Key Vault закрытый ключ создается внутри Key Vault и никогда не предоставляется владельцу сертификата. Ниже приведены способы создания сертификата в хранилище Key Vault.

  • Создайте самозаверяющий сертификат, чтобы создать пару открытого и закрытого ключей и связать ее с сертификатом. Сертификат будет подписан собственным ключом.
  • Создайте сертификат вручную, чтобы создать пару открытого и закрытого ключей и создать запрос на подпись сертификата X.509. Запрос на подпись может быть подписан центром регистрации или сертификации. Для завершения создания сертификата в Key Vault подписанный сертификат x509 может быть объединен с ожидающей парой ключей. Несмотря на то что для этого метода необходимо выполнить дополнительные шаги, он более безопасен, так как созданный закрытый ключ доступен только для Key Vault. Это описано на приведенной ниже схеме.

Дополнительные сведения см. в статье Способы создания сертификатов.

Развертывание сертификатов Key Vault в масштабируемых наборах виртуальных машин кластера Service Fabric.

Чтобы развернуть сертификаты из совместно размещенного хранилища ключей в масштабируемый набор виртуальных машин, используйте набор osProfile. Ниже приведены свойства шаблона Resource Manager:

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

Примечание.

Хранилище должно быть включено для развертывания шаблона Resource Manager.

Применение списка управления доступом (ACL) к сертификату для кластера Service Fabric

Для настройки безопасности узлов используется издатель расширений масштабируемых наборов виртуальных машин Microsoft.Azure.ServiceFabric. Чтобы применить список управления доступом к сертификатам процессов кластера Service Fabric, используйте следующие свойства шаблона Resource Manager:

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

Защита сертификата кластера Service Fabric по общему имени

Чтобы защитить кластер Service Fabric сертификатом, Common Nameиспользуйте свойство шаблона Resource Manager certificateCommonNames следующим образом:

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

Примечание.

Кластеры Service Fabric будут использовать первый действительный сертификат, найденный в хранилище сертификатов узла. В Windows это будет сертификат с последней датой истечения срока действия, соответствующий общему имени и отпечатку издателя.

Домены Azure, такие как *<ВАШ ПОДДОМЕН>.cloudapp.azure.com или <ВАШ ПОДДОМЕН>.trafficmanager.net принадлежат корпорации Майкрософт. Центры сертификации не будут выдавать сертификаты для доменов неавторизованным пользователям. Большинству пользователей потребуется приобрести домен у регистратора или быть авторизованным администратором домена, чтобы центр сертификации выдал сертификат с этим общим именем.

Дополнительные сведения о настройке службы DNS для преобразования домена в IP-адрес Майкрософт см. в этой статье.

Примечание.

После делегирования серверов доменных имен серверам имен зон DNS Azure добавьте в зону DNS следующие две записи:

  • Запись "A" для вершины домена, которая не является Alias record set для всех IP-адресов, которые будет разрешать личный домен.
  • Запись "C" для подготовленных поддоменов Майкрософт, которые не являются Alias record set. Например, можно использовать диспетчер трафика или DNS-имя Load Balancer.

Чтобы обновить портал для отображения пользовательского DNS-имени кластера Service Fabric "managementEndpoint", обновите свойства шаблона Resource Manager для кластера Service Fabric.

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

Шифрование значений секретов пакетов Service Fabric

Общие значения, зашифрованные в пакетах Service Fabric, включают в себя учетные данные Реестра контейнеров Azure (ACR), переменные среды, параметры и ключи учетной записи хранения подключаемого модуля томов Azure.

Чтобы настроить сертификат шифрования и шифрование секретов в кластерах Windows:

Создайте самозаверяющий сертификат для шифрования секрета:

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

Используйте инструкции из этого раздела, чтобы развернуть сертификаты Key Vault в масштабируемые наборы виртуальных машин кластера Service Fabric.

Зашифруйте секрет с помощью следующей команды PowerShell, а затем обновите в манифесте приложения Service Fabric зашифрованное значение.

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

Чтобы настроить сертификат шифрования и шифрование секретов в кластерах Linux:

Создайте самозаверяющий сертификат для шифрования секретов:

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

Используйте инструкции из этого раздела для работы с масштабируемыми наборами виртуальных машин кластера Service Fabric.

Зашифруйте секрет с помощью следующих команд, а затем обновите в манифесте приложения Service Fabric зашифрованное значение.

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

После шифрования защищенных значений укажите зашифрованные секреты в приложении Service Fabric и расшифруйте зашифрованные секреты из служебного кода.

Включение сертификата конечной точки в приложения Service Fabric

Чтобы настроить сертификат конечной точки приложения, добавьте сертификат, добавив элемент EndpointCertificate вместе с элементом User для основной учетной записи в манифест приложения. По умолчанию основной учетной записью является NetworkService. Это обеспечит управление ACL закрытого ключа сертификата приложения для указанного субъекта.

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

Включение секретного сертификата в приложения Service Fabric

Чтобы предоставить приложению доступ к секретам, включите сертификат, добавив элемент SecretsCertificate в манифест приложения.

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

Аутентификация приложений Service Fabric в ресурсах Azure с помощью Управляемого удостоверения службы (MSI)

Дополнительные сведения об управляемых удостоверениях в ресурсах Azure см. в разделе Принцип работы управляемых удостоверений для ресурсов Azure. Кластеры Azure Service Fabric размещаются в масштабируемых наборах виртуальных машин, которые поддерживают Управляемое удостоверение службы. Чтобы получить список служб, которые MSI можно использовать для проверки подлинности, см. в службах Azure, поддерживающих проверку подлинности Microsoft Entra.

Чтобы включить управляемое удостоверение, назначаемое системой, для нового или имеющегося масштабируемого набора виртуальных машин, объявите следующее значение "Microsoft.Compute/virtualMachinesScaleSets":

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

Дополнительные сведения см. в разделе Управляемое удостоверение, назначаемое системой.

Если вы создали управляемое удостоверение, назначаемое пользователем, объявите в шаблоне следующий ресурс, чтобы назначить его масштабируемому набору виртуальных машин. Замените \<USERASSIGNEDIDENTITYNAME\> именем созданного управляемого удостоверения, назначаемого пользователем.

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

Прежде чем приложение Service Fabric сможет использовать управляемое удостоверение, необходимо предоставить разрешения для ресурсов Azure, с помощью которых приложение должно проходить аутентификацию. Следующие команды предоставляют доступ к ресурсу 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>"

В коде приложения Service Fabric получите маркер доступа для Resource Manager с помощью следующего запроса REST:

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

Затем ваше приложение Service Fabric может использовать маркер доступа для аутентификации в ресурсах Azure, которые поддерживают Active Directory. В следующем примере показано, как это сделать для ресурса 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'])")

Базовые параметры безопасности Windows

Мы рекомендуем реализовать хорошо известную и проверенную стандартную отраслевую конфигурацию, например базовые показатели безопасности Майкрософт, вместо самостоятельного создания базовых показателей. Для реализации этого решения в масштабируемых наборах виртуальных машин можно использовать обработчик исключений Azure Desired State Configuration (DSC) и настраивать виртуальные машины сразу по мере их подключения к сети: на них сразу будет выполняться рабочее программное обеспечение.

Брандмауэр Azure

Брандмауэр Azure — это управляемая облачная служба сетевой безопасности, которая защищает ресурсы виртуальной сети Azure. Брандмауэр разработан как служба с полным отслеживанием состояния со встроенной высокой доступностью и неограниченной облачной масштабируемостью.; это позволяет ограничить исходящий трафик HTTP/S указанным списком полных доменных имен (FQDN), включая дикие карта. Для этой функции не требуется использование TLS/SSL. Для обновлений Windows рекомендуется использовать теги полного доменного имени Брандмауэра Azure, а также разрешить прохождение через брандмауэр сетевого трафика для конечных точек Центра обновления Microsoft Windows. В статье Развертывание Брандмауэра Azure с помощью шаблона приведено определение шаблона ресурса для Microsoft.Network/azureFirewalls. Правила брандмауэра, общие для приложений Service Fabric, должны разрешать следующие адреса для виртуальной сети ваших кластеров:

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

Эти правила брандмауэра дополняют разрешенные исходящие группы безопасности сети, включающие ServiceFabric и хранилище в качестве разрешенных мест назначения для вашей виртуальной сети.

TLS 1.2

Microsoft Azure рекомендует всем клиентам перейти на решения, поддерживающие протокол TLS 1.2, и по умолчанию использовать TLS 1.2.

В службах Azure, включая Service Fabric, завершены технические работы по устранению зависимости от протоколов TLS 1.0/1.1. Предоставляется полная поддержка клиентам, желающим настроить свои нагрузки так, чтобы они принимали и инициировали подключения только с использованием TLS 1.2.

Клиенты должны настроить использование TLS 1.2 по умолчанию в своих нагрузках, размещенных в Azure, и в приложениях локальной среде, которые взаимодействуют со службами Azure. Вот как настроить узлы кластера Service Fabric и приложения на работу с определенной версией TLS.

Защитник Windows

По умолчанию антивирус Защитника Windows установлен на Windows Server 2016. Дополнительные сведения см. в статье Windows Defender Antivirus on Windows Server 2016 (Антивирусная программа "Защитник Windows" в Windows Server 2016). Пользовательский интерфейс установлен по умолчанию на некоторых номерах SKU, но не является обязательным. Для снижения влияния Защитника Windows на производительность и потребление ресурсов, а также если политики безопасности позволяют исключить процессы и пути для программного обеспечения с открытым кодом, объявите следующие свойства шаблона расширения Resource Manager для масштабируемого набора виртуальных машин, чтобы исключить кластер Service Fabric из сканирования.

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

Примечание.

Если вы не используете Защитник Windows, обратитесь к документации по работе с антивредоносным ПО, чтобы ознакомиться с правилами настройки. Защитник Windows не поддерживается в Linux.

Размещение недоверенных приложений в кластере Service Fabric

Кластер Service Fabric конструктивно представляет собой один клиент, в котором размещенные приложения считаются доверенными. Таким образом, приложениям в разных формах предоставляется доступ к среде выполнения Service Fabric: например, с помощью переменных среды, указывающих на пути к файлам на узле, который соответствует приложению и файлам Fabric; путей к узлам, которые подключены с доступом на запись к рабочим нагрузкам контейнеров; конечной точки обмена данными между процессами, принимающей запросы приложений, и клиентского сертификата, который, как ожидает Fabric, приложения будут использовать для самостоятельной проверки подлинности.

Если вы собираетесь размещать недоверенные приложения, необходимо выполнить дополнительные действия, чтобы определить и взять под контроль злонамеренные процессы с несколькими клиентами для кластера Service Fabric. Для этого потребуется учесть несколько аспектов в контексте вашего сценария, в том числе следующие:

  • тщательная проверка безопасности взаимодействий недоверенных приложений с другими приложениями, самим кластером и базовой инфраструктурой вычислений;
  • использование наиболее надежной технологии "песочницы" (например, соответствующие режимы изоляции для рабочих нагрузок контейнера);
  • оценка рисков недоверенных приложений, исключающих технологию "песочницы", так как в качестве следующей границы доверия и безопасности является сам кластер;
  • запрещение доступа недоверенных приложений к среде выполнения Service Fabric.

RemoveServiceFabricRuntimeAccess

Чтобы запретить доступ к среде выполнения Service Fabric, в разделе политик манифеста приложения прописывается следующее:

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

Следующие шаги