簡體   English   中英

如何使用服務托管身份在 Azure 中使用 Terraform 供應資源

[英]How to Use Service Managed identity to provision resource in Azure using Terraform

我遇到了與托管身份相關的錯誤。 我想在 Azure 中使用 Terraform 配置虛擬機。 這是我的代碼塊:

terraform {
  # Use a recent version of Terraform
  required_version = ">= 0.13"

  # Map providers to thier sources, required in Terraform 13+
  required_providers {

    # Azure Resource Manager 2.x
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 2.0"
    }
  }
}

provider "azurerm" {
  
  features {}
  use_msi = true
  //  subscription_id = "XXXXXXXXX-4663-4c2e-XXXX-XXXXXXXXX"
  // tenant_id       = "XXXXXXXXX-232r-3w2e-XXXX-XXXXXXXXX"
}

我已經嘗試過啟用use_msi = true以及稍后使用 tenant_id 和 subscription_id

它提示我以下錯誤:

Unable to list provider registration status, it is possible that this is due to invalid credentials or the service principal does not have permission to use the Resource Manager API, Azure error: azure.BearerAuthorizer#WithAuthorization: Failed to refresh the Token for request to https ://management.azure.com/subscriptions//providers?api-version=2016-02-01 :StatusCode=0——原始錯誤:MSI 端點不可用。 對 MSI 端點的 HTTP 請求失敗:獲取“http://177.xxx.232.324/metadata/identity/oauth2/token?api-version=2018-02-01”:撥打 ZE20BB202B1D5537B1415E3263A37ED7824:87 連接。嘗試對無法訪問的網絡進行套接字操作。

注意我已經設置了訂閱

az account set --subscription="XXXXXXXXXXXXXXXXXX"

但是沒有成功。

我應該在我的代碼庫中保留什么或正確的方法是什么?

問題是您僅在設置use_msi = true時告訴 Terraform 使用托管標識。 我們需要在 Azure 環境中的托管標識支持 Azure 服務上運行 terraform 工作區。 MSI 在本地環境中不起作用,因為我們無法為其啟用身份。

正如該文件所述:

We recommend using a service principal or a managed identity when running Terraform non-interactively (such as when running Terraform in a CI/CD pipeline), and authenticating using the Azure CLI when running Terraform locally.

例如,假設您有一個啟用了系統分配標識的 Azure VM。

在此處輸入圖像描述

分配對此身份的權限。

在此處輸入圖像描述

將 Terraform 配置為使用托管標識。 請注意,將use_msi設置為true會告訴 Terraform 使用托管標識。 然后,您可以使用此 MSI 對 Azure 進行身份驗證,以創建其他 Azure 資源。

RDP 到 Azure VM 並運行 Terraform 命令。 以下示例代碼使用系統分配的標識在我當前的訂閱中創建一個資源組。

provider "azurerm" {
  
  subscription_id = var.subscription_id
  # client_id       = var.client_id
  # client_secret   = var.client_secret
  tenant_id       = var.tenant_id

  # skip_provider_registration = true

 features {}

 use_msi = true

}

terraform {
  required_providers {
    azurerm = {
    source = "hashicorp/azurerm"
    # version = "=2.46.0"
    }

  }
}

data "azurerm_subscription" "current" {}

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West US"
}


output "current_subscription_display_name" {
  value = data.azurerm_subscription.current.display_name
}

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM