使用 Terraform 在 Azure 上部署应用服务出现未经授权的错误

Posted

技术标签:

【中文标题】使用 Terraform 在 Azure 上部署应用服务出现未经授权的错误【英文标题】:Unauthorized error using Terraform to deploy app service on Azure 【发布时间】:2020-03-09 15:34:44 【问题描述】:

我正在尝试使用 Terraform 在 azure app 服务上部署一个 Windows 容器。应用服务计划部署良好,但当应用服务尝试部署时出现授权错误。我正在使用具有管理员用户和密码的 ACR 实例的连接字符串。有没有人有一些想法?

如果我从门户手动进行部署,则部署工作。

# Create an App Service Plan with Windows
resource "azurerm_app_service_plan" "appserviceplan" 
  name                = "$var.rg-name-plan"
  location            = "westus"
  resource_group_name = var.rg-name

  # Define Windows as Host OS
  kind                = "xenon"
  is_xenon            = true

  # Choose size
  sku 
    tier = "PremiumContainer"
    size = "PC2"
  


# Create an Azure Web App for Containers in that App Service Plan
resource "azurerm_app_service" "dockerapp" 
  name                = "$var.rg-name-dockerapp"
  location            = "westus"
  resource_group_name = "$var.rg-name"
  app_service_plan_id = "$azurerm_app_service_plan.appserviceplan.id"

  # Configure Docker Image to load on start
  site_config 
    windows_fx_version = "DOCKER|apps.azurecr.io/test/container:latest"
  
  app_settings = 
    # Settings for private Container Registires  
    DOCKER_REGISTRY_SERVER_URL      = "repo.azureco.io",
    DOCKER_REGISTRY_SERVER_USERNAME = "admin user",
    DOCKER_REGISTRY_SERVER_PASSWORD = "password"
  

错误:

Error: Error creating App Service "dockerapp" (Resource Group "resource-group"): web.AppsClient#CreateOrUpdate: Failure sending request: StatusCode=401 -- Original Error: Code="Unauthorized" Message="Access is denied. Not authorized. latest" Details=["Message":"Access is denied. Not authorized. latest","Code":"Unauthorized","ErrorEntity":"Code":"Unauthorized","ExtendedCode":"01001","Message":"Access is denied. Not authorized. latest","MessageTemplate":"Access is denied.","Parameters":[]]

【问题讨论】:

显而易见的问题是 - 您确定您在 terraform 和门户网站上使用的是同一个帐户吗?或尝试清除您的 terraform 凭据并再次登录 azure 【参考方案1】:

您可以验证DOCKER_REGISTRY_SERVER_URL 的值是否正确,它应该是一个有效的URL

例如,它在您的代码中将如下所示。

app_settings = 
    # Settings for private Container Registires  
    DOCKER_REGISTRY_SERVER_URL      = "https://apps.azurecr.io", 
    DOCKER_REGISTRY_SERVER_USERNAME = "admin user",
    DOCKER_REGISTRY_SERVER_PASSWORD = "password"
  

如需更多参考,Here 是使用 Terraform 在 azure 应用服务上部署 Windows 容器的示例。

【讨论】:

你验证了吗?您还需要注意您为 ACR 输入了正确的凭据。 我没有,但是您提供的解决方案与我在工作项目中的处理方式相同,并且认为没有理由扩展您的答案,而不是试图从您那里抢走位置。我相信如果他们使用 OP,他的问题会得到解决。【参考方案2】:

您能否快速检查 DOCKER_REGISTRY_SERVER_URL 中的 URL 是否与您在 site_config.windows_fx_version 中使用的 URL 相同

【讨论】:

以上是关于使用 Terraform 在 Azure 上部署应用服务出现未经授权的错误的主要内容,如果未能解决你的问题,请参考以下文章

Terraform - 长时间运行 Azure 部署错误

Terraform - Azure 作为提供者和受限访问帐户

使用 Terraform 部署 Azure 资源时如何解决插件错误?

此处不应出现“azure_blob_fs_location”类型的块

如何使用 Terraform 为 Azure 资源创建警报

Terraform 部署 azure 函数导致“无法下载 ZIP FILE.txt”