Поделиться через


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

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

хранилище ключей

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

Примечание.

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

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

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

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

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

Развертывание сертификатов 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. Чтобы назначить ACL для сертификатов в процессах кластера Service Fabric, используйте следующие свойства шаблона управления ресурсами:

"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-адрес Microsoft ознакомьтесь с тем, как настроить Azure DNS для размещения вашего домена.

Примечание.

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

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

Чтобы обновить портал для отображения пользовательского 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, чтобы развернуть сертификаты 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

Используйте инструкции из раздела «Развертывание сертификатов Key Vault в масштабируемые наборы виртуальных машин кластера Service Fabric» для развертывания в масштабируемые наборы виртуальных машин вашего кластера 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"
}

Более подробно см. в разделе Управляемые удостоверения для ресурсов Azure.

Если вы создали управляемое удостоверение, назначаемое пользователем, объявите в шаблоне следующий ресурс, чтобы назначить его масштабируемому набору виртуальных машин. Замените \<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 получите токен доступа для Azure 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.

УдалитьДоступКСредеВыполненияServiceFabric

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

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

Дальнейшие действия