Search code examples
authenticationazure-functionsstaging

Disable basic auth for function app & staging slot


I have a function app with staging slot with the following settings:

Basic Authentication : Off

How do I set this for function app and staging slot via bicep?


Solution

  • I agree to the comment and this SO Thread answer by @GordonBy

    I followed this MS Document1 bicep code for setting Policies-Ftp to false and this MS Document2 bicep code for setting Policy-scm to false.

    My Bicep Code referred from this Blog to Deploy Function app with Basic Authentication set to off:-

    param appName string
    param location string = resourceGroup().location
    
    // storage accounts must be between 3 and 24 characters in length and use numbers and lower-case letters only
    var storageAccountName = '${substring(appName,0,10)}${uniqueString(resourceGroup().id)}' 
    var hostingPlanName = '${appName}${uniqueString(resourceGroup().id)}'
    var appInsightsName = '${appName}${uniqueString(resourceGroup().id)}'
    var functionAppName = appName
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
      name: storageAccountName
      location: location
      kind: 'StorageV2'
      sku: {
        name: 'Standard_LRS'
        
      }
    }
    
    resource appInsights 'Microsoft.Insights/components@2020-02-02-preview' = {
      name: appInsightsName
      location: location
      kind: 'web'
      properties: { 
        Application_Type: 'web'
        publicNetworkAccessForIngestion: 'Enabled'
        publicNetworkAccessForQuery: 'Enabled'
      }
      tags: {
        // circular dependency means we can't reference functionApp directly  /subscriptions/<subscriptionId>/resourceGroups/<rg-name>/providers/Microsoft.Web/sites/<appName>"
         'hidden-link:/subscriptions/${subscription().id}/resourceGroups/${resourceGroup().name}/providers/Microsoft.Web/sites/${functionAppName}': 'Resource'
      }
    }
    
    resource hostingPlan 'Microsoft.Web/serverfarms@2020-10-01' = {
      name: hostingPlanName
      location: location
      sku: {
        name: 'Y1' 
        tier: 'Dynamic'
      }
    }
    
    resource functionApp 'Microsoft.Web/sites@2020-06-01' = {
      name: functionAppName
      location: location
      kind: 'functionapp'
      properties: {
        httpsOnly: true
    
        serverFarmId: hostingPlan.id
        clientAffinityEnabled: true
        siteConfig: {
          appSettings: [
            {
              name: 'APPINSIGHTS_INSTRUMENTATIONKEY'
              value: appInsights.properties.InstrumentationKey
            }
            {
              name: 'AzureWebJobsStorage'
              value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${listKeys(storageAccount.id, storageAccount.apiVersion).keys[0].value}'
            }
            {
              name: 'FUNCTIONS_EXTENSION_VERSION'
              value: '~3'
            }
            {
              name: 'FUNCTIONS_WORKER_RUNTIME'
              value: 'dotnet'
            }
            {
              name: 'WEBSITE_CONTENTAZUREFILECONNECTIONSTRING'
              value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};EndpointSuffix=${environment().suffixes.storage};AccountKey=${listKeys(storageAccount.id, storageAccount.apiVersion).keys[0].value}'
            }
            // WEBSITE_CONTENTSHARE will also be auto-generated - https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings#website_contentshare
            // WEBSITE_RUN_FROM_PACKAGE will be set to 1 by func azure functionapp publish
          ]
        
        }
      }
    }
    
    resource functionapp 'Microsoft.Web/sites/config@2022-03-01' = {
      name: 'authsettings'
      kind: 'string'
      parent: functionApp
      properties: {
        enabled: false
      }
    }
    
    resource ftpAuth 'Microsoft.Web/sites/basicPublishingCredentialsPolicies@2022-03-01' = {
      name: 'ftp'
      kind: 'string'
      parent: functionApp
      properties: {
        allow: false
      }
    }
    
    resource scmAuth 'Microsoft.Web/sites/basicPublishingCredentialsPolicies@2022-03-01' = {
      name: 'scm'
      kind: 'string'
      parent: functionApp
      properties: {
        allow: false
      }
    }
    

    Output:-

    enter image description here

    Function app Deployed, and Basic Authentication is set to off.

    enter image description here