github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/website/docs/language/settings/backends/azurerm.mdx (about) 1 --- 2 page_title: 'Backend Type: azurerm' 3 description: Terraform can store state remotely in Azure Blob Storage. 4 --- 5 6 # azurerm 7 8 Stores the state as a Blob with the given Key within the Blob Container within [the Blob Storage Account](https://docs.microsoft.com/en-us/azure/storage/common/storage-introduction). 9 10 This backend supports state locking and consistency checking with Azure Blob Storage native capabilities. 11 12 ~> **Terraform 1.1 and 1.2 supported a feature-flag to allow enabling/disabling the use of Microsoft Graph (and MSAL) rather than Azure Active Directory Graph (and ADAL) - however this flag has since been removed in Terraform 1.3. Microsoft Graph (and MSAL) are now enabled by default and Azure Active Directory Graph (and ADAL) can no longer be used. 13 14 ## Example Configuration 15 16 When authenticating using the Azure CLI or a Service Principal (either with a Client Certificate or a Client Secret): 17 18 ```hcl 19 terraform { 20 backend "azurerm" { 21 resource_group_name = "StorageAccount-ResourceGroup" 22 storage_account_name = "abcd1234" 23 container_name = "tfstate" 24 key = "prod.terraform.tfstate" 25 } 26 } 27 ``` 28 29 *** 30 31 When authenticating using Managed Service Identity (MSI): 32 33 ```hcl 34 terraform { 35 backend "azurerm" { 36 resource_group_name = "StorageAccount-ResourceGroup" 37 storage_account_name = "abcd1234" 38 container_name = "tfstate" 39 key = "prod.terraform.tfstate" 40 use_msi = true 41 subscription_id = "00000000-0000-0000-0000-000000000000" 42 tenant_id = "00000000-0000-0000-0000-000000000000" 43 } 44 } 45 ``` 46 47 *** 48 49 When authenticating using OpenID Connect (OIDC): 50 51 ```hcl 52 terraform { 53 backend "azurerm" { 54 resource_group_name = "StorageAccount-ResourceGroup" 55 storage_account_name = "abcd1234" 56 container_name = "tfstate" 57 key = "prod.terraform.tfstate" 58 use_oidc = true 59 subscription_id = "00000000-0000-0000-0000-000000000000" 60 tenant_id = "00000000-0000-0000-0000-000000000000" 61 } 62 } 63 ``` 64 65 *** 66 67 When authenticating using Azure AD Authentication: 68 69 ```hcl 70 terraform { 71 backend "azurerm" { 72 storage_account_name = "abcd1234" 73 container_name = "tfstate" 74 key = "prod.terraform.tfstate" 75 use_azuread_auth = true 76 subscription_id = "00000000-0000-0000-0000-000000000000" 77 tenant_id = "00000000-0000-0000-0000-000000000000" 78 } 79 } 80 ``` 81 82 -> **Note:** When using AzureAD for Authentication to Storage you also need to ensure the `Storage Blob Data Owner` role is assigned. 83 84 *** 85 86 When authenticating using the Access Key associated with the Storage Account: 87 88 ```hcl 89 terraform { 90 backend "azurerm" { 91 storage_account_name = "abcd1234" 92 container_name = "tfstate" 93 key = "prod.terraform.tfstate" 94 95 # rather than defining this inline, the Access Key can also be sourced 96 # from an Environment Variable - more information is available below. 97 access_key = "abcdefghijklmnopqrstuvwxyz0123456789..." 98 } 99 } 100 ``` 101 102 *** 103 104 When authenticating using a SAS Token associated with the Storage Account: 105 106 ```hcl 107 terraform { 108 backend "azurerm" { 109 storage_account_name = "abcd1234" 110 container_name = "tfstate" 111 key = "prod.terraform.tfstate" 112 113 # rather than defining this inline, the SAS Token can also be sourced 114 # from an Environment Variable - more information is available below. 115 sas_token = "abcdefghijklmnopqrstuvwxyz0123456789..." 116 } 117 } 118 ``` 119 120 -> **NOTE:** When using a Service Principal or an Access Key - we recommend using a [Partial Configuration](/terraform/language/settings/backends/configuration#partial-configuration) for the credentials. 121 122 ## Data Source Configuration 123 124 When authenticating using a Service Principal (either with a Client Certificate or a Client Secret): 125 126 ```hcl 127 data "terraform_remote_state" "foo" { 128 backend = "azurerm" 129 config = { 130 storage_account_name = "terraform123abc" 131 container_name = "terraform-state" 132 key = "prod.terraform.tfstate" 133 } 134 } 135 ``` 136 137 *** 138 139 When authenticating using Managed Service Identity (MSI): 140 141 ```hcl 142 data "terraform_remote_state" "foo" { 143 backend = "azurerm" 144 config = { 145 resource_group_name = "StorageAccount-ResourceGroup" 146 storage_account_name = "terraform123abc" 147 container_name = "terraform-state" 148 key = "prod.terraform.tfstate" 149 use_msi = true 150 subscription_id = "00000000-0000-0000-0000-000000000000" 151 tenant_id = "00000000-0000-0000-0000-000000000000" 152 } 153 } 154 ``` 155 156 *** 157 158 When authenticating using OpenID Connect (OIDC): 159 160 ```hcl 161 data "terraform_remote_state" "foo" { 162 backend = "azurerm" 163 config = { 164 resource_group_name = "StorageAccount-ResourceGroup" 165 storage_account_name = "terraform123abc" 166 container_name = "terraform-state" 167 key = "prod.terraform.tfstate" 168 use_oidc = true 169 subscription_id = "00000000-0000-0000-0000-000000000000" 170 tenant_id = "00000000-0000-0000-0000-000000000000" 171 } 172 } 173 ``` 174 175 *** 176 177 When authenticating using AzureAD Authentication: 178 179 ```hcl 180 data "terraform_remote_state" "foo" { 181 backend = "azurerm" 182 config = { 183 storage_account_name = "terraform123abc" 184 container_name = "terraform-state" 185 key = "prod.terraform.tfstate" 186 use_azuread_auth = true 187 subscription_id = "00000000-0000-0000-0000-000000000000" 188 tenant_id = "00000000-0000-0000-0000-000000000000" 189 } 190 } 191 ``` 192 193 -> **Note:** When using AzureAD for Authentication to Storage you also need to ensure the `Storage Blob Data Owner` role is assigned. 194 195 *** 196 197 When authenticating using the Access Key associated with the Storage Account: 198 199 ```hcl 200 data "terraform_remote_state" "foo" { 201 backend = "azurerm" 202 config = { 203 storage_account_name = "terraform123abc" 204 container_name = "terraform-state" 205 key = "prod.terraform.tfstate" 206 207 # rather than defining this inline, the Access Key can also be sourced 208 # from an Environment Variable - more information is available below. 209 access_key = "abcdefghijklmnopqrstuvwxyz0123456789..." 210 } 211 } 212 ``` 213 214 *** 215 216 When authenticating using a SAS Token associated with the Storage Account: 217 218 ```hcl 219 data "terraform_remote_state" "foo" { 220 backend = "azurerm" 221 config = { 222 storage_account_name = "terraform123abc" 223 container_name = "terraform-state" 224 key = "prod.terraform.tfstate" 225 226 # rather than defining this inline, the SAS Token can also be sourced 227 # from an Environment Variable - more information is available below. 228 sas_token = "abcdefghijklmnopqrstuvwxyz0123456789..." 229 } 230 } 231 ``` 232 233 ## Configuration Variables 234 235 !> **Warning:** We recommend using environment variables to supply credentials and other sensitive data. If you use `-backend-config` or hardcode these values directly in your configuration, Terraform will include these values in both the `.terraform` subdirectory and in plan files. Refer to [Credentials and Sensitive Data](/terraform/language/settings/backends/configuration#credentials-and-sensitive-data) for details. 236 237 238 The following configuration options are supported: 239 240 * `storage_account_name` - (Required) The Name of [the Storage Account](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account). 241 242 * `container_name` - (Required) The Name of [the Storage Container](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_container) within the Storage Account. 243 244 * `key` - (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. 245 246 * `environment` - (Optional) The Azure Environment which should be used. This can also be sourced from the `ARM_ENVIRONMENT` environment variable. Possible values are `public`, `china`, `german`, `stack` and `usgovernment`. Defaults to `public`. 247 248 * `endpoint` - (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the `ARM_ENDPOINT` environment variable. 249 250 ~> **NOTE:** An `endpoint` should only be configured when using Azure Stack. 251 252 * `metadata_host` - (Optional) The Hostname of the Azure Metadata Service (for example `management.azure.com`), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the `ARM_METADATA_HOSTNAME` Environment Variable. 253 254 * `snapshot` - (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? Defaults to `false`. This value can also be sourced from the `ARM_SNAPSHOT` environment variable. 255 256 *** 257 258 When authenticating using the Managed Service Identity (MSI) - the following fields are also supported: 259 260 * `resource_group_name` - (Required) The Name of the Resource Group in which the Storage Account exists. 261 262 * `msi_endpoint` - (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. This can also be sourced from the `ARM_MSI_ENDPOINT` environment variable. 263 264 * `subscription_id` - (Optional) The Subscription ID in which the Storage Account exists. This can also be sourced from the `ARM_SUBSCRIPTION_ID` environment variable. 265 266 * `tenant_id` - (Optional) The Tenant ID in which the Subscription exists. This can also be sourced from the `ARM_TENANT_ID` environment variable. 267 268 * `use_msi` - (Optional) Should Managed Service Identity authentication be used? This can also be sourced from the `ARM_USE_MSI` environment variable. 269 270 *** 271 272 When authenticating using a Service Principal with OpenID Connect (OIDC) - the following fields are also supported: 273 274 * `oidc_request_url` - (Optional) The URL for the OIDC provider from which to request an ID token. This can also be sourced from the `ARM_OIDC_REQUEST_URL` or `ACTIONS_ID_TOKEN_REQUEST_URL` environment variables. 275 276 * `oidc_request_token` - (Optional) The bearer token for the request to the OIDC provider. This can also be sourced from the `ARM_OIDC_REQUEST_TOKEN` or `ACTIONS_ID_TOKEN_REQUEST_TOKEN` environment variables. 277 278 * `oidc_token` - (Optional) The ID token when authenticating using OpenID Connect (OIDC). This can also be sourced from the `ARM_OIDC_TOKEN` environment variable. 279 280 * `oidc_token_file_path` - (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). This can also be sourced from the `ARM_OIDC_TOKEN_FILE_PATH` environment variable. 281 282 * `use_oidc` - (Optional) Should OIDC authentication be used? This can also be sourced from the `ARM_USE_OIDC` environment variable. 283 284 *** 285 286 When authenticating using a SAS Token associated with the Storage Account - the following fields are also supported: 287 288 * `sas_token` - (Optional) The SAS Token used to access the Blob Storage Account. This can also be sourced from the `ARM_SAS_TOKEN` environment variable. 289 290 *** 291 292 When authenticating using the Storage Account's Access Key - the following fields are also supported: 293 294 * `access_key` - (Optional) The Access Key used to access the Blob Storage Account. This can also be sourced from the `ARM_ACCESS_KEY` environment variable. 295 296 *** 297 298 When authenticating using AzureAD Authentication - the following fields are also supported: 299 300 * `use_azuread_auth` - (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. This can also be sourced from the `ARM_USE_AZUREAD` environment variable. 301 302 -> **Note:** When using AzureAD for Authentication to Storage you also need to ensure the `Storage Blob Data Owner` role is assigned. 303 304 *** 305 306 When authenticating using a Service Principal with a Client Certificate - the following fields are also supported: 307 308 * `resource_group_name` - (Required) The Name of the Resource Group in which the Storage Account exists. 309 310 * `client_id` - (Optional) The Client ID of the Service Principal. This can also be sourced from the `ARM_CLIENT_ID` environment variable. 311 312 * `client_certificate_password` - (Optional) The password associated with the Client Certificate specified in `client_certificate_path`. This can also be sourced from the `ARM_CLIENT_CERTIFICATE_PASSWORD` environment variable. 313 314 * `client_certificate_path` - (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. This can also be sourced from the `ARM_CLIENT_CERTIFICATE_PATH` environment variable. 315 316 * `subscription_id` - (Optional) The Subscription ID in which the Storage Account exists. This can also be sourced from the `ARM_SUBSCRIPTION_ID` environment variable. 317 318 * `tenant_id` - (Optional) The Tenant ID in which the Subscription exists. This can also be sourced from the `ARM_TENANT_ID` environment variable. 319 320 *** 321 322 When authenticating using a Service Principal with a Client Secret - the following fields are also supported: 323 324 * `resource_group_name` - (Required) The Name of the Resource Group in which the Storage Account exists. 325 326 * `client_id` - (Optional) The Client ID of the Service Principal. This can also be sourced from the `ARM_CLIENT_ID` environment variable. 327 328 * `client_secret` - (Optional) The Client Secret of the Service Principal. This can also be sourced from the `ARM_CLIENT_SECRET` environment variable. 329 330 * `subscription_id` - (Optional) The Subscription ID in which the Storage Account exists. This can also be sourced from the `ARM_SUBSCRIPTION_ID` environment variable. 331 332 * `tenant_id` - (Optional) The Tenant ID in which the Subscription exists. This can also be sourced from the `ARM_TENANT_ID` environment variable.