Spec-Zone.ru › OpenTofu 1.11

Тип бэкенда: 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/

Spec-Zone.ru

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