【发布时间】: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/2291321 和stackoverflow.com/q/39212826/2291321 中所述,使用 Terraform 管理存储状态(例如 Azure blob 存储或 S3)的位置很棘手
-
确实存在。数据源实际存在并在单独的 Jenkins 管道阶段执行,有足够的时间来创建它。就像我在帖子中提到的那样,在添加 enable_https_traffic_only 标志之前我对此没有任何问题。
标签: azure terraform azure-blob-storage