【问题标题】:Cannot access Azure backend storage using SSL无法使用 SSL 访问 Azure 后端存储
【发布时间】:2020-02-17 13:13:51
【问题描述】:

我使用 Azure Blob 存储作为状态后端,由于新的安全要求,我现在需要使用 SSL 访问 azure 存储帐户。然而,这失败了:

module.core_infra.data.terraform_remote_state.mccp_core_infra: data.terraform_remote_state.mccp_core_infra:存储:服务返回 错误:StatusCode=403,ErrorCode=AuthenticationFailed, ErrorMessage=服务器未能验证请求。确保 Authorization 标头的值正确形成,包括 签名。

这是一个示例配置:

resource "azurerm_storage_account" "terraform_state_account" {
   name                     = "${lower(replace(var.azure_tenant_name, "/\\W|_/", ""))}tfstate"
   resource_group_name      = "${azurerm_resource_group.main.name}"
   location                 = "${var.azure_location}"
   account_tier             = "Standard"
   account_replication_type = "LRS"
   enable_https_traffic_only = true

   network_rules {
     ip_rules                   = ["masked/24"]
     virtual_network_subnet_ids = ["${azurerm_subnet.mccp_vnet_subnet.id}"]
   }

   tags = {
     environment = "${var.azure_tenant_name} terraform state account"
   }
 }

data "terraform_remote_state" "mccp_core_infra" {
   backend = "azurerm"
   config = {
     storage_account_name = "${lower(replace(var.azure_tenant_name, "/\\W|_/", ""))}tfstate"
     container_name       = "mccp-core-infra-tf-state"
     key                  = "terraform.tfstate"
     access_key           = "${var.azure_mccp_storage_account_key}"
   }
 }

我将 Terraform 0.11.11 与 azurerm 提供程序 1.33.0 一起使用。没有enable_https_traffic_only 标志,这工作得很好。我在这里错过了什么?

【问题讨论】:

  • 存储帐户是否存在?现在,您有一个创建存储帐户的资源,然后是一个尝试立即访问它的数据源。这创造了一个明显的竞争条件。如stackoverflow.com/q/47913041/2291321stackoverflow.com/q/39212826/2291321 中所述,使用 Terraform 管理存储状态(例如 Azure blob 存储或 S3)的位置很棘手
  • 确实存在。数据源实际存在并在单独的 Jenkins 管道阶段执行,有足够的时间来创建它。就像我在帖子中提到的那样,在添加 enable_https_traffic_only 标志之前我对此没有任何问题。

标签: azure terraform azure-blob-storage


【解决方案1】:

enable_https_traffic_only 功能不会影响该错误。这适用于 Terraform v0.12.9 中的 enable_https_traffic_only 标志 + provider.azurerm v1.35.0 在我这边。

这似乎是一个凭据问题。当access_key 在数据源中无效时,我可以重现您的问题。您可以验证您是否可以使用该访问密钥访问该存储帐户 blob,或者您是否从托管 .tfstate 的正确存储帐户名称获取引用。

您也可以尝试删除本地的.terraform 文件夹,然后再试一次,正如this post 中提到的那样。

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 2017-12-21
    • 2021-08-09
    • 2020-02-08
    • 2019-01-27
    • 2019-05-03
    • 2020-06-09
    • 1970-01-01
    相关资源
    最近更新 更多