A Microsoft anunciou melhorias significativas na integração entre o Azure DevOps e o Terraform, com o lançamento da versão 5 da tarefa Microsoft DevLabs Terraform Task. Essa atualização introduz o suporte nativo ao ID Token Refresh, aprimorando a autenticação em pipelines que utilizam Workload Identity Federation via OpenID Connect (OIDC).
O que é o ID Token Refresh?
Em cenários de Workload Identity Federation, o Azure DevOps emite um ID Token com validade curta (~5 minutos), que é trocado por um Access Token para autenticação no Azure. Em pipelines longos ou com etapas manuais, esse token pode expirar, resultando em erros como AADSTS700024: Client assertion is not within its valid time range
. O ID Token Refresh permite que o pipeline solicite um novo ID Token automaticamente quando necessário, garantindo a continuidade da execução.
O que mudou na versão 5 da Terraform Task?
A versão 5 da tarefa Microsoft DevLabs Terraform Task agora suporta o ID Token Refresh por padrão ao utilizar conexões de serviço com Workload Identity Federation. Isso elimina a necessidade de configurações manuais para renovação de tokens, tornando os pipelines mais resilientes.(//devedigest)
Além disso, os seguintes provedores Terraform foram atualizados para suportar essa funcionalidade:
azurerm
azapi
azuread
O backend azurerm
para estado remoto também foi ajustado para compatibilidade com o ID Token Refresh.
Configuração do ID Token Refresh
Para utilizar o ID Token Refresh, é necessário definir as seguintes variáveis de ambiente:
ARM_OIDC_AZURE_SERVICE_CONNECTION_ID
: ID da conexão de serviço no Azure DevOps.
ARM_OIDC_REQUEST_URL
: URL da API para solicitação de novos ID Tokens (padrão: SYSTEM_OIDCREQUESTURI
).
ARM_OIDC_REQUEST_TOKEN
: Token de acesso do sistema (System.AccessToken
).
No entanto, ao utilizar a versão 5 da Terraform Task, essas configurações são gerenciadas automaticamente pela tarefa, simplificando o processo para os usuários.
Exemplo de uso no YAML
Um exemplo de pipeline utilizando a nova tarefa:(Stack Overflow)
- task: TerraformTask@5
displayName: 'Terraform Init'
inputs:
provider: 'azurerm'
command: 'init'
backendServiceArm: 'sua-conexao-de-servico'
backendAzureRmStorageAccountName: 'nome-do-storage'
backendAzureRmContainerName: 'nome-do-container'
backendAzureRmKey: 'state.tfstate'
- task: TerraformTask@5
name: terraformPlan
displayName: 'Terraform Plan'
inputs:
provider: 'azurerm'
command: 'plan'
commandOptions: '-out tfplan'
environmentServiceNameAzureRM: 'sua-conexao-de-servico'
- task: TerraformTask@5
displayName: 'Terraform Apply'
condition: and(succeeded(), eq(variables['terraformPlan.changesPresent'], 'true'))
inputs:
provider: 'azurerm'
command: 'apply'
commandOptions: 'tfplan'
environmentServiceNameAzureRM: 'sua-conexao-de-servico'
Benefícios para equipes DevOps
- Resiliência aprimorada: Evita falhas em pipelines longos devido à expiração de tokens.
- Automação simplificada: Reduz a necessidade de scripts personalizados para renovação de tokens.
- Segurança reforçada: Adoção de autenticação sem senha com tokens de curta duração.
- Integração facilitada: Compatibilidade com provedores e backends atualizados.
Comments
Post a Comment