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
Jeśli masz już otwartą sesję Cloud Shell, możesz przejść do następnej sekcji.
Przejdź do witryny Azure Portal
W razie potrzeby zaloguj się do subskrypcji platformy Azure i zmień katalog platformy Azure.
Otwórz usługę Cloud Shell.
Jeśli wcześniej nie użyto Cloud Shell, skonfiguruj ustawienia środowiska i magazynu.
Wybierz środowisko wiersza polecenia.
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.
Określ wersję programu Terraform używaną w Cloud Shell.
terraform version
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.
Jeśli dobrze pracujesz z wskazaną wersją, przejdź do następnej sekcji. W przeciwnym razie wykonaj następujące kroki.
Przejdź do strony pobierania narzędzia Terraform.
Przewiń w dół do linków pobierania systemu Linux .
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.
Skopiuj adres URL.
Uruchom
curl
polecenie , zastępując symbol zastępczy adresem URL z poprzedniego kroku.curl -O <terraform_download_url>
Rozpakuj plik.
unzip <zip_file_downloaded_in_previous_step>
Jeśli katalog nie istnieje, utwórz katalog o nazwie
bin
.mkdir bin
terraform
Przenieś plik dobin
katalogu.mv terraform bin/
Zamknij i uruchom ponownie Cloud Shell.
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 przy użyciu konta Microsoft przy użyciu Cloud Shell (z powłoką Bash lub programem PowerShell) i
- Uwierzytelnianie za pośrednictwem konta Microsoft przy użyciu systemu Windows (z powłoką Bash lub programem PowerShell)
- Uwierzytelnianie za pośrednictwem jednostki usługi:
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ę.
Otwórz wiersz polecenia, który ma dostęp do interfejsu wiersza polecenia platformy Azure.
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ą.
- Po pomyślnym zalogowaniu
Aby potwierdzić bieżącą subskrypcję platformy Azure, uruchom polecenie az account show.
az account show
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 symbolemlive.com#admin@hotmail.com
.
- Zastąp
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ą poleceniaaz 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).
Aby utworzyć jednostkę usługi, zaloguj się na platformie Azure. Po uwierzytelnieniu na platformie Azure za pośrednictwem konta Microsoft wróć tutaj.
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.
- Zmienną
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ściappId
,password
itenant
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.
- Możesz zastąpić
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.
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>"
Aby wykonać
~/.bashrc
skrypt, uruchom poleceniesource ~/.bashrc
(lub jego skrócony odpowiednik. ~/.bashrc
). Możesz również zamknąć i ponownie otworzyć Cloud Shell, aby skrypt był uruchamiany automatycznie.. ~/.bashrc
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 doARM_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