Konfigurowanie programu Terraform w usłudze Azure Cloud Shell przy użyciu powłoki Bash

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury w chmurze. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania , który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian zastosujesz plan wykonania w celu wdrożenia infrastruktury.

W tym artykule przedstawiono opcje uwierzytelniania na platformie Azure do użycia z programem Terraform.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Konfigurowanie Cloud Shell
  • Wyświetlanie bieżącego konta platformy Azure
  • Omówienie typowych scenariuszy uwierzytelniania programu Terraform i platformy Azure
  • Uwierzytelnianie za pomocą konta Microsoft z Cloud Shell (przy użyciu powłoki Bash lub programu PowerShell)
  • Uwierzytelnianie za pośrednictwem konta Microsoft z systemu Windows (przy użyciu powłoki Bash lub programu PowerShell)
  • Tworzenie jednostki usługi przy użyciu interfejsu wiersza polecenia platformy Azure
  • Tworzenie jednostki usługi przy użyciu programu Azure PowerShell
  • Określanie poświadczeń jednostki usługi w zmiennych środowiskowych
  • Określanie poświadczeń jednostki usługi w bloku dostawcy programu Terraform

1. Konfigurowanie środowiska

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

2. Otwórz Cloud Shell

  1. Jeśli masz już otwartą sesję Cloud Shell, możesz przejść do następnej sekcji.

  2. Przejdź do witryny Azure Portal

  3. W razie potrzeby zaloguj się do subskrypcji platformy Azure i zmień katalog platformy Azure.

  4. Otwórz usługę Cloud Shell.

    Otwórz Cloud Shell z górnego menu w Azure Portal.

  5. Jeśli wcześniej nie użyto Cloud Shell, skonfiguruj ustawienia środowiska i magazynu.

  6. Wybierz środowisko wiersza polecenia.

    Wybierz interfejs wiersza polecenia, którego chcesz użyć w Cloud Shell.

3. Zainstaluj najnowszą wersję programu Terraform na platformie Azure Cloud Shell

Cloud Shell automatycznie aktualizuje najnowszą wersję programu Terraform. Jednak aktualizacje są dostępne w ciągu kilku tygodni od wydania. W tym artykule pokazano, jak pobrać i zainstalować bieżącą wersję programu Terraform.

  1. Określ wersję programu Terraform używaną w Cloud Shell.

    terraform version
    
  2. Jeśli wersja programu Terraform zainstalowana w Cloud Shell nie jest najnowszą wersją, zostanie wyświetlony komunikat informujący, że wersja programu Terraform jest nieaktualna.

  3. Jeśli dobrze pracujesz z wskazaną wersją, przejdź do następnej sekcji. W przeciwnym razie wykonaj następujące kroki.

  4. Przejdź do strony pobierania narzędzia Terraform.

  5. Przewiń w dół do linków pobierania systemu Linux .

  6. Przenieś mysz nad łączem 64-bitowym . Ten link jest przeznaczony dla najnowszej 64-bitowej wersji amd z systemem Linux, która jest odpowiednia dla Cloud Shell.

  7. Skopiuj adres URL.

  8. Uruchom curlpolecenie , zastępując symbol zastępczy adresem URL z poprzedniego kroku.

    curl -O <terraform_download_url>
    
  9. Rozpakuj plik.

    unzip <zip_file_downloaded_in_previous_step>
    
  10. Jeśli katalog nie istnieje, utwórz katalog o nazwie bin.

    mkdir bin
    
  11. terraform Przenieś plik do bin katalogu.

    mv terraform bin/    
    
  12. Zamknij i uruchom ponownie Cloud Shell.

  13. Sprawdź, czy pobrana wersja programu Terraform jest najpierw w ścieżce.

    terraform version
    

4. Sprawdź domyślną subskrypcję platformy Azure

Po zalogowaniu się do Azure Portal przy użyciu konta Microsoft zostanie użyta domyślna subskrypcja platformy Azure dla tego konta.

Narzędzie Terraform automatycznie uwierzytelnia się przy użyciu informacji z domyślnej subskrypcji platformy Azure.

Uruchom polecenie az account show , aby zweryfikować bieżące konto Microsoft i subskrypcję platformy Azure.

az account show

Wszelkie zmiany wprowadzone za pośrednictwem narzędzia Terraform będą sprzeczne z wyświetloną subskrypcją platformy Azure. Jeśli chcesz, pomiń resztę tego artykułu.

5. Uwierzytelnianie narzędzia Terraform na platformie Azure

Scenariusze uwierzytelniania programu Terraform i platformy Azure

Narzędzie Terraform obsługuje tylko uwierzytelnianie na platformie Azure za pośrednictwem interfejsu wiersza polecenia platformy Azure. Uwierzytelnianie przy użyciu Azure PowerShell nie jest obsługiwane. W związku z tym, chociaż możesz użyć modułu Azure PowerShell podczas wykonywania pracy programu Terraform, najpierw musisz uwierzytelnić się na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

W tym artykule opisano sposób uwierzytelniania narzędzia Terraform na platformie Azure w następujących scenariuszach. Aby uzyskać więcej informacji na temat opcji uwierzytelniania programu Terraform na platformie Azure, zobacz Uwierzytelnianie przy użyciu interfejsu wiersza polecenia platformy Azure.

Uwierzytelnianie na platformie Azure za pośrednictwem konta Microsoft

Konto Microsoft to nazwa użytkownika (skojarzona z adresem e-mail i jego poświadczeniami), która służy do logowania się do usług firmy Microsoft , takich jak platforma Azure. Konto Microsoft może być skojarzone z co najmniej jedną subskrypcją platformy Azure, a jedna z tych subskrypcji jest domyślna.

W poniższych krokach pokazano, jak interaktywnie zalogować się do platformy Azure przy użyciu konta Microsoft, wyświetlić listę skojarzonych subskrypcji platformy Azure (w tym domyślnej) i ustawić bieżącą subskrypcję.

  1. Otwórz wiersz polecenia, który ma dostęp do interfejsu wiersza polecenia platformy Azure.

  2. Uruchom polecenie az login bez żadnych parametrów i postępuj zgodnie z instrukcjami, aby zalogować się do platformy Azure.

    az login
    

    Kluczowe punkty:

    • Po pomyślnym zalogowaniu az login zostanie wyświetlona lista subskrypcji platformy Azure skojarzonych z zalogowanym kontem Microsoft, w tym domyślną subskrypcją.
  3. Aby potwierdzić bieżącą subskrypcję platformy Azure, uruchom polecenie az account show.

    az account show
    
  4. Aby wyświetlić wszystkie nazwy subskrypcji platformy Azure i identyfikatory dla określonego konta Microsoft, uruchom polecenie az account list.

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

    Kluczowe punkty:

    • Zastąp <microsoft_account_email> symbol zastępczy adresem e-mail konta Microsoft, którego subskrypcje platformy Azure chcesz wyświetlić na liście.
    • Za pomocą konta na żywo — takiego jak Hotmail lub Outlook — może być konieczne określenie w pełni kwalifikowanego adresu e-mail. Jeśli na przykład adres e-mail to admin@hotmail.com, może być konieczne zastąpienie symbolu zastępczego symbolem live.com#admin@hotmail.com.
  5. Aby użyć określonej subskrypcji platformy Azure, uruchom polecenie az account set.

    az account set --subscription "<subscription_id_or_subscription_name>"
    

    Kluczowe punkty:

    • <subscription_id_or_subscription_name> Zastąp symbol zastępczy identyfikatorem lub nazwą subskrypcji, której chcesz użyć.
    • Wywołanie az account set nie wyświetla wyników przełączania do określonej subskrypcji platformy Azure. Można jednak użyć az account show polecenia , aby potwierdzić, że bieżąca subskrypcja platformy Azure uległa zmianie.
    • Jeśli uruchomisz az account list polecenie z poprzedniego kroku, zobaczysz, że domyślna subskrypcja platformy Azure została zmieniona na subskrypcję określoną za pomocą polecenia az account set.

Tworzenie nazwy głównej usługi

Zautomatyzowane narzędzia, które wdrażają lub korzystają z usług platformy Azure, takich jak Terraform, powinny zawsze mieć ograniczone uprawnienia. Zamiast wymagać, aby aplikacje logowały się jako użytkownik z pełnymi uprawnieniami, platforma Azure oferuje jednostki usługi.

Najczęstszym wzorcem jest interakcyjne logowanie się do platformy Azure, tworzenie jednostki usługi, testowanie jednostki usługi, a następnie używanie tej jednostki usługi do przyszłego uwierzytelniania (interaktywnie lub ze skryptów).

  1. Aby utworzyć jednostkę usługi, zaloguj się na platformie Azure. Po uwierzytelnieniu na platformie Azure za pośrednictwem konta Microsoft wróć tutaj.

  2. Jeśli tworzysz jednostkę usługi na podstawie powłoki Git Bash, ustaw zmienną środowiskową MSYS_NO_PATHCONV . (Ten krok nie jest konieczny, jeśli używasz Cloud Shell).

    export MSYS_NO_PATHCONV=1    
    

    Kluczowe punkty:

    • Zmienną MSYS_NO_PATHCONV środowiskową można ustawić globalnie (dla wszystkich sesji terminalu) lub lokalnie (tylko dla bieżącej sesji). Ponieważ tworzenie jednostki usługi nie jest często czymś, co robisz, przykład ustawia wartość bieżącej sesji. Aby ustawić tę zmienną środowiskową globalnie, dodaj ustawienie do ~/.bashrc pliku.
  3. Aby utworzyć jednostkę usługi, uruchom polecenie az ad sp create-for-rbac.

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

    Kluczowe punkty:

    • Możesz zastąpić <service-principal-name> ciąg nazwą niestandardową środowiska lub całkowicie pominąć parametr. Jeśli pominięto parametr, nazwa główna usługi jest generowana na podstawie bieżącej daty i godziny.
    • Po pomyślnym zakończeniu az ad sp create-for-rbac zostanie wyświetlonych kilka wartości. Wartości appId, passwordi tenant są używane w następnym kroku.
    • Nie można pobrać hasła w przypadku utraty. W związku z tym należy przechowywać hasło w bezpiecznym miejscu. Jeśli zapomnisz hasło, możesz zresetować poświadczenia jednostki usługi.
    • W tym artykule jest używana jednostka usługi z rolą Współautor . Aby uzyskać więcej informacji na temat ról Role-Based Access Control (RBAC), zobacz RBAC: role wbudowane.
    • Dane wyjściowe z tworzenia jednostki usługi obejmują poufne poświadczenia. Upewnij się, że nie uwzględnisz tych poświadczeń w kodzie lub sprawdź poświadczenia w kontroli źródła.
    • Aby uzyskać więcej informacji na temat opcji tworzenia jednostki usługi za pomocą interfejsu wiersza polecenia platformy Azure, zobacz artykuł Tworzenie jednostki usługi platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Określanie poświadczeń jednostki usługi w zmiennych środowiskowych

Po utworzeniu jednostki usługi można określić jego poświadczenia do narzędzia Terraform za pomocą zmiennych środowiskowych.

  1. Edytuj plik, ~/.bashrc dodając następujące zmienne środowiskowe.

    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. Aby wykonać ~/.bashrc skrypt, uruchom polecenie source ~/.bashrc (lub jego skrócony odpowiednik . ~/.bashrc). Możesz również zamknąć i ponownie otworzyć Cloud Shell, aby skrypt był uruchamiany automatycznie.

    . ~/.bashrc
    
  3. Po ustawieniu zmiennych środowiskowych można zweryfikować ich wartości w następujący sposób:

    printenv | grep ^ARM*
    

Kluczowe punkty:

  • Podobnie jak w przypadku dowolnej zmiennej środowiskowej, aby uzyskać dostęp do wartości subskrypcji platformy Azure z poziomu skryptu programu Terraform, użyj następującej składni: ${env.<environment_variable>}. Aby na przykład uzyskać dostęp do ARM_SUBSCRIPTION_ID wartości, określ ${env.ARM_SUBSCRIPTION_ID}wartość .
  • Tworzenie i stosowanie planów wykonywania narzędzia Terraform wprowadza zmiany w subskrypcji platformy Azure skojarzonej z jednostką usługi. Ten fakt może czasami być mylący, jeśli logujesz się do jednej subskrypcji platformy Azure, a zmienne środowiskowe wskazują drugą subskrypcję platformy Azure. Przyjrzyjmy się poniższemu przykładowi, aby wyjaśnić. Załóżmy, że masz dwie subskrypcje platformy Azure: SubA i SubB. Jeśli bieżąca subskrypcja platformy Azure to SubA (określona za pośrednictwem az account show) podczas gdy zmienne środowiskowe wskazują subB, wszelkie zmiany wprowadzone przez narzędzie Terraform są w podbieci. W związku z tym należy zalogować się do subskrypcji SubB, aby uruchomić polecenia interfejsu wiersza polecenia platformy Azure lub Azure PowerShell polecenia, aby wyświetlić zmiany.

Określanie poświadczeń jednostki usługi w bloku dostawcy programu Terraform

Blok dostawcy platformy Azure definiuje składnię, która umożliwia określenie informacji uwierzytelniania subskrypcji platformy 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

Przestroga

Możliwość określenia poświadczeń subskrypcji platformy Azure w pliku konfiguracji programu Terraform może być wygodna — szczególnie podczas testowania. Nie zaleca się jednak przechowywania poświadczeń w pliku w postaci zwykłego tekstu, który może być wyświetlany przez osoby niezauwierzone.

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z narzędzia Terraform na platformie Azure

Następne kroki