Тип бэкенда: azurerm
Хранит состояние в виде Blob с указанным ключом в контейнере Blob в учётной записи хранилища Blob.
Этот бэкенд поддерживает блокировку состояния и проверку согласованности с помощью встроенных возможностей Azure Blob Storage.
Примеры конфигураций
Ключ доступа
В этом примере для аутентификации используется ключ доступа, связанный с учётной записью хранилища:
terraform {
backend "azurerm" {
storage_account_name = "abcd1234"
container_name = "tfstate"
key = "prod.terraform.tfstate"
access_key = "abcdefghijklmnopqrstuvwxyz0123456789..."
}
}Рекомендуем использовать переменную среды ARM_ACCESS_KEY вместо хранения конфиденциальной информации в исходном коде.
Подпись общего доступа
В этом примере для аутентификации используется токен SAS — набор параметров запроса, подписанных ключом доступа, связанным с учётной записью хранилища:
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)
Первые два способа аутентификации относятся к конкретной учётной записи хранилища и не связаны с субъектом-службой. Все остальные способы аутентификации можно настроить для использования аутентификации Entra ID вместо аутентификации на основе учётной записи хранилища с помощью следующего параметра:
... use_azuread_auth = true ...
При использовании Entra ID можно проходить аутентификацию непосредственно в учётной записи хранилища или контейнере хранилища с помощью субъекта-службы, которому требуется только роль Storage Blob Data Contributor. Если этот параметр не указан, OpenTofu выполнит аутентификацию и попытается получить ключ доступа к учётной записи хранилища.
Роль Owner не предоставляет автоматически доступ к контейнеру хранилища через Entra ID; необходимо явно назначить роль для учётной записи хранилища, например Storage Blob Data Contributor. Однако роль Owner позволяет субъекту получить ключ доступа к учётной записи хранилища.
Если параметр 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 или другому вычислительному ресурсу.
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— (обязательно) имя учётной записи хранилища. -
container_name— (обязательно) имя контейнера хранилища в учётной записи хранилища. -
key— (обязательно) имя Blob, используемого для получения и хранения файла состояния OpenTofu в контейнере хранилища. -
resource_group_name— (обязательно, если не используется аутентификация Entra ID) имя группы ресурсов, в которой находится учётная запись хранилища. -
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.
При аутентификации с использованием управляемого удостоверения службы (MSI) также поддерживаются следующие поля:
-
msi_endpoint— (устарел в версии 1.1x.xx) путь к пользовательской конечной точке управляемого удостоверения службы, которая определяется автоматически, если не указана. Это значение также можно задать с помощью переменной средыARM_MSI_ENDPOINT.ПримечаниеРекомендуем вместо этого использовать переменную среды MSI_ENDPOINT.
-
subscription_id— (необязательно) идентификатор подписки, в которой находится учётная запись хранилища. Это значение также можно задать с помощью переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (необязательно) идентификатор клиента, в котором находится подписка. Это значение также можно задать с помощью переменной средыARM_TENANT_ID. -
use_msi— (необязательно) следует ли использовать аутентификацию с помощью управляемого удостоверения службы. Это значение также можно задать с помощью переменной средыARM_USE_MSI.
При аутентификации с использованием идентификатора рабочей нагрузки AKS также поддерживаются следующие поля:
-
subscription_id— (необязательно) идентификатор подписки, в которой находится учётная запись хранилища. Это значение также можно задать с помощью переменной среды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— (необязательно) идентификатор подписки, в которой находится учётная запись хранилища. Это значение также можно задать с помощью переменной средыARM_SUBSCRIPTION_ID. -
tenant_id— (необязательно) идентификатор клиента, в котором находится подписка. Это значение также можно задать с помощью переменной средыARM_TENANT_ID. -
oidc_request_url— (необязательно) URL-адрес поставщика OIDC, у которого запрашивается токен ID. Это значение также можно задать с помощью переменной средыARM_OIDC_REQUEST_URLилиACTIONS_ID_TOKEN_REQUEST_URL. -
oidc_request_token— (необязательно) токен bearer для запроса к поставщику OIDC. Это значение также можно задать с помощью переменной средыARM_OIDC_REQUEST_TOKENилиACTIONS_ID_TOKEN_REQUEST_TOKEN. -
oidc_token— (необязательно) токен ID для аутентификации с использованием OpenID Connect (OIDC). Это значение также можно задать с помощью переменной средыARM_OIDC_TOKEN. -
oidc_token_file_path— (необязательно) путь к файлу, содержащему токен ID для аутентификации с использованием OpenID Connect (OIDC). Это значение также можно задать с помощью переменной средыARM_OIDC_TOKEN_FILE_PATH. -
use_oidc— (необязательно) следует ли использовать аутентификацию OIDC. Это значение также можно задать с помощью переменной средыARM_USE_OIDC.
При аутентификации с использованием токена SAS, связанного с учётной записью хранилища, также поддерживаются следующие поля:
-
sas_token— (необязательно) токен SAS для доступа к учётной записи хранилища Blob. Это значение также можно задать с помощью переменной средыARM_SAS_TOKEN.
При аутентификации с использованием ключа доступа учётной записи хранилища также поддерживаются следующие поля:
-
access_key— (необязательно) ключ доступа к учётной записи хранилища Blob. Это значение также можно задать с помощью переменной средыARM_ACCESS_KEY.
При аутентификации с использованием Entra ID также поддерживаются следующие поля:
-
use_azuread_auth— (необязательно) следует ли использовать аутентификацию Entra ID для доступа к учётной записи хранилища или контейнеру. Это значение также можно задать с помощью переменной средыARM_USE_AZUREAD.ПримечаниеПри использовании Entra ID для аутентификации в службе хранилища необходимо также убедиться, что назначена роль
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— (необязательно) идентификатор подписки, в которой находится учётная запись хранилища. Это значение также можно задать с помощью переменной среды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— (необязательно) идентификатор подписки, в которой находится учётная запись хранилища. Это значение также можно задать с помощью переменной среды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.11/language/settings/backends/azurerm/