Spec-Zone.ru › OpenTofu 1.12

Тип бэкенда: 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_key Blob невозможно восстановить в случае потери ключа.


При аутентификации с помощью управляемого удостоверения службы (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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API