Тип бэкенда: azurerm
Состояние хранится в виде Blob с указанным ключом в контейнере Blob в учётной записи Blob Storage.
Этот бэкенд поддерживает блокировку состояния и проверку согласованности с помощью встроенных возможностей Azure Blob Storage.
Примеры конфигураций
Ключ доступа
В этом примере выполняется аутентификация с помощью ключа доступа, связанного с учётной записью Storage:
terraform {
backend "azurerm" {
storage_account_name = "abcd1234"
container_name = "tfstate"
key = "prod.terraform.tfstate"
access_key = "abcdefghijklmnopqrstuvwxyz0123456789..."
}
}Рекомендуем использовать переменную среды ARM_ACCESS_KEY вместо хранения конфиденциальной информации в исходном коде.
Подпись общего доступа
В этом примере выполняется аутентификация с помощью токена SAS — набора параметров запроса, подписанных ключом доступа, связанным с учётной записью Storage:
terraform {
backend "azurerm" {
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
sas_token = "sv=2024-11-04&ss=b&srt=sco&sp=rwdlaciytfx&se=2025-08-05T23:46:49Z&st=2025-08-05T15:31:49Z&spr=https&sig=abcdefg..."
}
}Рекомендуем использовать переменную среды ARM_SAS_TOKEN вместо хранения конфиденциальной информации в исходном коде.
Использование Entra ID (ранее AzureAD)
Два предыдущих способа аутентификации относятся непосредственно к учётной записи Storage и не связаны с субъектом-службой. Каждый из остальных способов аутентификации можно настроить для использования аутентификации Entra ID вместо аутентификации на основе учётной записи Storage с помощью следующего параметра:
... use_azuread_auth = true ...
С помощью Entra ID можно пройти аутентификацию непосредственно в учётной записи Storage или контейнере Storage с использованием субъекта-службы, которому требуется только роль Storage Blob Data Contributor. Если этот параметр не задан, OpenTofu выполнит аутентификацию и попытается получить ключ доступа для учётной записи Storage.
Роль Owner не предоставляет автоматически доступ к контейнеру Storage через Entra ID; необходимо явно назначить роль для учётной записи Storage, например Storage Blob Data Contributor. Однако роль Owner позволяет субъекту получить ключ доступа к учётной записи Storage.
Если не задать use_azuread_auth = true, необходимо задать resource_group_name. При использовании аутентификации Entra ID параметр resource_group_name не требуется.
Аутентификация через CLI
В этом примере выполняется аутентификация пользователя с использованием профиля Azure, настроенного командой az.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
}
}Аутентификацию через CLI можно отключить, задав use_cli = false.
Аутентификация с помощью сертификата
В этом примере выполняется аутентификация субъекта с помощью сертификата.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_certificate_path = "cert.pfx"
}
}Базовая аутентификация
В этом примере выполняется аутентификация субъекта с помощью обычного секрета.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_secret = "hunter2"
}
}Рекомендуем использовать переменную среды ARM_CLIENT_SECRET вместо хранения конфиденциальной информации в исходном коде.
Токен OpenID Connect
В этом примере выполняется аутентификация субъекта с помощью токена OpenID Connect для федеративных учётных данных.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
use_oidc = true
oidc_token_file_path = "token.env"
}
}Запрос токена GitHub
Если вы используете GitHub Actions, переменные среды ACTIONS_ID_TOKEN_REQUEST_URL и ACTIONS_ID_TOKEN_REQUEST_TOKEN позволят получить токен запроса OIDC. OpenTofu поддерживает эти переменные среды; для рабочей нагрузки с OpenTofu в GitHub Actions и OIDC для аутентификации будет использоваться следующая конфигурация бэкенда.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
use_oidc = true
}
}Федерация удостоверений рабочей нагрузки Azure DevOps / Pipelines
Если вы используете Azure DevOps / Azure Pipelines, переменные среды SYSTEM_OIDCREQUESTURI, SYSTEM_ACCESSTOKEN и AZURESUBSCRIPTION_SERVICE_CONNECTION_ID позволят получить токен запроса OIDC. OpenTofu поддерживает эти переменные среды и другие варианты их имен; для рабочей нагрузки с OpenTofu в Azure DevOps / Azure Pipelines и OIDC для аутентификации будет использоваться следующая конфигурация бэкенда. Дополнительные сведения о настройке такого типа федерации удостоверений рабочей нагрузки см. в документации Azure DevOps.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
use_azuread_auth = true
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
use_oidc = true
}
}Управляемое удостоверение службы
В этом примере выполняется аутентификация с помощью управляемого удостоверения службы, связанного с виртуальной машиной Azure или другим вычислительным ресурсом.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
use_msi = true
}
}Удостоверение рабочей нагрузки AKS
В этом примере выполняется аутентификация с использованием удостоверения рабочей нагрузки в Azure Kubernetes.
terraform {
backend "azurerm" {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
subscription_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
use_aks_workload_identity = true
}
}Конфигурация источника данных
Аутентификация источника данных работает так же, как описанная выше аутентификация удалённого состояния, но синтаксис немного отличается. Например, для получения удалённого состояния с помощью аутентификации через CLI используется следующий код:
data "terraform_remote_state" "foo" {
backend = "azurerm"
config = {
resource_group_name = "tofu-rg"
storage_account_name = "tofu123abc"
container_name = "tofu-state"
key = "prod.terraform.tfstate"
}
}Переменные конфигурации
Рекомендуем передавать учётные данные и другие конфиденциальные данные с помощью переменных среды. Если вы используете -backend-config или указываете эти значения непосредственно в конфигурации, OpenTofu включит их в подкаталог .terraform и в файлы плана. Подробности см. в разделе «Учётные данные и конфиденциальные данные».
Поддерживаются следующие параметры конфигурации:
-
storage_account_name— (Обязательно) Имя учётной записи Storage. -
container_name— (Обязательно) Имя контейнера Storage в учётной записи Storage. -
key— (Обязательно) Имя Blob, используемого для получения и хранения файла состояния OpenTofu в контейнере Storage. -
resource_group_name— (Обязательно, если не используется аутентификация Entra ID) Имя группы ресурсов, в которой находится учётная запись Storage. -
environment— (Необязательно) Конфигурация облака Azure, которую следует использовать; задайте её для специальных сред с требованиями соответствия, например Azure China или Azure US Government. Значение также можно получить из переменной средыARM_ENVIRONMENT. Возможные значения:public,chinaиusgovernment. Значение по умолчанию —public. -
endpoint— (Устарело в версии 1.1x.xx) Пользовательская конечная точка Azure Resource Manager. Значение также можно получить из переменной средыARM_ENDPOINT.Примечаниеendpointследует настраивать только при использовании Azure Stack. Эта переменная не влияет на работу OpenTofu начиная с версии 1.1x.xx. -
timeout_seconds— (Необязательно) Количество секунд до истечения времени ожидания при попытке инициализировать клиент, получить Blob или метаданные из Azure. Значение также можно получить из переменной средыARM_TIMEOUT_SECONDS. По умолчанию —300(5 минут). Чтобы отключить ограничение времени ожидания, задайте значение0.ПримечаниеУстановка для
timeout_secondsзначения0или большого значения отключает или увеличивает только тайм-ауты, заданные OpenTofu. Запросы всё равно будут ограничены настройками сети вашей системы. -
metadata_host— (Необязательно) Имя узла службы метаданных Azure (например,management.azure.com), используемое для получения облачной среды при использовании пользовательской среды Azure. Значение также можно получить из переменной средыARM_METADATA_HOSTNAME.ПримечаниеРекомендуем настраивать
metadata_hostтолько при использовании Azure Stack. -
snapshot— (Необязательно) Следует ли создавать снимок Blob, используемого для хранения файла состояния OpenTofu, перед его использованием? Значение по умолчанию —false. Значение также можно получить из переменной средыARM_SNAPSHOT.ПримечаниеВместо использования снимков рекомендуем включить управление версиями и обратимое удаление в контейнере Azure Storage.
-
customer_provided_key— (Необязательно) Ключ AES-256 в кодировке Base64, используемый для шифрования и расшифровки на стороне сервера Blob, в котором хранится файл состояния OpenTofu. Значение также можно получить из переменной средыARM_CUSTOMER_PROVIDED_KEY. -
encryption_scope— (Необязательно) Область шифрования, которую необходимо использовать для шифрования и расшифровки Blob, в котором хранится файл состояния OpenTofu. Значение также можно получить из переменной средыARM_ENCRYPTION_SCOPE.ПримечаниеПараметры
customer_provided_keyиencryption_scopeвзаимоисключающие. Для шифрования Blob на стороне сервера можно использовать один из них.ПримечаниеЗашифрованный с помощью
customer_provided_keyBlob невозможно восстановить в случае потери ключа.
При аутентификации с помощью управляемого удостоверения службы (MSI) также поддерживаются следующие поля:
-
msi_endpoint— (Устарело в версии 1.1x.xx) Путь к пользовательской конечной точке управляемого удостоверения службы, определяемой автоматически, если значение не указано. Значение также можно получить из переменной средыARM_MSI_ENDPOINT.ПримечаниеРекомендуем вместо этого использовать переменную среды MSI_ENDPOINT.
-
subscription_id— (Необязательно) Идентификатор подписки, в которой находится учётная запись Storage. Значение также можно получить из переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (Необязательно) Идентификатор клиента, в котором находится подписка. Значение также можно получить из переменной средыARM_TENANT_ID. -
use_msi— (Необязательно) Следует ли использовать аутентификацию с помощью управляемого удостоверения службы? Значение также можно получить из переменной средыARM_USE_MSI.
При аутентификации с помощью удостоверения рабочей нагрузки AKS также поддерживаются следующие поля:
-
subscription_id— (Необязательно) Идентификатор подписки, в которой находится учётная запись Storage. Значение также можно получить из переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (Необязательно) Идентификатор клиента, в котором находится подписка. Значение также можно получить из переменной средыARM_TENANT_ID. -
use_aks_workload_identity— (Необязательно) Установите значение true, если хотите использовать удостоверение рабочей нагрузки AKS Azure для аутентификации в Azure. Это работает только в том случае, если для рабочей нагрузки Kubernetes настроено удостоверение рабочей нагрузки. Значение также можно получить из переменной средыARM_USE_AKS_WORKLOAD_IDENTITY.
При аутентификации с помощью субъекта-службы и OpenID Connect (OIDC) также поддерживаются следующие поля:
-
client_id— (Необязательно) Идентификатор клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_ID. -
client_id_file_path— (Необязательно) Путь к файлу, содержащему идентификатор клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_ID_FILE_PATH. -
subscription_id— (Необязательно) Идентификатор подписки, в которой находится учётная запись Storage. Значение также можно получить из переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (Необязательно) Идентификатор клиента, в котором находится подписка. Значение также можно получить из переменной средыARM_TENANT_ID. -
oidc_request_url— (Необязательно) URL-адрес поставщика OIDC, у которого запрашивается токен ID. Значение также можно получить из переменных средыARM_OIDC_REQUEST_URL,ACTIONS_ID_TOKEN_REQUEST_URLилиSYSTEM_OIDCREQUESTURI. -
oidc_request_token— (Необязательно) Токен носителя для запроса к поставщику OIDC. Значение также можно получить из переменных средыARM_OIDC_REQUEST_TOKEN,ACTIONS_ID_TOKEN_REQUEST_TOKENилиSYSTEM_ACCESSTOKEN. -
oidc_token— (Необязательно) Токен ID при аутентификации с помощью OpenID Connect (OIDC). Значение также можно получить из переменной средыARM_OIDC_TOKEN. -
oidc_token_file_path— (Необязательно) Путь к файлу, содержащему токен ID при аутентификации с помощью OpenID Connect (OIDC). Значение также можно получить из переменной средыARM_OIDC_TOKEN_FILE_PATHилиAZURE_FEDERATED_TOKEN_FILE. -
use_oidc— (Необязательно) Следует ли использовать аутентификацию OIDC? Значение также можно получить из переменной средыARM_USE_OIDC.
При аутентификации с помощью субъекта-службы и OpenID Connect (OIDC) в Azure DevOps / Azure Pipelines, помимо общих полей OIDC, также поддерживаются следующие поля:
-
ado_service_connection_id(Необязательно) Идентификатор подключения службы ADO, используемого для федерации удостоверений рабочей нагрузки. Обычно значение можно получить из переменных средыAZURESUBSCRIPTION_SERVICE_CONNECTION_ID,ARM_OIDC_AZURE_SERVICE_CONNECTION_IDилиARM_ADO_PIPELINE_SERVICE_CONNECTION_ID.
При аутентификации с помощью токена SAS, связанного с учётной записью Storage, также поддерживаются следующие поля:
-
sas_token— (Необязательно) Токен SAS, используемый для доступа к учётной записи Blob Storage. Значение также можно получить из переменной средыARM_SAS_TOKEN.
При аутентификации с помощью ключа доступа учётной записи Storage также поддерживаются следующие поля:
-
access_key— (Необязательно) Ключ доступа, используемый для доступа к учётной записи Blob Storage. Значение также можно получить из переменной средыARM_ACCESS_KEY.
При аутентификации с помощью Entra ID также поддерживаются следующие поля:
-
use_azuread_auth— (Необязательно) Следует ли использовать аутентификацию Entra ID для доступа к учётной записи Storage или контейнеру. Значение также можно получить из переменной средыARM_USE_AZUREAD.ПримечаниеПри использовании Entra ID для аутентификации в Storage необходимо также убедиться, что назначена роль
Storage Blob Data Contributor.
При аутентификации через командную строку также поддерживаются следующие поля:
-
use_cli— (Необязательно) Следует ли выполнять аутентификацию через CLI. Значение по умолчанию —true. Значение также можно получить из переменной средыARM_USE_CLI.
При аутентификации с помощью субъекта-службы и клиентского сертификата также поддерживаются следующие поля:
-
client_id— (Необязательно) Идентификатор клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_ID. -
client_id_file_path— (Необязательно) Путь к файлу, содержащему идентификатор клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_ID_FILE_PATH. -
client_certificate— (Необязательно) Сертификат PKCS#12 в кодировке Base64 (PFX, не PEM), используемый в качестве клиентского сертификата при аутентификации в качестве субъекта-службы. Указанная строка данных должна содержать и открытый сертификат, и его закрытый ключ. Значение также можно получить из переменной средыARM_CLIENT_CERTIFICATE. -
client_certificate_password— (Необязательно) Пароль клиентского сертификата, указанного вclient_certificateилиclient_certificate_path. Значение также можно получить из переменной средыARM_CLIENT_CERTIFICATE_PASSWORD. -
client_certificate_path— (Необязательно) Путь к файлу PKCS#12 PFX, используемому в качестве клиентского сертификата при аутентификации в качестве субъекта-службы. Файл должен содержать и открытый сертификат, и его закрытый ключ. Значение также можно получить из переменной средыARM_CLIENT_CERTIFICATE_PATH. -
subscription_id— (Необязательно) Идентификатор подписки, в которой находится учётная запись Storage. Значение также можно получить из переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (Необязательно) Идентификатор клиента, в котором находится подписка. Значение также можно получить из переменной средыARM_TENANT_ID.
При аутентификации с помощью субъекта-службы и секрета клиента также поддерживаются следующие поля:
-
client_id— (Необязательно) Идентификатор клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_ID. -
client_id_file_path— (Необязательно) Путь к файлу, содержащему идентификатор клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_ID_FILE_PATH. -
client_secret— (Необязательно) Секрет клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_SECRET. -
client_secret_file_path— (Необязательно) Путь к файлу, содержащему секрет клиента субъекта-службы. Значение также можно получить из переменной средыARM_CLIENT_SECRET_FILE_PATH. -
subscription_id— (Необязательно) Идентификатор подписки, в которой находится учётная запись Storage. Значение также можно получить из переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (Необязательно) Идентификатор клиента, в котором находится подписка. Значение также можно получить из переменной средыARM_TENANT_ID.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/settings/backends/azurerm/