Аутентифицировать систему, присвоенную идентификацию для подключения Event Grid API - PullRequest
0 голосов
/ 23 февраля 2020

Может кто-нибудь помочь мне найти секрет клиента для идентификатора, назначенного системой в шаблоне ARM, или предложить альтернативный подход?

У меня есть шаблон ARM, который создает приложение Logi c с системой назначенный идентификатор, и теперь я хочу установить соединение API для запуска из сетки событий (без использования пользовательского интерфейса портала или отдельной команды powershell).

Я не могу понять, как получить секрет клиента для система присвоила личность. Это позволило бы мне следовать ответам на эти предыдущие вопросы:

Вот что у меня есть:

"resources": [
        {
            "apiVersion": "2016-06-01",
            "type": "Microsoft.logic/workflows",
            "name": "[variables('logicName')]",
            "location": "[resourceGroup().location]",
            "identity": {
                "type": "SystemAssigned"
            },    
            "dependsOn": [
                "[variables('connections_azuretables_name')]"
            ],
            "properties": {
                "state": "Enabled",
                "definition": {
                   <<SNIP>>
                }
            }
        },
        {
            "type": "Microsoft.Web/connections",
            "apiVersion": "2016-06-01",
            "name": "[variables('azureEventGridConnectionAPIName')]",
            "location": "[resourceGroup().location]",
            "properties": {
                "api": {
                "id": "[concat('/subscriptions/subscriptionId', '/providers/Microsoft.Web/locations/', 'eastasia', '/managedApis/', 'azureeventgrid')]"

                },
                "parameterValues": {
                "token:clientId": "[reference(variables('logicName'), '2016-06-01', 'Full').identity.principalId]",
                "token:clientSecret": "########### STUCK HERE #################",
                "token:TenantId": "[reference(variables('logicName'), '2016-06-01', 'Full').identity.tenantId]",
                "token:grantType": "client_credentials"
                },
                "displayName": "[variables('azureEventGridConnectionAPIName')]"

            },
            "dependsOn": []
            }
    ],

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Для всех, кто интересуется, довольно просто создать принципала вручную и затем передать его в шаблон ARM:

> az ad sp create-for-rbac --name MyPrincipal

{
  "appId": "##############",
  "displayName": "MyPrincipal",
  "name": "http://MyPrincipal",
  "password": "##############",
  "tenant": "##############"
}

Теперь передайте appId (как clientId) password (как clientSecret) и tenant (как tenantId) в блок parameterValues в Microsoft.Web/connections. Это создаст соединение API Event Grid для вашего приложения logi c, но с последствиями для политик доступа и накладных расходов на управление идентификацией вне шаблона ARM.

Фактическое решение, которое я использовал, - это создание подписка на события webhook в Event Grid, а затем настроил мое приложение logi c на запуск веб-перехвата. Это прекрасно работает.

Вот пример решения:

{
  "name": "[parameters('topicName')]",
  "type": "Microsoft.EventGrid/topics",
  "location": "[resourceGroup().location]",
  "apiVersion": "2018-01-01",
  "properties": { }
},
{
  "name": "[concat(parameters('topicName'), '/Microsoft.EventGrid/', variables('topicSubscriptionName'))]",
  "type": "Microsoft.EventGrid/topics/providers/eventSubscriptions",
  "location": "[resourceGroup().location]",
  "apiVersion": "2018-01-01",
  "properties": {
    "destination": {
      "endpointType": "WebHook",
      "properties": {
        "endpointUrl": "[listCallbackURL(resourceId('Microsoft.Logic/workflows/triggers', parameters('logicName'), 'WorkaroundWebhookTrigger'), '2016-06-01').value]"
      }
    },
    "filter": {
      "includedEventTypes": [
        "All"
      ]
    }
  },
  "dependsOn": [
    "[parameters('topicName')]",
    "[parameters('logicName')]"
  ]
},
{
  "apiVersion": "2016-06-01",
  "type": "Microsoft.logic/workflows",
  "name": "[parameters('logicName')]",
  "location": "[resourceGroup().location]",
  "identity": {
    "type": "SystemAssigned"
  },  
  "dependsOn": [],
  "properties": {
    "state": "Enabled",
    "definition": {
      "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "$connections": {
          "defaultValue": {},
          "type": "Object"
        }
      },
      "triggers": {

        "WorkaroundWebhookTrigger": {
          "type": "Request",
          "kind": "Http",
          "inputs": {
            "schema": {
              "properties": {
                "data": {
                  "properties": {
                    "lorem": {
                      "type": "integer"
                    },
                    "ipsum": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "dataVersion": {
                  "type": "string"
                },
                "eventTime": {
                  "type": "string"
                },
                "eventType": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "metadataVersion": {
                  "type": "string"
                },
                "subject": {
                  "type": "string"
                },
                "topic": {
                  "type": "string"
                }
              },
              "type": "object"
            }
          }
        }
      },
<snip>
0 голосов
/ 23 февраля 2020

Управляемый идентификатор не имеет тайны клиента. У него есть только сертификаты, к которым вы не можете получить доступ.

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

...