Автоматически создавать удостоверение службы приложения при развертывании шаблона ARM для службы приложения с проверкой подлинности - PullRequest
0 голосов
/ 01 июля 2018

Я уже давно борюсь с аутентификацией службы приложений Azure. У меня запущен конвейер CI / CD, и я хочу настроить аутентификацию службы приложений, используя шаблон ARM. Смотрите здесь (часть) мой шаблон:

{
  "name": "[parameters('apiAppName')]",
  "type": "Microsoft.Web/sites",
  "location": "[resourceGroup().location]",
  "apiVersion": "2015-08-01",
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', parameters('apiHostingPlanName'))]"
  ],
  "properties": {
    "name": "[parameters('apiAppName')]",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('apiHostingPlanName'))]",
    "siteConfig": {
      "siteAuthEnabled": true,
      "siteAuthSettings": {
        "unauthenticatedClientAction": 0,
        "defaultProvider": 0,
        "tokenStoreEnabled": true,
        "clientAffinityEnabled": false 
      } 
    }
  }
}

При его развертывании все поставщики аутентификации по-прежнему отображаются как не настроенные.

Для настройки провайдера AAD у меня есть только два решения:

  • Настройте его, используя портал. Не то, что я хочу, ручное нажатие не сочетается с непрерывной доставкой
  • Используйте Azure Powershell в моем конвейере выпуска, чтобы создать (если не существует) регистрацию приложения с клиентским секретом и клиентом и указать это в шаблоне ARM.

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

Ответы [ 3 ]

0 голосов
/ 14 мая 2019

может быть что-то вроде ... добавить массив ресурсов в существующий раздел Microsoft.Web / sites.

{
    "name": "authsettings",
    "type": "config",
    "apiVersion": "2015-08-01",
    "dependsOn": [ 
       "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" 
    ],
    "properties": {
        "enabled": true,
        "httpApiPrefixPath": null,
        "unauthenticatedClientAction": "RedirectToLoginPage",
        "tokenStoreEnabled": true,
        "allowedExternalRedirectUrls": null,
        "defaultProvider": "AzureActiveDirectory",
        "clientId": "[variables('clientId')]",
        "clientSecret": "[variables('clientSecret')]",
        "issuer": "[concat('https://sts.windows.net/', subscription().tenantId, '/')]",
        "allowedAudiences": [
        "[concat('https://', variables('fqdn'), '/.auth/login/aad/callback')]"
        ],
        "additionalLoginParams": null,
        "isAadAutoProvisioned": false
    }
  }
0 голосов
/ 30 июля 2019

Я протестировал разные варианты, чтобы он работал, используя только шаблон Arm для развертывания веб-приложения и непосредственного включения аутентификации, но, похоже, он не работает. Я выбрал правильный способ CI / CD, добавив дополнительную задачу с помощью команды Azure CLI, включив аутентификацию и назначив приложение clientId. Мои задачи:

- task: RalphJansen.Azure-AD-Application-Management.New-Azure-AD-Application.New-Azure-AD-Application@2
  displayName: 'New Azure AD Application'
  inputs:
   azureSubscription: 'SubscriptionID'
   name: '$(apiName)'
   signOnUrl: 'https://$(apiName).azurewebsites.net'

- task: AzureResourceGroupDeployment@2
    displayName: 'Create WebApp'
    inputs:
     azureSubscription: 'SubscriptionID'
     resourceGroupName: '$(ResourceGroup)'
     location: 'Canada East'
     csmFile: '$(System.DefaultWorkingDirectory)/_build/drop/azuredeploy.json'
     overrideParameters: '-apiName $(apiName) -appServicePlanName $(appServicePlanName)'

- task: AzureCLI@1
  displayName: 'Update WebApp to do Oauth authentification & enable Oauth2ImplicitFlow'
  inputs:
    azureSubscription: 'SubscriptionID'
    scriptLocation: inlineScript
    inlineScript: |
     call az webapp auth update --name $(apiName) --aad-client-id $(out.ApplicationId) --action LoginWithAzureActiveDirectory --enabled true --resource-group "$(ResourceGroup)" --aad-token-issuer-url "https://sts.windows.net/your AAD ID here" --token-store true
     call az ad app update --id $(out.ApplicationId) --oauth2-allow-implicit-flow true
0 голосов
/ 29 апреля 2019

Возможно, немного поздно, но если вы еще не нашли ответ ...

ресурсы []

        "apiVersion": "2018-02-01",
        "type": "Microsoft.Web/sites",
        "kind": "app",
        "name": "[variables('webAppName')]",
        "location": "[parameters('location')]",
        "identity": {
            "type": "SystemAssigned"
        },

и включите servicePrincpalId в выходные данные, чтобы его можно было повторно использовать для настройки доступа к требуемым ресурсам keyvault; блоб; sql и т. д.

    "outputs": {
        "appServicePrincipalId": {
            "type": "string",
            "value": "[reference(concat(resourceId('Microsoft.Web/sites/', variables('webAppName')),'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]"
        },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...