Configurar o Terraform no Azure Cloud Shell com Bash
Terraform permite a definição, visualização e implantação de infraestrutura em nuvem. Usando Terraform, você cria arquivos de configuração usando a sintaxe HCL. A sintaxe HCL permite especificar o provedor de nuvem - como o Azure - e os elementos que compõem sua infraestrutura de nuvem. Depois de criar os arquivos de configuração, você cria um plano de execução que permite visualizar as alterações na infraestrutura antes que elas sejam implantadas. Depois de verificar as alterações, você aplica o plano de execução para implantar a infraestrutura.
Este artigo apresenta as opções para autenticar no Azure para uso com o Terraform.
Neste artigo, vai aprender a:
- Configurar o Cloud Shell
- Exibir conta atual do Azure
- Compreender cenários comuns de autenticação do Terraform e do Azure
- Autenticar por meio de uma conta da Microsoft do Cloud Shell (usando Bash ou PowerShell)
- Autenticar através de uma conta Microsoft do Windows (usando Bash ou PowerShell)
- Criar uma entidade de serviço usando a CLI do Azure
- Criar um principal de serviço com o Azure PowerShell
- Especificar credenciais da entidade de serviço em variáveis de ambiente
- Especificar credenciais da entidade de serviço em um bloco de provedor Terraform
1. Configure seu ambiente
- Subscrição do Azure: se não tem uma subscrição do Azure, crie uma conta gratuita antes de começar.
2. Abra o Cloud Shell
Se você já tiver uma sessão do Cloud Shell aberta, pule para a próxima seção.
Navegue para o portal do Azure
Se necessário, inicie sessão na sua subscrição do Azure e altere o diretório do Azure.
Abra o Cloud Shell.
Se você ainda não usou o Cloud Shell, configure o ambiente e as configurações de armazenamento.
Selecione o ambiente de linha de comando.
3. Instale a versão mais recente do Terraform no Azure Cloud Shell
O Cloud Shell atualiza automaticamente para a versão mais recente do Terraform. No entanto, as atualizações chegam dentro de algumas semanas após o lançamento. Este artigo mostra como baixar e instalar a versão atual do Terraform.
Determine a versão do Terraform que está sendo usada no Cloud Shell.
terraform version
Se a versão do Terraform instalada no Cloud Shell não for a versão mais recente, você verá uma mensagem indicando que a versão do Terraform está desatualizada.
Se você estiver bem trabalhando com a versão indicada, pule para a próxima seção. Caso contrário, continue com as etapas a seguir.
Navegue até a página de downloads do Terraform.
Role para baixo até os links de download do Linux .
Mova o mouse sobre o link de 64 bits . Este link é para a versão mais recente da AMD Linux de 64 bits, que é apropriada para o Cloud Shell.
Copiar o URL.
Executar
curl
, substituindo o espaço reservado pela URL da etapa anterior.curl -O <terraform_download_url>
Deszipe o ficheiro.
unzip <zip_file_downloaded_in_previous_step>
Se o diretório não existir, crie um diretório chamado
bin
.mkdir bin
Mova o arquivo para o
terraform
bin
diretório.mv terraform bin/
Feche e reinicie o Cloud Shell.
Verifique se a versão baixada do Terraform está em primeiro lugar no caminho.
terraform version
4. Verifique a assinatura padrão do Azure
Quando inicia sessão no portal do Azure com uma conta Microsoft, é utilizada a subscrição predefinida do Azure para essa conta.
O Terraform autentica automaticamente usando informações da assinatura padrão do Azure.
Execute az account show para verificar a conta Microsoft atual e a assinatura do Azure.
az account show
Todas as alterações feitas por meio do Terraform estão na assinatura do Azure exibida. Se é isso que você quer, pule o resto deste artigo.
5. Autenticar o Terraform no Azure
Cenários de autenticação do Terraform e do Azure
O Terraform só dá suporte à autenticação no Azure por meio da CLI do Azure. Não há suporte para autenticação usando o Azure PowerShell. Portanto, embora você possa usar o módulo do Azure PowerShell ao fazer seu trabalho Terraform, primeiro você precisa autenticar no Azure usando a CLI do Azure.
Este artigo explica como autenticar o Terraform no Azure para os seguintes cenários. Para obter mais informações sobre opções para autenticar o Terraform no Azure, consulte Autenticando usando a CLI do Azure.
- Autenticar por meio de uma conta da Microsoft usando o Cloud Shell (com Bash ou PowerShell)
- Autenticar através de uma conta Microsoft utilizando o Windows (com Bash ou PowerShell)
- Autenticar por meio de uma entidade de serviço:
- Se você não tiver uma entidade de serviço, crie uma entidade de serviço.
- Autenticar no Azure usando variáveis de ambiente ou autenticar no Azure usando o bloco de provedor Terraform
Autenticar no Azure através de uma conta Microsoft
Uma conta Microsoft é um nome de utilizador (associado a um e-mail e respetivas credenciais) que é utilizado para iniciar sessão em serviços Microsoft - como o Azure. Uma conta da Microsoft pode ser associada a uma ou mais assinaturas do Azure, sendo uma dessas assinaturas o padrão.
As etapas a seguir mostram como:
- Entre no Azure interativamente usando uma conta da Microsoft
- Listar as assinaturas do Azure associadas à conta (incluindo o padrão)
- Defina a assinatura atual.
Abra uma linha de comando que tenha acesso à CLI do Azure.
Execute az login sem quaisquer parâmetros e siga as instruções para entrar no Azure.
az login
Pontos principais:
- Após o início de sessão bem-sucedido, apresenta uma lista das subscrições do Azure associadas à conta Microsoft com sessão iniciada,
az login
incluindo a subscrição predefinida.
- Após o início de sessão bem-sucedido, apresenta uma lista das subscrições do Azure associadas à conta Microsoft com sessão iniciada,
Para confirmar a assinatura atual do Azure, execute az account show.
az account show
Para exibir todos os nomes e IDs de assinatura do Azure para uma conta específica da Microsoft, execute az account list.
az account list --query "[?user.name=='<microsoft_account_email>'].{Name:name, ID:id, Default:isDefault}" --output Table
Pontos principais:
- Substitua o espaço reservado
<microsoft_account_email>
pelo endereço de email da conta da Microsoft cujas assinaturas do Azure você deseja listar. - Com uma conta Live, como um Hotmail ou Outlook, talvez seja necessário especificar o endereço de e-mail totalmente qualificado. Por exemplo, se o seu endereço de e-mail for
admin@hotmail.com
, talvez seja necessário substituir o espaço reservado porlive.com#admin@hotmail.com
.
- Substitua o espaço reservado
Para usar uma assinatura específica do Azure, execute az account set.
az account set --subscription "<subscription_id_or_subscription_name>"
Pontos principais:
- Substitua o espaço reservado
<subscription_id_or_subscription_name>
pelo ID ou nome da assinatura que você deseja usar. - A chamada
az account set
não exibe os resultados da mudança para a assinatura do Azure especificada. No entanto, você pode usaraz account show
para confirmar se a assinatura atual do Azure foi alterada. - Se você executar o
az account list
comando da etapa anterior, verá que a assinatura padrão do Azure foi alterada para a assinatura especificada comaz account set
.
- Substitua o espaço reservado
Criar um principal de serviço
As ferramentas automatizadas que implantam ou usam serviços do Azure - como o Terraform - sempre devem ter permissões restritas. Em vez de ter as informações de início de sessão das aplicações como um utilizador totalmente privilegiado, o Azure oferece os principais de serviço.
O padrão mais comum é entrar interativamente no Azure, criar uma entidade de serviço, testar a entidade de serviço e usar essa entidade de serviço para autenticação futura (interativamente ou a partir de seus scripts).
Para criar uma entidade de serviço, entre no Azure. Depois de autenticar no Azure através de uma conta Microsoft, regresse aqui.
Se você estiver criando uma entidade de serviço a partir do Git Bash, defina a
MSYS_NO_PATHCONV
variável de ambiente. (Esta etapa não é necessária se você estiver usando o Cloud Shell.)export MSYS_NO_PATHCONV=1
Pontos principais:
- Você pode definir a variável de ambiente globalmente (para todas as sessões do terminal) ou localmente (apenas para a
MSYS_NO_PATHCONV
sessão atual). Como a criação de uma entidade de serviço não é algo que você faz com frequência, o exemplo define o valor para a sessão atual. Para definir essa variável de ambiente globalmente, adicione a configuração ao~/.bashrc
arquivo.
- Você pode definir a variável de ambiente globalmente (para todas as sessões do terminal) ou localmente (apenas para a
Para criar uma entidade de serviço, execute az ad sp create-for-rbac.
az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>
Pontos principais:
- Você pode substituir o por um nome personalizado para seu ambiente ou omitir o
<service-principal-name>
parâmetro completamente. Se você omitir o parâmetro, o nome da entidade de serviço será gerado com base na data e hora atuais. - Após a conclusão bem-sucedida,
az ad sp create-for-rbac
exibe vários valores. OsappId
valores ,password
e etenant
são usados na próxima etapa. - A senha não pode ser recuperada se perdida. Como tal, deve guardar a sua palavra-passe num local seguro. Se se esquecer da sua palavra-passe, pode repor as credenciais da entidade de serviço.
- Para este artigo, uma entidade de serviço com uma função de Colaborador está sendo usada. Para obter mais informações sobre funções RBAC (Controle de Acesso Baseado em Função), consulte RBAC: funções internas.
- A saída da criação da entidade de serviço inclui credenciais confidenciais. Certifique-se de não incluir essas credenciais em seu código ou verifique as credenciais em seu controle de origem.
- Para obter mais informações sobre opções ao criar uma entidade de serviço com a CLI do Azure, consulte o artigo Criar uma entidade de serviço do Azure com a CLI do Azure.
- Você pode substituir o por um nome personalizado para seu ambiente ou omitir o
Especificar credenciais da entidade de serviço em variáveis de ambiente
Depois de criar uma entidade de serviço, você pode especificar suas credenciais para Terraform por meio de variáveis de ambiente.
Edite o
~/.bashrc
arquivo adicionando as seguintes variáveis de ambiente.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>"
Para executar o
~/.bashrc
script, executesource ~/.bashrc
(ou seu equivalente. ~/.bashrc
abreviado). Você também pode sair e reabrir o Cloud Shell para que o script seja executado automaticamente.. ~/.bashrc
Depois que as variáveis de ambiente tiverem sido definidas, você poderá verificar seus valores da seguinte maneira:
printenv | grep ^ARM*
Pontos principais:
- Como com qualquer variável de ambiente, para acessar um valor de assinatura do Azure de dentro de um script Terraform, use a seguinte sintaxe:
${env.<environment_variable>}
. Por exemplo, para acessar oARM_SUBSCRIPTION_ID
valor, especifique${env.ARM_SUBSCRIPTION_ID}
. - Criar e aplicar planos de execução do Terraform faz alterações na assinatura do Azure associada à entidade de serviço. Esse fato às vezes pode ser confuso se você estiver conectado a uma assinatura do Azure e as variáveis de ambiente apontarem para uma segunda assinatura do Azure. Vejamos o exemplo a seguir para explicar. Digamos que você tenha duas assinaturas do Azure: SubA e SubB. Se a assinatura atual do Azure for SubA (determinada via
az account show
) enquanto as variáveis de ambiente apontarem para SubB, todas as alterações feitas pelo Terraform estarão em SubB. Portanto, você precisaria fazer logon em sua assinatura SubB para executar comandos da CLI do Azure ou comandos do Azure PowerShell para exibir suas alterações.
Especificar credenciais da entidade de serviço em um bloco de provedor Terraform
O bloco de provedor do Azure define a sintaxe que permite especificar as informações de autenticação da sua assinatura do 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
Atenção
A capacidade de especificar suas credenciais de assinatura do Azure em um arquivo de configuração do Terraform pode ser conveniente - especialmente durante o teste. No entanto, não é aconselhável armazenar credenciais em um arquivo de texto não criptografado que possa ser visualizado por indivíduos não confiáveis.
Solucionar problemas do Terraform no Azure
Solucionar problemas comuns ao usar o Terraform no Azure
Próximos passos
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários