Проблема с циклической зависимостью шаблона ARM

У меня есть 2 ресурса Azure в шаблоне ARM, которые зависят друг от друга: хранилище ключей и кластер служебной фабрики.

Для хранилища ключей мне нужно указать идентификатор объекта кластера служебной фабрики в политиках доступа хранилища ключей, чтобы предоставить ему разрешение на доступ к секретам. Для кластера служебной фабрики мне нужно, чтобы он ссылался на секреты из хранилища ключей. Ни один из этих ресурсов не существует во время развертывания.

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


person pegalusAlt    schedule 24.04.2020    source источник
comment
но вам не нужны сертификаты для ресурса servicefabric, только их имена DNS   -  person 4c74356b41    schedule 24.04.2020
comment
@ 4c74356b41 извините, я должен был быть более конкретным. В данном случае это не сертификаты, а секреты. Один из URL-адресов секретов указывается в файле конфигурации, из которого будет читать ресурс приложения Service Fabric, а другой - секрет, указанный для имени пользователя и пароля кластера Service Fabric для входа в шаблон ARM.   -  person pegalusAlt    schedule 24.04.2020
comment
Я нигде не вижу проблемы с курицей и яйцом. Чтобы извлечь данные из хранилища ключей при развертывании, вам необходимо предоставить доступ к шаблону (или vmss) хранилищу ключей, что осуществляется с помощью расширенных политик доступа, и это можно сделать в любое время. даже если есть что-то, что нужно извлечь из самого ресурса servicefabric - вы можете сделать это, когда он будет готов, но до создания масштабных наборов   -  person 4c74356b41    schedule 24.04.2020
comment
При первом развертывании ни один ресурс не будет существовать. Нам нужно иметь возможность развернуть хранилище ключей с секретами, а также указать идентификатор объекта приложений служебной фабрики в политике доступа хранилища ключей. Проблема в том, что невозможно указать идентификатор объекта приложения Service Fabric во время первого развертывания, поскольку ресурс не существует. Другая проблема: если мы сначала удалим приложение Service Fabric только для того, чтобы получить идентификатор объекта, приложение Service Fabric запустится и не сможет получить секрет, потому что у него еще нет доступа.   -  person pegalusAlt    schedule 24.04.2020
comment
Я полагаю, вы используете MSI? Не уверен, что SF позволит вам это сделать, но вам нужно разделить и обновить развертывания. Разверните SF без секрета в автономном состоянии, создайте хранилище, затем повторно разверните SF в конечное состояние ...   -  person bmoore-msft    schedule 25.04.2020
comment
Я по-прежнему нигде не вижу проблемы, у вас есть зависимости, вы можете создать приложение kv и sf одновременно, а затем обновить оба.   -  person 4c74356b41    schedule 25.04.2020
comment
У нас очень строгие требования к безопасности и соответствию, и для каждого развертывания требуется одобрение. Мы хотели сделать это плавно, без использования своевременного доступа, но похоже, что нет решения, которое не требовало бы множественных развертываний.   -  person pegalusAlt    schedule 26.04.2020


Ответы (1)


Я считаю, что у меня аналогичная ситуация, когда у меня есть хранилище ключей, которое содержит секреты и сертификаты, на которые ссылается кластер Service Fabric (SFC), а затем мне нужно предоставить разрешение для управляемой идентификации SFC, чтобы иметь доступ к хранилищу ключей. . Я использую комбинацию PowerShell и вложенных / связанных шаблонов ARM.

Запустите отдельный сценарий PowerShell с помощью конвейера Azure DevOps, который выполняет следующие шаги развертывания:

  1. Развертывание Key Vault с помощью ARM
  2. Импортировать секреты и сертификаты в КВ по ПС
  3. Deploy SFC by ARM (references KV secrets)
    1. After SFC (by dependson), perform ARM deployment to set KV access policy

Пример от Microsoft: https://github.com/Azure/azure-quickstart-templates/blob/master/101-keyvault-add-access-policy/azuredeploy.json#L35

    {
      "type": "Microsoft.KeyVault/vaults/accessPolicies",
      "name": "[concat(parameters('keyVaultName'), '/add')]",
      "apiVersion": "2019-09-01",
      "properties": {
        "accessPolicies": [
          {
            "tenantId": "[parameters('tenantId')]",
            "objectId": "[parameters('objectId')]",
            "permissions": {
              "secrets": "[parameters('secretsPermissions')]"
            }
          }
        ]
      }
    }

Все развертывается и настраивается с помощью одного выпуска.

person Stringfellow    schedule 15.05.2020