Configurare Terraform in Azure Cloud Shell con Bash

Terraform consente di definire, visualizzare in anteprima e distribuire l'infrastruttura cloud. Con Terraform è possibile creare file di configurazione usando la sintassi HCL. La sintassi HCL consente di specificare il provider di servizi cloud, ad esempio Azure, e gli elementi che costituiscono l'infrastruttura cloud. Dopo aver creato i file di configurazione, è necessario creare un piano di esecuzione che consenta di visualizzare in anteprima le modifiche apportate all'infrastruttura prima che vengano distribuite. Dopo aver verificato le modifiche, è possibile applicare il piano di esecuzione per distribuire l'infrastruttura.

Questo articolo presenta le opzioni per l'autenticazione in Azure per l'uso con Terraform.

In questo articolo vengono illustrate le operazioni seguenti:

  • Configurare Cloud Shell
  • Visualizzare l'account Azure corrente
  • Informazioni sugli scenari comuni di autenticazione di Terraform e Azure
  • Eseguire l'autenticazione tramite un account Microsoft da Cloud Shell (usando Bash o PowerShell)
  • Eseguire l'autenticazione tramite un account Microsoft da Windows (usando Bash o PowerShell)
  • Creare un'entità servizio usando l'interfaccia della riga di comando di Azure
  • Creare un'entità servizio usando PowerShell
  • Specificare le credenziali dell'entità servizio nelle variabili di ambiente
  • Specificare le credenziali dell'entità servizio in un blocco del provider Terraform

1. Configurare l'ambiente

  • Sottoscrizione di Azure: Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

2. Aprire Cloud Shell

  1. Se si dispone già di una sessione Cloud Shell aperta, è possibile passare alla sezione successiva.

  2. Passare al portale di Azure

  3. Se necessario, accedere alla sottoscrizione di Azure e modificare la directory di Azure.

  4. Aprire Cloud Shell.

    Aprire Cloud Shell dal menu in alto nel portale di Azure.

  5. Se Cloud Shell non è stato usato in precedenza, configurare le impostazioni dell'ambiente e di archiviazione.

  6. Selezionare l'ambiente della riga di comando.

    Selezionare l'interfaccia della riga di comando da usare in Cloud Shell.

3. Installare la versione più recente di Terraform in Azure Cloud Shell

Cloud Shell aggiornamenti automatici alla versione più recente di Terraform. Tuttavia, gli aggiornamenti arrivano entro un paio di settimane di rilascio. Questo articolo illustra come scaricare e installare la versione corrente di Terraform.

  1. Determinare la versione di Terraform usata in Cloud Shell.

    terraform version
    
  2. Se la versione di Terraform installata in Cloud Shell non è la versione più recente, viene visualizzato un messaggio che indica che la versione di Terraform non è aggiornata.

  3. Se si usa la versione indicata, passare alla sezione successiva. In caso contrario, continuare con la procedura seguente.

  4. Passare alla pagina dei download di Terraform.

  5. Scorrere verso il basso fino ai collegamenti di download linux .

  6. Spostare il mouse sul collegamento a 64 bit . Questo collegamento è per la versione linux a 64 bit più recente, appropriata per Cloud Shell.

  7. Copiare l'URL.

  8. Eseguire curl, sostituendo il segnaposto con l'URL del passaggio precedente.

    curl -O <terraform_download_url>
    
  9. Decomprimere i file.

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Se la directory non esiste, creare una directory denominata bin.

    mkdir bin
    
  11. Spostare il terraform file nella bin directory.

    mv terraform bin/    
    
  12. Chiudere e riavviare Cloud Shell.

  13. Verificare che la versione scaricata di Terraform sia prima nel percorso.

    terraform version
    

4. Verificare la sottoscrizione di Azure predefinita

Quando si accede alla portale di Azure con un account Microsoft, viene usata la sottoscrizione di Azure predefinita per tale account.

Terraform esegue automaticamente l'autenticazione usando le informazioni dalla sottoscrizione di Azure predefinita.

Eseguire az account show per verificare l'account Microsoft corrente e la sottoscrizione di Azure.

az account show

Tutte le modifiche apportate tramite Terraform si trovano nella sottoscrizione di Azure visualizzata. Se si vuole, ignorare il resto di questo articolo.

5. Autenticare Terraform in Azure

Scenari di autenticazione di Terraform e Azure

Terraform supporta solo l'autenticazione in Azure tramite l'interfaccia della riga di comando di Azure. L'autenticazione tramite Azure PowerShell non è supportata. Pertanto, anche se è possibile usare il modulo Azure PowerShell durante l'esecuzione del lavoro di Terraform, è prima necessario eseguire l'autenticazione in Azure usando l'interfaccia della riga di comando di Azure.

Questo articolo illustra come autenticare Terraform in Azure per gli scenari seguenti. Per altre informazioni sulle opzioni per l'autenticazione di Terraform in Azure, vedere Autenticazione tramite l'interfaccia della riga di comando di Azure.

Eseguire l'autenticazione in Azure tramite un account Microsoft

Un account Microsoft è un nome utente (associato a un messaggio di posta elettronica e alle relative credenziali) usato per accedere ai servizi Microsoft, ad esempio Azure. Un account Microsoft può essere associato a una o più sottoscrizioni di Azure, con una delle sottoscrizioni predefinite.

La procedura seguente illustra come:

  • Accedere ad Azure in modo interattivo usando un account Microsoft
  • Elencare le sottoscrizioni di Azure associate dell'account (incluso il valore predefinito)
  • Impostare la sottoscrizione corrente.
  1. Aprire una riga di comando che ha accesso all'interfaccia della riga di comando di Azure.

  2. Eseguire az login senza parametri e seguire le istruzioni per accedere ad Azure.

    az login
    

    Punti principali:

    • Al termine dell'accesso, az login viene visualizzato un elenco delle sottoscrizioni di Azure associate all'account Microsoft connesso, inclusa la sottoscrizione predefinita.
  3. Per confermare la sottoscrizione di Azure corrente, eseguire az account show.

    az account show
    
  4. Per visualizzare tutti i nomi di sottoscrizione e gli ID di Azure per un account Microsoft specifico, eseguire az account list.

    az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
    

    Punti principali:

    • Sostituire il segnaposto con l'indirizzo <microsoft_account_email> di posta elettronica dell'account Microsoft le cui sottoscrizioni di Azure da elencare.
    • Con un account Live, ad esempio hotmail o Outlook, potrebbe essere necessario specificare l'indirizzo di posta elettronica completo. Ad esempio, se l'indirizzo di posta elettronica è admin@hotmail.com, potrebbe essere necessario sostituire il segnaposto con live.com#admin@hotmail.com.
  5. Per usare una sottoscrizione di Azure specifica, eseguire az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Punti principali:

    • Sostituire il segnaposto con l'ID o il <subscription_id_or_subscription_name> nome della sottoscrizione da usare.
    • La chiamata a az account set non visualizza i risultati del passaggio alla sottoscrizione di Azure specificata. È però possibile usare az account show per confermare che la sottoscrizione di Azure corrente è cambiata.
    • Se si esegue il az account list comando del passaggio precedente, si noterà che la sottoscrizione di Azure predefinita è stata modificata alla sottoscrizione specificata con az account set.

Creare un'entità servizio

Gli strumenti automatici che distribuiscono o usano servizi di Azure, come Terraform, devono sempre avere autorizzazioni limitate. Invece di consentire alle applicazioni l'accesso come utenti con privilegi completi, Azure offre le identità servizio.

Il modello più comune consiste nell'accedere in modo interattivo ad Azure, creare un'entità servizio, testare l'entità servizio e quindi usare tale entità servizio per l'autenticazione futura (interattivamente o dagli script).

  1. Per creare un'entità servizio, accedere ad Azure. Dopo l'autenticazione in Azure tramite un account Microsoft, tornare qui.

  2. Se si crea un'entità servizio da Git Bash, impostare la MSYS_NO_PATHCONV variabile di ambiente. Questo passaggio non è necessario se si usa Cloud Shell.

    export MSYS_NO_PATHCONV=1    
    

    Punti principali:

    • È possibile impostare la MSYS_NO_PATHCONV variabile di ambiente a livello globale (per tutte le sessioni del terminale) o in locale (solo per la sessione corrente). Poiché la creazione di un'entità servizio non è un'operazione eseguita spesso, l'esempio imposta il valore per la sessione corrente. Per impostare questa variabile di ambiente a livello globale, aggiungere l'impostazione al ~/.bashrc file.
  3. Per creare un'entità servizio, eseguire az ad sp create-for-rbac.

    az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
    

    Punti principali:

    • È possibile sostituire con <service-principal-name> un nome personalizzato per l'ambiente o omettere completamente il parametro. Se si omette il parametro , il nome dell'entità servizio viene generato in base alla data e all'ora correnti.
    • Al termine, az ad sp create-for-rbac visualizza diversi valori. I valori appId, password e tenant vengono usati nel passaggio successivo.
    • Se viene persa, questa password non può essere recuperata. Di conseguenza, è consigliabile archiviarla in un luogo sicuro. Se si dimentica la password, è possibile reimpostare le credenziali dell'entità servizio.
    • Per questo articolo viene usata un'entità servizio con un ruolo Collaboratore . Per altre informazioni sui ruoli di Role-Based Controllo di accesso (RBAC), vedere Controllo degli accessi in base al ruolo: Ruoli predefiniti.
    • L'output della creazione dell'entità servizio include credenziali sensibili. Assicurarsi di non includere queste credenziali nel codice o di controllare le credenziali nel controllo del codice sorgente.
    • Per altre informazioni sulle opzioni durante la creazione di un'entità servizio con l'interfaccia della riga di comando di Azure, vedere l'articolo Creare un'entità servizio di Azure con l'interfaccia della riga di comando di Azure.

Specificare le credenziali dell'entità servizio nelle variabili di ambiente

Dopo aver creato un'entità servizio, è possibile specificarne le credenziali per Terraform tramite le variabili di ambiente.

  1. Modificare il ~/.bashrc file aggiungendo le variabili di ambiente seguenti.

    export ARM_SUBSCRIPTION_ID="<azure_subscription_id>"
    export ARM_TENANT_ID="<azure_subscription_tenant_id>"
    export ARM_CLIENT_ID="<service_principal_appid>"
    export ARM_CLIENT_SECRET="<service_principal_password>"
    
  2. Per eseguire lo ~/.bashrc script, eseguire source ~/.bashrc (o il relativo equivalente . ~/.bashrcabbreviato). È anche possibile uscire e riaprire Cloud Shell affinché lo script venga eseguito automaticamente.

    . ~/.bashrc
    
  3. Dopo aver impostato le variabili di ambiente, è possibile verificare i relativi valori come indicato di seguito:

    printenv | grep ^ARM*
    

Punti principali:

  • Come per qualsiasi variabile di ambiente, per accedere a un valore di sottoscrizione di Azure dall'interno di uno script Terraform, usare la sintassi seguente: . ${env.<environment_variable>} Ad esempio, per accedere al ARM_SUBSCRIPTION_ID valore, specificare ${env.ARM_SUBSCRIPTION_ID}.
  • La creazione e l'applicazione di piani di esecuzione terraform apportano modifiche alla sottoscrizione di Azure associata all'entità servizio. Questo fatto può talvolta generare confusione se si è connessi a una sottoscrizione di Azure e le variabili di ambiente puntano a una seconda sottoscrizione di Azure. Esaminiamo l'esempio seguente per spiegare. Si supponga di avere due sottoscrizioni di Azure: SubA e SubB. Se la sottoscrizione di Azure corrente è SubA (determinata tramite az account show) mentre le variabili di ambiente puntano a SubB, le modifiche apportate da Terraform si trovano in SubB. È quindi necessario accedere alla sottoscrizione SubB per eseguire i comandi dell'interfaccia della riga di comando di Azure o Azure PowerShell comandi per visualizzare le modifiche.

Specificare le credenziali dell'entità servizio in un blocco del provider Terraform

Il blocco del provider di Azure definisce la sintassi che consente di specificare le informazioni di autenticazione della sottoscrizione di Azure.

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = "~>2.0"
    }
  }
}

provider "azurerm" {
  features {}

  subscription_id   = "<azure_subscription_id>"
  tenant_id         = "<azure_subscription_tenant_id>"
  client_id         = "<service_principal_appid>"
  client_secret     = "<service_principal_password>"
}

# Your code goes here

Attenzione

La possibilità di specificare le credenziali della sottoscrizione di Azure in un file di configurazione terraform può essere utile, soprattutto durante il test. Tuttavia, non è consigliabile archiviare le credenziali in un file di testo non crittografato che può essere visualizzato da utenti non attendibili.

Risolvere i problemi di Terraform in Azure

Risolvere i problemi comuni relativi all'uso di Terraform in Azure

Passaggi successivi